diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f222fba2..c2eee2036 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ _All notable changes to this project will be documented in this file. This proje + + ## [0.17.0](https://github.com/uber/nebula.gl/compare/v0.16.0...v0.17.0) - 2020-01-10 ### Changes @@ -19,8 +24,8 @@ _All notable changes to this project will be documented in this file. This proje ### Breaking changes -* DrawCircleByBoundingBoxMode renamed to DrawCircleByDiameterMode (#314) -* The following props of `EditableGeoJsonLayer` are no longer proxied by nebula.gl, instead use deck.gl's [_subLayerProps](https://deck.gl/#/documentation/deckgl-api-reference/layers/composite-layer?section=_sublayerprops-object-experimental): +* DrawCircleByBoundingBoxMode renamed to DrawCircleByDiameterMode (#314) +* The following props of `EditableGeoJsonLayer` are no longer proxied by nebula.gl (instead use deck.gl's [_subLayerProps](https://deck.gl/#/documentation/deckgl-api-reference/layers/composite-layer?section=_sublayerprops-object-experimental)): * `getLineDashArray` * `lineDashJustified` * `getTentativeLineDashArray` diff --git a/examples/advanced/package.json b/examples/advanced/package.json index d5e8132ce..8f8eca66d 100644 --- a/examples/advanced/package.json +++ b/examples/advanced/package.json @@ -4,13 +4,13 @@ "start-local": "webpack-dev-server --env.local --progress --hot --open" }, "dependencies": { - "@deck.gl/core": "^8.0.3", - "@deck.gl/layers": "^8.0.3", - "@deck.gl/react": "^8.0.3", - "@deck.gl/mesh-layers": "^8.0.3", + "@deck.gl/core": "^8.0.6", + "@deck.gl/layers": "^8.0.6", + "@deck.gl/mesh-layers": "^8.0.6", + "@deck.gl/react": "^8.0.6", "react": "^16.0.0", "react-dom": "^16.4.2", - "react-map-gl": "^3.3.4", + "react-map-gl": "^5.2.1", "styled-components": "^4.3.2" }, "devDependencies": { diff --git a/examples/advanced/yarn.lock b/examples/advanced/yarn.lock index 7daf2a9b7..06e6c6d42 100644 --- a/examples/advanced/yarn.lock +++ b/examples/advanced/yarn.lock @@ -29,18 +29,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196" - integrity sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ== - dependencies: - "@babel/types" "^7.4.0" - jsesc "^2.5.1" - lodash "^4.17.11" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/generator@^7.4.4": +"@babel/generator@^7.4.0", "@babel/generator@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ== @@ -209,14 +198,7 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" - integrity sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw== - dependencies: - "@babel/types" "^7.4.0" - -"@babel/helper-split-export-declaration@^7.4.4": +"@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.0", "@babel/helper-split-export-declaration@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== @@ -251,12 +233,7 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.4.0", "@babel/parser@^7.4.3": - version "7.4.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.3.tgz#eb3ac80f64aa101c907d4ce5406360fe75b7895b" - integrity sha512-gxpEUhTS1sGA63EGQGuA+WESPR/6tz6ng7tSHFCmaTJK/cGK8y37cBTspX+U2xCAue2IQVvF6Z0oigmjwD8YGQ== - -"@babel/parser@^7.4.5": +"@babel/parser@^7.4.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.5": version "7.4.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872" integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew== @@ -740,7 +717,7 @@ "@babel/parser" "^7.4.0" "@babel/types" "^7.4.0" -"@babel/traverse@^7.0.0": +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.0", "@babel/traverse@^7.4.3": version "7.4.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216" integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A== @@ -755,31 +732,7 @@ globals "^11.1.0" lodash "^4.17.11" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.0", "@babel/traverse@^7.4.3": - version "7.4.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.3.tgz#1a01f078fc575d589ff30c0f71bf3c3d9ccbad84" - integrity sha512-HmA01qrtaCwwJWpSKpA948cBvU5BrmviAief/b3AVw936DtcdsTexlbyzNuDnthwhOQ37xshn7hvQaEQk7ISYQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.4.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/types" "^7.4.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.11" - -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" - integrity sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA== - dependencies: - esutils "^2.0.2" - lodash "^4.17.11" - to-fast-properties "^2.0.0" - -"@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== @@ -788,13 +741,13 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" -"@deck.gl/core@^8.0.3": - version "8.0.3" - resolved "https://registry.yarnpkg.com/@deck.gl/core/-/core-8.0.3.tgz#6e7e4617b4bc8f44fcd5764f32d71abff2b773f5" - integrity sha512-XNeun2Z24cjbZm0NE5hmzNtJ41v1rkQ6VeIDc5eaWUtzA/khmBYeBO4x0OzTkuQo7jAZ9jbxp8/2pPO3+RmOCA== +"@deck.gl/core@^8.0.6": + version "8.0.6" + resolved "https://registry.yarnpkg.com/@deck.gl/core/-/core-8.0.6.tgz#5bdee9323e69cf4ffc6dddeb8ab9cb10f552b7fe" + integrity sha512-wiGVBSnsP8lcbNPAqqnEYslvIcHMBP3++rvYtGzwyweYnfQobcI7i54fpRLJtYTjBhIdL15VxOCiVwFWJ/Dp+w== dependencies: - "@loaders.gl/core" "^2.0.0" - "@loaders.gl/images" "^2.0.0" + "@loaders.gl/core" "^2.0.2" + "@loaders.gl/images" "^2.0.2" "@luma.gl/core" "^8.0.1" "@math.gl/web-mercator" "^3.1.3" gl-matrix "^3.0.0" @@ -802,26 +755,27 @@ mjolnir.js "^2.1.2" probe.gl "^3.2.0" -"@deck.gl/layers@^8.0.3": - version "8.0.3" - resolved "https://registry.yarnpkg.com/@deck.gl/layers/-/layers-8.0.3.tgz#8917fb6b8acaf137a3a3b209bdb48991e01eb84c" - integrity sha512-hICrAjhhIKASigUnJ9gtyZg1Qn8NUTx0SguYf4kbfRbtVGkmRufTf2CB0Ljcu6bxEXPjdRq4plKiVn5bz1QoGg== +"@deck.gl/layers@^8.0.6": + version "8.0.6" + resolved "https://registry.yarnpkg.com/@deck.gl/layers/-/layers-8.0.6.tgz#1bee0e7ad9a2a0ce42cfab6f6d1c953a2fe2a16b" + integrity sha512-OHGMf5DF8ibqEraEUxBgUt7fcMqPtarzq9ciPZtWG4JjxbzqqAfDwuPYzgBdapL+978lpqKHmXpd/sEQfE2Lfw== dependencies: - "@loaders.gl/images" "^2.0.0" + "@loaders.gl/core" "^2.0.2" + "@loaders.gl/images" "^2.0.2" "@mapbox/tiny-sdf" "^1.1.0" earcut "^2.0.6" -"@deck.gl/mesh-layers@^8.0.3": - version "8.0.3" - resolved "https://registry.yarnpkg.com/@deck.gl/mesh-layers/-/mesh-layers-8.0.3.tgz#e400b011a1e82170647ba36e5cbbc2218bf50c03" - integrity sha512-5MWLkAwN2KW6O5viUGAnATVmp7leZiVKgtnVFMuLxzRdsvdwhQYlI7hI2y2BSR9pdxe2V1Fhdst1ZStdvDi33Q== +"@deck.gl/mesh-layers@^8.0.6": + version "8.0.6" + resolved "https://registry.yarnpkg.com/@deck.gl/mesh-layers/-/mesh-layers-8.0.6.tgz#e72d098ef83aba134a654919f1a79dd81becaf67" + integrity sha512-Kw7Mvuv+b9CdiVPRj3l3q6npqZ4LcTf3UdeTd7wow2kxK8RCGeNy593OmuSgBXECOwL1LvOCD+uBvV4lZdm0Ew== dependencies: "@luma.gl/experimental" "^8.0.1" -"@deck.gl/react@^8.0.3": - version "8.0.3" - resolved "https://registry.yarnpkg.com/@deck.gl/react/-/react-8.0.3.tgz#b173060cc2c16bbcd669b037d0785d56892d0e9f" - integrity sha512-9FLIub6oCMOEBSKcxEDsZN8asJRI3SoVF+vBfXNBBtsMFU2aPyhDY9ZxPgsLhgxhZAK3QlXPXVQL3M1pR6A5nA== +"@deck.gl/react@^8.0.6": + version "8.0.6" + resolved "https://registry.yarnpkg.com/@deck.gl/react/-/react-8.0.6.tgz#2fcd8e0e43fcc0aabdff73a37fbf8d3f1fbc036e" + integrity sha512-7d5K7WZ0Sbnui184WFGNPZpIEFJXyamYzp1HLDePEJzkaD0LRL8ug4wmxEt21a7GnWBqNrZT83GHX+j8d8vS2A== dependencies: prop-types "^15.6.0" @@ -842,23 +796,23 @@ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.3.tgz#6310a047f12d21a1036fb031317219892440416f" integrity sha512-4zAPlpDEh2VwXswwr/t8xGNDGg8RQiPxtxZ3qQEXyQsBV39ptTdESCjuBvGze1nLMVrxmTIKmnO/nAV8Tqjjzg== -"@loaders.gl/core@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@loaders.gl/core/-/core-2.0.0.tgz#ab84b94efb8ad3a90133389e5b76f6a721b20419" - integrity sha512-tcKTfDy3H7jsP61pEWG22rjnSjz4JzXlBzJuMt86Z76ASM1ZY5glfnNneA/x6Yqcl+8U0003B2PtRIFtQgo9og== +"@loaders.gl/core@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@loaders.gl/core/-/core-2.0.2.tgz#1ca39ce7168379bd24e39a2a443672b01bf764af" + integrity sha512-l2atBRmKln/0M6GEbtobS1fIIYzGfbN72Vloc3V4+p31gxDsWj35QLvHMAc4K8SOE0lk5gRDcZkJjYQo90JoUQ== dependencies: "@babel/runtime" "^7.3.1" - "@loaders.gl/loader-utils" "2.0.0" + "@loaders.gl/loader-utils" "2.0.2" -"@loaders.gl/images@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@loaders.gl/images/-/images-2.0.0.tgz#d3425ac855dfa54bd8119014bd548ea6f8a2ac5b" - integrity sha512-GUsN7hSpYGtVNf3EcWjh1QgzJXJrS73KkD7GgM/pGqMpFlmNOkWYjW0DV8yYHikRQG4awNMGKgnUUzmXtdgpzQ== +"@loaders.gl/images@^2.0.0", "@loaders.gl/images@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@loaders.gl/images/-/images-2.0.2.tgz#546929146b38a428e55905e513b4b9ec7afc58e2" + integrity sha512-H6xhSvM24CI++P46TZRLX+95mn5B4HaP0jWGSIn2Lo0aBpcI9/T8z2EZhJyihjoR450fph1ER0j+Mnz+ovHEGg== -"@loaders.gl/loader-utils@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@loaders.gl/loader-utils/-/loader-utils-2.0.0.tgz#8de22bd999fd09f5769fd70e23e7280c5a598506" - integrity sha512-dK3pjS56M+18CrgdycgTsF/YkanWSojO/1JHVBB+KorjqoMWXhtCAnTToQ60u+XA8k0AF3mBQUPL7Hd2OIsbmA== +"@loaders.gl/loader-utils@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@loaders.gl/loader-utils/-/loader-utils-2.0.2.tgz#9ee11de0ae9f8d8d7c763fb5d17b3eeb0b5a888d" + integrity sha512-sowdxj1wE2lSXSBSJswNjWfJvfdi21ZG9nB7OmenvbPiqcd1NyjUVsr+TeiTBiRsPlyQhp5BjVEYnywDLHSNUg== dependencies: "@babel/runtime" "^7.3.1" @@ -934,6 +888,16 @@ dependencies: wgs84 "0.0.0" +"@mapbox/geojson-rewind@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.4.0.tgz#0d3632d4c1b4a928cf10a06ade387e1c8a8c181b" + integrity sha512-b+1uPWBERW4Pet/969BNu61ZPDyH2ilIxBjJDFzxyS9TyszF9UrTQyYIl/G38clux3rtpAGGFSGTCSF/qR6UjA== + dependencies: + "@mapbox/geojson-area" "0.2.2" + concat-stream "~1.6.0" + minimist "1.2.0" + sharkdown "^0.1.0" + "@mapbox/geojson-types@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6" @@ -1173,11 +1137,6 @@ acorn-dynamic-import@^4.0.0: resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== -acorn@^5.0.0: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== - acorn@^6.0.5: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" @@ -1359,14 +1318,6 @@ babel-plugin-syntax-jsx@^6.18.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= -babel-runtime@^6.23.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -1477,16 +1428,6 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -brfs@^1.4.4: - version "1.6.1" - resolved "https://registry.yarnpkg.com/brfs/-/brfs-1.6.1.tgz#b78ce2336d818e25eea04a0947cba6d4fb8849c3" - integrity sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ== - dependencies: - quote-stream "^1.0.1" - resolve "^1.1.5" - static-module "^2.2.0" - through2 "^2.0.0" - brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -1560,11 +1501,6 @@ browserslist@^4.5.2, browserslist@^4.5.4: electron-to-chromium "^1.3.122" node-releases "^1.1.13" -buffer-equal@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" - integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= - buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1856,7 +1792,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.1.0, convert-source-map@^1.5.1: +convert-source-map@^1.1.0: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== @@ -1910,11 +1846,6 @@ core-js@3.0.1: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.1.tgz#1343182634298f7f38622f95e73f54e48ddf4738" integrity sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew== -core-js@^2.4.0: - version "2.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" - integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== - core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -2064,11 +1995,6 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - default-gateway@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" @@ -2233,13 +2159,6 @@ domutils@^1.5.1: dom-serializer "0" domelementtype "1" -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - dependencies: - readable-stream "^2.0.2" - duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -2250,10 +2169,10 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -earcut@^2.0.6, earcut@^2.1.3: - version "2.1.5" - resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.1.5.tgz#829280a9a3a0f5fee0529f0a47c3e4eff09b21e4" - integrity sha512-QFWC7ywTVLtvRAJTVp8ugsuuGQ5mVqNmJ1cRYeLrSHgP3nycr2RHTJob9OtM0v8ujuoKN0NY1a93J/omeTL1PA== +earcut@^2.0.6, earcut@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.1.tgz#3bae0b1b6fec41853b56b126f03a42a34b28f1d5" + integrity sha512-5jIMi2RB3HtGPHcYd9Yyl0cczo84y+48lgKPxMijliNQaKAHEZJbdzLmKmdxG/mCdS/YD9DQ1gihL8mxzR0F9w== ee-first@1.1.1: version "1.1.1" @@ -2347,30 +2266,6 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.8.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" - integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw== - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -escodegen@~1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" - integrity sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q== - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - eslint-scope@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -2379,11 +2274,6 @@ eslint-scope@^4.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - esprima@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" @@ -2396,7 +2286,7 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= @@ -2534,16 +2424,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -falafel@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.1.0.tgz#96bb17761daba94f46d001738b3cedf3a67fe06c" - integrity sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw= - dependencies: - acorn "^5.0.0" - foreach "^2.0.5" - isarray "0.0.1" - object-keys "^1.0.6" - fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" @@ -2554,11 +2434,6 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -2647,11 +2522,6 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= - forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -2726,17 +2596,7 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -geojson-rewind@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/geojson-rewind/-/geojson-rewind-0.3.1.tgz#22240797c847cc2f0c1d313e4aa0c915afa7f29d" - integrity sha1-IiQHl8hHzC8MHTE+SqDJFa+n8p0= - dependencies: - "@mapbox/geojson-area" "0.2.2" - concat-stream "~1.6.0" - minimist "1.2.0" - sharkdown "^0.1.0" - -geojson-vt@^3.2.0: +geojson-vt@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== @@ -2758,11 +2618,6 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -gl-matrix@^2.6.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-2.8.1.tgz#1c7873448eac61d2cd25803a074e837bd42581a3" - integrity sha512-0YCjVpE3pS5XWlN3J4X7AiAx65+nqAI54LndtVFnQZB6G/FVLkZH8y8V6R3cIoOQR4pUdfwQGd1iwyoXHJ4Qfw== - gl-matrix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.0.0.tgz#888301ac7650e148c3865370e13ec66d08a8381f" @@ -2829,7 +2684,7 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== -grid-index@^1.0.0: +grid-index@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7" integrity sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA== @@ -3062,11 +2917,6 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -immutable@^3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" - integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= - import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -3331,11 +3181,6 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -3412,10 +3257,10 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" -kdbush@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-2.0.1.tgz#90c6128e3001ac68c550d7c9e2f222c0269666f1" - integrity sha512-9KqSdmWCkBIisFIGclT0FRagKhI7IVbMyUjsxCFG0Ly1Dg6whlxJ7b9lrq8ifk3X/fGeJzok1R75LQfZTfA5zQ== +kdbush@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0" + integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew== killable@^1.0.1: version "1.0.1" @@ -3453,14 +3298,6 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - loader-runner@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -3522,13 +3359,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -magic-string@^0.22.4: - version "0.22.5" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" - integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== - dependencies: - vlq "^0.2.2" - make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -3561,11 +3391,12 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -mapbox-gl@~0.50.0: - version "0.50.0" - resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-0.50.0.tgz#49f44149f02fdd25ab64a2ec4efc7a11a5c96f55" - integrity sha512-rr/fP1mlsQBtAE3JaYenSFM5tYRzYaSU1j7KsrPtICSHMzAUMrsl1TlnC5JpMbcZu6nu8R2GFTJ8hYsoBsX9Bg== +mapbox-gl@^1.0.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.6.1.tgz#bc9beb2d7d6464b0d281a225a3f23bd3a84d9f49" + integrity sha512-qUvu8c/WX0woSLj8M64eK8351th4RI2+grGJ0ZlFb5ELEJNTb4SqMX/4uxRkb5d1euh2U72+AML1QOZjQnUPUw== dependencies: + "@mapbox/geojson-rewind" "^0.4.0" "@mapbox/geojson-types" "^1.0.2" "@mapbox/jsonlint-lines-primitives" "^2.0.2" "@mapbox/mapbox-gl-supported" "^1.4.0" @@ -3574,30 +3405,20 @@ mapbox-gl@~0.50.0: "@mapbox/unitbezier" "^0.0.0" "@mapbox/vector-tile" "^1.3.1" "@mapbox/whoots-js" "^3.1.0" - brfs "^1.4.4" csscolorparser "~1.0.2" - earcut "^2.1.3" - geojson-rewind "^0.3.0" - geojson-vt "^3.2.0" - gl-matrix "^2.6.1" - grid-index "^1.0.0" + earcut "^2.2.0" + geojson-vt "^3.2.1" + gl-matrix "^3.0.0" + grid-index "^1.1.0" minimist "0.0.8" murmurhash-js "^1.0.0" - pbf "^3.0.5" + pbf "^3.2.1" potpack "^1.0.1" - quickselect "^1.0.0" + quickselect "^2.0.0" rw "^1.3.3" - supercluster "^4.1.1" - tinyqueue "^1.1.0" - vt-pbf "^3.0.1" - -math.gl@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/math.gl/-/math.gl-2.3.1.tgz#4099e0e34f03dbc458e57945583badb3a517ce8f" - integrity sha512-364xFXawzGCp46BmaEcKMAYgDLsaSqXO3ki4XAh+8aJAFNcdJFeORpoZFRLdZMZzwdOepwfcc+rk3LhDNJZF1Q== - dependencies: - "@babel/runtime" "^7.0.0" - gl-matrix "^3.0.0" + supercluster "^7.0.0" + tinyqueue "^2.0.0" + vt-pbf "^3.1.1" math.gl@^3.1.2: version "3.1.3" @@ -3654,13 +3475,6 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= -merge-source-map@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" - integrity sha1-pd5GU42uhNQRTMXqArR3KmNGcB8= - dependencies: - source-map "^0.5.6" - methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -3752,7 +3566,7 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@1.2.0, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= @@ -3796,17 +3610,10 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mjolnir.js@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/mjolnir.js/-/mjolnir.js-1.2.2.tgz#65938d6b443fed5b5c65456e6c934b01fece3610" - integrity sha512-mHUweKiDag0ieTANM6ao++9rktEqp6FgBALLH3fWRzgt6NF+BdcNMR06MMHHSQYCK9ywCjhg76FOy/efwdaEJg== - dependencies: - hammerjs "^2.0.8" - -mjolnir.js@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/mjolnir.js/-/mjolnir.js-2.1.2.tgz#db89819c418b6f3d200b1c51386fc7487f98bd5a" - integrity sha512-OjvkNzTCdJd/I7XxgIomNozYS6me6OWY+t8I6SZlINaFmNmgAW3I5x+Hd8sgA+WxAjFvBf576lD7N1MGo89/WA== +mjolnir.js@^2.1.2, mjolnir.js@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/mjolnir.js/-/mjolnir.js-2.3.0.tgz#192e66fb21b9e81521ee3ac71676e2a3fa678dec" + integrity sha512-ungiyxsr+E/M6/76e/K3Ut98QbuEO3UhvC3ucHplDkOpA1x7TeAm01hpP3E8bDsYFrkPk4PCUVJEuirZWguxEA== dependencies: "@babel/runtime" "^7.0.0" hammerjs "^2.0.8" @@ -4044,12 +3851,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@~1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.4.1.tgz#37ffb10e71adaf3748d05f713b4c9452f402cbc4" - integrity sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw== - -object-keys@^1.0.12, object-keys@^1.0.6: +object-keys@^1.0.12: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -4107,18 +3909,6 @@ opn@^5.5.0: dependencies: is-wsl "^1.1.0" -optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -4285,10 +4075,10 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -pbf@^3.0.5: - version "3.2.0" - resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.0.tgz#e76f9f5114e395c25077ad6fe463b3507d6877fc" - integrity sha512-98Eh7rsJNJF/Im6XYMLaOW3cLnNyedlOd6hu3iWMD5I7FZGgpw8yN3vQBrmLbLodu7G784Irb9Qsv2yFrxSAGw== +pbf@^3.0.5, pbf@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" + integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ== dependencies: ieee754 "^1.1.12" resolve-protobuf-schema "^2.1.0" @@ -4357,11 +4147,6 @@ potpack@^1.0.1: resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.1.tgz#d1b1afd89e4c8f7762865ec30bd112ab767e2ebf" integrity sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw== -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - pretty-error@^2.0.2: version "2.1.1" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" @@ -4398,7 +4183,7 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.2: +prop-types@^15.5.4, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -4497,19 +4282,10 @@ querystringify@^2.0.0: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== -quickselect@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-1.1.1.tgz#852e412ce418f237ad5b660d70cffac647ae94c2" - integrity sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ== - -quote-stream@^1.0.1, quote-stream@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/quote-stream/-/quote-stream-1.0.2.tgz#84963f8c9c26b942e153feeb53aae74652b7e0b2" - integrity sha1-hJY/jJwmuULhU/7rU6rnRlK34LI= - dependencies: - buffer-equal "0.0.1" - minimist "^1.1.3" - through2 "^2.0.0" +quickselect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" + integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" @@ -4566,18 +4342,22 @@ react-is@^16.6.0, react-is@^16.8.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== -react-map-gl@^3.3.4: - version "3.3.9" - resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-3.3.9.tgz#028526d7f70d8391784d8804e21005497752c194" - integrity sha512-nNy/ovQ1pdbwozQAb56Us8IejABM2byM3A84QXYr9tX5CBN0//jODUUToN1aHxYVnF2sqKMLYKlgjBMcfnYVNg== +react-map-gl@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-5.2.1.tgz#a56977987be8d844c9cec90a0668d6f9e928e930" + integrity sha512-8o8WhCIhOS90FfEEnXJDcylnq0qZPdsMaQVW0qBVY9GYbnRJQlCw6ZTusg0rgmCYmbXKWA1ApuKnA7PrpXRxlQ== dependencies: - babel-runtime "^6.23.0" - immutable "^3.8.2" - mapbox-gl "~0.50.0" - math.gl "^2.0.0" - mjolnir.js "^1.2.1" - prop-types "^15.5.7" - viewport-mercator-project "^6.0.0" + "@babel/runtime" "^7.0.0" + mapbox-gl "^1.0.0" + mjolnir.js "^2.2.0" + prop-types "^15.7.2" + react-virtualized-auto-sizer "^1.0.2" + viewport-mercator-project "^6.2.3 || ^7.0.1" + +react-virtualized-auto-sizer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.2.tgz#a61dd4f756458bbf63bd895a92379f9b70f803bd" + integrity sha512-MYXhTY1BZpdJFjUovvYHVBmkq79szK/k7V3MO+36gJkWGkrXKtyr4vCPtpphaTLRAdDNoYEYFZWE8LjN+PIHNg== react@^16.0.0: version "16.8.6" @@ -4589,7 +4369,7 @@ react@^16.0.0: prop-types "^15.6.2" scheduler "^0.13.6" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.3, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -4639,11 +4419,6 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - regenerator-runtime@^0.13.2: version "0.13.2" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" @@ -4771,7 +4546,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.5, resolve@^1.3.2: +resolve@^1.3.2: version "1.10.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== @@ -4961,11 +4736,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-copy@~0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" - integrity sha1-QV9CcC1z2BAzApLMXuhurhoRoXA= - sharkdown@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/sharkdown/-/sharkdown-0.1.1.tgz#64484bd0f08f347f8319e9ff947a670f6b48b1b2" @@ -5125,13 +4895,6 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -static-eval@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.2.tgz#2d1759306b1befa688938454c546b7871f806a42" - integrity sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg== - dependencies: - escodegen "^1.8.1" - static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -5140,26 +4903,6 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -static-module@^2.2.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/static-module/-/static-module-2.2.5.tgz#bd40abceae33da6b7afb84a0e4329ff8852bfbbf" - integrity sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ== - dependencies: - concat-stream "~1.6.0" - convert-source-map "^1.5.1" - duplexer2 "~0.1.4" - escodegen "~1.9.0" - falafel "^2.1.0" - has "^1.0.1" - magic-string "^0.22.4" - merge-source-map "1.0.4" - object-inspect "~1.4.0" - quote-stream "~1.0.2" - readable-stream "~2.3.3" - shallow-copy "~0.0.1" - static-eval "^2.0.0" - through2 "~2.0.3" - "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -5286,12 +5029,12 @@ stylis@^3.5.0: resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== -supercluster@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-4.1.1.tgz#cf13c3b28a3fb3db5290bfad7f524e244bd4ce78" - integrity sha512-sF0FfUOPFp96DKzwWFLeQOEqqKu2PpcesxAFeFsknA/q7g7igVVn/p3NI2XHEghNSyDAqunKNKqAbqNO8+7NDQ== +supercluster@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-7.0.0.tgz#75d474fafb0a055db552ed7bd7bbda583f6ab321" + integrity sha512-8VuHI8ynylYQj7Qf6PBMWy1PdgsnBiIxujOgc9Z83QvJ8ualIYWNx2iMKyKeC4DZI5ntD9tz/CIwwZvIelixsA== dependencies: - kdbush "^2.0.1" + kdbush "^3.0.0" supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" @@ -5348,7 +5091,7 @@ terser@^3.16.1: source-map "~0.6.1" source-map-support "~0.5.10" -through2@^2.0.0, through2@~2.0.3: +through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -5373,10 +5116,10 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -tinyqueue@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-1.2.3.tgz#b6a61de23060584da29f82362e45df1ec7353f3d" - integrity sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA== +tinyqueue@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" + integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== to-arraybuffer@^1.0.0: version "1.0.1" @@ -5433,13 +5176,6 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - type-is@~1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" @@ -5625,18 +5361,12 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -viewport-mercator-project@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/viewport-mercator-project/-/viewport-mercator-project-6.1.1.tgz#d7b2cb3cb772b819f1daab17cf4019102a9102a6" - integrity sha512-nI0GEmXnESwZxWSJuaQkdCnvOv6yckUfqqFbNB8KWVbQY3eUExVM4ZziqCVVs5mNznLjDF1auj6HLW5D5DKcng== +"viewport-mercator-project@^6.2.3 || ^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/viewport-mercator-project/-/viewport-mercator-project-7.0.1.tgz#9d7248072f2cbb122f93b63d2b346a5763b8d79a" + integrity sha512-WKTuTL7o6WKdPQ+gmZhlXL7UpSdCdPUjxkDTBd/3AayBdAFSQGHxsqdbmPBvmoGwvo9KWo/30HTkNo/Z7ORJpw== dependencies: - "@babel/runtime" "^7.0.0" - gl-matrix "^3.0.0" - -vlq@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" - integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== + "@math.gl/web-mercator" "^3.1.3" vm-browserify@0.0.4: version "0.0.4" @@ -5645,7 +5375,7 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" -vt-pbf@^3.0.1: +vt-pbf@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.1.tgz#b0f627e39a10ce91d943b898ed2363d21899fb82" integrity sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA== @@ -5816,11 +5546,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - worker-farm@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" diff --git a/modules/edit-modes/src/index.js b/modules/edit-modes/src/index.js index cce33aefc..0eac6a768 100644 --- a/modules/edit-modes/src/index.js +++ b/modules/edit-modes/src/index.js @@ -39,6 +39,8 @@ export type { PointerMoveEvent, StartDraggingEvent, StopDraggingEvent, + DraggingEvent, + DoubleClickEvent, ModeProps, Viewport } from './types.js'; diff --git a/modules/edit-modes/src/lib/composite-mode.js b/modules/edit-modes/src/lib/composite-mode.js index dfe163786..c1f173827 100644 --- a/modules/edit-modes/src/lib/composite-mode.js +++ b/modules/edit-modes/src/lib/composite-mode.js @@ -7,6 +7,7 @@ import type { PointerMoveEvent, StartDraggingEvent, StopDraggingEvent, + DraggingEvent, GuideFeatureCollection } from '../types.js'; import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; @@ -48,6 +49,10 @@ export class CompositeMode extends BaseGeoJsonEditMode { return this._coalesce(handler => handler.handleStopDragging(event, props)); } + handleDragging(event: DraggingEvent, props: ModeProps): void { + return this._coalesce(handler => handler.handleDragging(event, props)); + } + getGuides(props: ModeProps): GuideFeatureCollection { // TODO: Combine the guides *BUT* make sure if none of the results have // changed to return the same object so that "guides !== this.state.guides" diff --git a/modules/edit-modes/src/lib/draw-90degree-polygon-mode.js b/modules/edit-modes/src/lib/draw-90degree-polygon-mode.js index 7fc896ad6..d46c733d9 100644 --- a/modules/edit-modes/src/lib/draw-90degree-polygon-mode.js +++ b/modules/edit-modes/src/lib/draw-90degree-polygon-mode.js @@ -132,10 +132,10 @@ export class Draw90DegreePolygonMode extends BaseGeoJsonEditMode { screenCoords: [-1, -1], mapCoords: event.mapCoords, picks: [], - isDragging: false, pointerDownPicks: null, pointerDownScreenCoords: null, pointerDownMapCoords: null, + cancelPan: () => {}, sourceEvent: null }; this.handlePointerMove(fakePointerMoveEvent, props); diff --git a/modules/edit-modes/src/lib/draw-polygon-mode.js b/modules/edit-modes/src/lib/draw-polygon-mode.js index 6a072ab3e..aaad8faa4 100644 --- a/modules/edit-modes/src/lib/draw-polygon-mode.js +++ b/modules/edit-modes/src/lib/draw-polygon-mode.js @@ -102,10 +102,10 @@ export class DrawPolygonMode extends BaseGeoJsonEditMode { screenCoords: [-1, -1], mapCoords: event.mapCoords, picks: [], - isDragging: false, pointerDownPicks: null, pointerDownScreenCoords: null, pointerDownMapCoords: null, + cancelPan: () => {}, sourceEvent: null }; diff --git a/modules/edit-modes/src/lib/edit-mode.js b/modules/edit-modes/src/lib/edit-mode.js index f295b8966..2dc4a407a 100644 --- a/modules/edit-modes/src/lib/edit-mode.js +++ b/modules/edit-modes/src/lib/edit-mode.js @@ -6,6 +6,7 @@ import type { PointerMoveEvent, StartDraggingEvent, StopDraggingEvent, + DraggingEvent, Tooltip, ModeProps } from '../types.js'; @@ -23,6 +24,9 @@ export interface EditMode { // Called when the pointer went down on something rendered by this layer, the pointer moved, and now the pointer is up handleStopDragging(event: StopDraggingEvent, props: ModeProps): void; + // Called when the pointer went down and is moving, regardless of whether something was picked + handleDragging(event: DraggingEvent, props: ModeProps): void; + // Return features that can be used as a guide for editing the data getGuides(props: ModeProps): TGuides; diff --git a/modules/edit-modes/src/lib/extrude-mode.js b/modules/edit-modes/src/lib/extrude-mode.js index 04ce264ad..5d6cbc293 100644 --- a/modules/edit-modes/src/lib/extrude-mode.js +++ b/modules/edit-modes/src/lib/extrude-mode.js @@ -7,13 +7,7 @@ import { getPickedIntermediateEditHandle } from '../utils.js'; import type { FeatureCollection } from '../geojson-types.js'; -import type { - ModeProps, - PointerMoveEvent, - StartDraggingEvent, - StopDraggingEvent -} from '../types.js'; -import { type GeoJsonEditAction } from './geojson-edit-mode.js'; +import type { ModeProps, StartDraggingEvent, StopDraggingEvent, DraggingEvent } from '../types.js'; import { ModifyMode } from './modify-mode.js'; import { ImmutableFeatureCollection } from './immutable-feature-collection.js'; @@ -21,12 +15,11 @@ export class ExtrudeMode extends ModifyMode { // this mode is busted =( isPointAdded: boolean = false; - handlePointerMove(event: PointerMoveEvent, props: ModeProps): void { - let editAction: ?GeoJsonEditAction = null; + handleDragging(event: DraggingEvent, props: ModeProps): void { const editHandle = getPickedEditHandle(event.pointerDownPicks); - if (event.isDragging && editHandle) { + if (editHandle) { const { featureIndex } = editHandle.properties; let { positionIndexes } = editHandle.properties; @@ -50,7 +43,7 @@ export class ExtrudeMode extends ModifyMode { .replacePosition(featureIndex, positionIndexes, p3) .getObject(); - editAction = { + props.onEdit({ updatedData, editType: 'extruding', editContext: { @@ -58,20 +51,11 @@ export class ExtrudeMode extends ModifyMode { positionIndexes: this.nextPositionIndexes(positionIndexes, size), position: p3 } - }; + }); - props.onEdit(editAction); + event.cancelPan(); } } - - const cursor = this.getCursor(event); - props.onUpdateCursor(cursor); - - // Cancel map panning if pointer went down on an edit handle - const cancelMapPan = Boolean(editHandle); - if (cancelMapPan) { - event.sourceEvent.stopPropagation(); - } } handleStartDragging(event: StartDraggingEvent, props: ModeProps) { diff --git a/modules/edit-modes/src/lib/geojson-edit-mode.js b/modules/edit-modes/src/lib/geojson-edit-mode.js index 101c97a3c..adfdaff80 100644 --- a/modules/edit-modes/src/lib/geojson-edit-mode.js +++ b/modules/edit-modes/src/lib/geojson-edit-mode.js @@ -10,6 +10,7 @@ import type { PointerMoveEvent, StartDraggingEvent, StopDraggingEvent, + DraggingEvent, Pick, Tooltip, ModeProps, @@ -207,12 +208,10 @@ export class BaseGeoJsonEditMode implements EditMode): void {} - handlePointerMove(event: PointerMoveEvent, props: ModeProps): void {} - handleStartDragging(event: StartDraggingEvent, props: ModeProps): void {} - handleStopDragging(event: StopDraggingEvent, props: ModeProps): void {} + handleDragging(event: DraggingEvent, props: ModeProps): void {} } export function getIntermediatePosition(position1: Position, position2: Position): Position { diff --git a/modules/edit-modes/src/lib/modify-mode.js b/modules/edit-modes/src/lib/modify-mode.js index 081b5eb23..8526a6f9c 100644 --- a/modules/edit-modes/src/lib/modify-mode.js +++ b/modules/edit-modes/src/lib/modify-mode.js @@ -19,10 +19,11 @@ import type { PointerMoveEvent, StartDraggingEvent, StopDraggingEvent, + DraggingEvent, Viewport, GuideFeatureCollection } from '../types.js'; -import { BaseGeoJsonEditMode, type GeoJsonEditAction } from './geojson-edit-mode.js'; +import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; import { ImmutableFeatureCollection } from './immutable-feature-collection.js'; export class ModifyMode extends BaseGeoJsonEditMode { @@ -176,12 +177,13 @@ export class ModifyMode extends BaseGeoJsonEditMode { } } - handlePointerMove(event: PointerMoveEvent, props: ModeProps): void { - let editAction: ?GeoJsonEditAction = null; - + handleDragging(event: DraggingEvent, props: ModeProps): void { const editHandle = getPickedEditHandle(event.pointerDownPicks); - if (event.isDragging && editHandle) { + if (editHandle) { + // Cancel map panning if pointer went down on an edit handle + event.cancelPan(); + const editHandleProperties = editHandle.properties; const updatedData = new ImmutableFeatureCollection(props.data) @@ -192,7 +194,7 @@ export class ModifyMode extends BaseGeoJsonEditMode { ) .getObject(); - editAction = { + props.onEdit({ updatedData, editType: 'movePosition', editContext: { @@ -200,19 +202,13 @@ export class ModifyMode extends BaseGeoJsonEditMode { positionIndexes: editHandleProperties.positionIndexes, position: event.mapCoords } - }; - - props.onEdit(editAction); + }); } + } + handlePointerMove(event: PointerMoveEvent, props: ModeProps): void { const cursor = this.getCursor(event); props.onUpdateCursor(cursor); - - // Cancel map panning if pointer went down on an edit handle - const cancelMapPan = Boolean(editHandle); - if (cancelMapPan) { - event.sourceEvent.stopPropagation(); - } } handleStartDragging(event: StartDraggingEvent, props: ModeProps) { diff --git a/modules/edit-modes/src/lib/rotate-mode.js b/modules/edit-modes/src/lib/rotate-mode.js index f6066f9b5..0914cb0b2 100644 --- a/modules/edit-modes/src/lib/rotate-mode.js +++ b/modules/edit-modes/src/lib/rotate-mode.js @@ -7,6 +7,7 @@ import type { PointerMoveEvent, StartDraggingEvent, StopDraggingEvent, + DraggingEvent, ModeProps } from '../types.js'; import type { FeatureCollection, Position } from '../geojson-types.js'; @@ -17,27 +18,27 @@ export class RotateMode extends BaseGeoJsonEditMode { _isRotatable: boolean; _geometryBeingRotated: ?FeatureCollection; - handlePointerMove(event: PointerMoveEvent, props: ModeProps) { - this._isRotatable = - Boolean(this._geometryBeingRotated) || this.isSelectionPicked(event.picks, props); - - this.updateCursor(props); - - if (!this._isRotatable || !event.pointerDownMapCoords) { + handleDragging(event: DraggingEvent, props: ModeProps) { + if (!this._isRotatable) { // Nothing to do return; } - if (event.isDragging && this._geometryBeingRotated) { + if (this._geometryBeingRotated) { // Rotate the geometry props.onEdit( this.getRotateAction(event.pointerDownMapCoords, event.mapCoords, 'rotating', props) ); } - // TODO: is there a less hacky way to prevent map panning? // cancel map panning - event.sourceEvent.stopPropagation(); + event.cancelPan(); + } + + handlePointerMove(event: PointerMoveEvent, props: ModeProps) { + this._isRotatable = this.isSelectionPicked(event.pointerDownPicks || event.picks, props); + + this.updateCursor(props); } handleStartDragging(event: StartDraggingEvent, props: ModeProps) { diff --git a/modules/edit-modes/src/lib/scale-mode.js b/modules/edit-modes/src/lib/scale-mode.js index 7d4374d21..e59aa6c68 100644 --- a/modules/edit-modes/src/lib/scale-mode.js +++ b/modules/edit-modes/src/lib/scale-mode.js @@ -8,7 +8,8 @@ import type { ModeProps, PointerMoveEvent, StartDraggingEvent, - StopDraggingEvent + StopDraggingEvent, + DraggingEvent } from '../types.js'; import { BaseGeoJsonEditMode, type GeoJsonEditAction } from './geojson-edit-mode.js'; import { ImmutableFeatureCollection } from './immutable-feature-collection.js'; @@ -17,27 +18,26 @@ export class ScaleMode extends BaseGeoJsonEditMode { _isScalable: boolean; _geometryBeingScaled: ?FeatureCollection; - handlePointerMove(event: PointerMoveEvent, props: ModeProps) { - this._isScalable = - Boolean(this._geometryBeingScaled) || this.isSelectionPicked(event.picks, props); - - this.updateCursor(props); - - if (!this._isScalable || !event.pointerDownMapCoords) { + handleDragging(event: DraggingEvent, props: ModeProps) { + if (!this._isScalable) { // Nothing to do return; } - if (event.isDragging && this._geometryBeingScaled) { + if (this._geometryBeingScaled) { // Scale the geometry props.onEdit( this.getScaleAction(event.pointerDownMapCoords, event.mapCoords, 'scaling', props) ); } - // TODO: is there a less hacky way to prevent map panning? - // cancel map panning - event.sourceEvent.stopPropagation(); + event.cancelPan(); + } + + handlePointerMove(event: PointerMoveEvent, props: ModeProps) { + this._isScalable = this.isSelectionPicked(event.pointerDownPicks || event.picks, props); + + this.updateCursor(props); } handleStartDragging(event: StartDraggingEvent, props: ModeProps) { diff --git a/modules/edit-modes/src/lib/snappable-mode.js b/modules/edit-modes/src/lib/snappable-mode.js index ffa0699d7..ad3277037 100644 --- a/modules/edit-modes/src/lib/snappable-mode.js +++ b/modules/edit-modes/src/lib/snappable-mode.js @@ -5,6 +5,7 @@ import type { PointerMoveEvent, StartDraggingEvent, StopDraggingEvent, + DraggingEvent, ModeProps, Pick, GuideFeatureCollection, @@ -13,7 +14,7 @@ import type { import { getPickedEditHandle, getPickedEditHandles, getEditHandlesForGeometry } from '../utils.js'; import { BaseGeoJsonEditMode } from './geojson-edit-mode.js'; -type MovementTypeEvent = PointerMoveEvent | StartDraggingEvent | StopDraggingEvent; +type MovementTypeEvent = PointerMoveEvent | StartDraggingEvent | StopDraggingEvent | DraggingEvent; export class SnappableMode extends BaseGeoJsonEditMode { _handler: BaseGeoJsonEditMode; @@ -153,6 +154,10 @@ export class SnappableMode extends BaseGeoJsonEditMode { this._handler.handleStopDragging(this._getSnapAwareEvent(event, props), props); } + handleDragging(event: DraggingEvent, props: ModeProps) { + this._handler.handleDragging(this._getSnapAwareEvent(event, props), props); + } + handlePointerMove(event: PointerMoveEvent, props: ModeProps) { this._handler.handlePointerMove(this._getSnapAwareEvent(event, props), props); } diff --git a/modules/edit-modes/src/lib/translate-mode.js b/modules/edit-modes/src/lib/translate-mode.js index 1f9c9ad2d..421a4436c 100644 --- a/modules/edit-modes/src/lib/translate-mode.js +++ b/modules/edit-modes/src/lib/translate-mode.js @@ -9,6 +9,7 @@ import type { PointerMoveEvent, StartDraggingEvent, StopDraggingEvent, + DraggingEvent, ModeProps } from '../types.js'; import { BaseGeoJsonEditMode, type GeoJsonEditAction } from './geojson-edit-mode.js'; @@ -18,18 +19,13 @@ export class TranslateMode extends BaseGeoJsonEditMode { _geometryBeforeTranslate: ?FeatureCollection; _isTranslatable: boolean; - handlePointerMove(event: PointerMoveEvent, props: ModeProps) { - this._isTranslatable = - Boolean(this._geometryBeforeTranslate) || this.isSelectionPicked(event.picks, props); - - this.updateCursor(props); - - if (!this._isTranslatable || !event.pointerDownMapCoords) { + handleDragging(event: DraggingEvent, props: ModeProps) { + if (!this._isTranslatable) { // Nothing to do return; } - if (event.isDragging && this._geometryBeforeTranslate) { + if (this._geometryBeforeTranslate) { // Translate the geometry const editAction = this.getTranslateAction( event.pointerDownMapCoords, @@ -43,9 +39,14 @@ export class TranslateMode extends BaseGeoJsonEditMode { } } - // TODO: is there a less hacky way to prevent map panning? // cancel map panning - event.sourceEvent.stopPropagation(); + event.cancelPan(); + } + + handlePointerMove(event: PointerMoveEvent, props: ModeProps) { + this._isTranslatable = this.isSelectionPicked(event.pointerDownPicks || event.picks, props); + + this.updateCursor(props); } handleStartDragging(event: StartDraggingEvent, props: ModeProps) { diff --git a/modules/edit-modes/src/types.js b/modules/edit-modes/src/types.js index a804a4a1b..d96cbbe11 100644 --- a/modules/edit-modes/src/types.js +++ b/modules/edit-modes/src/types.js @@ -51,7 +51,8 @@ export type StartDraggingEvent = { ...BasePointerEvent, pointerDownPicks?: ?(Pick[]), pointerDownScreenCoords: ScreenCoordinates, - pointerDownMapCoords: Position + pointerDownMapCoords: Position, + cancelPan: () => void }; // Represents an event that occurs after the pointer goes down, moves some, then the pointer goes back up @@ -62,10 +63,18 @@ export type StopDraggingEvent = { pointerDownMapCoords: Position }; +// Represents an event that occurs after the pointer goes down and is moving +export type DraggingEvent = { + ...BasePointerEvent, + pointerDownPicks?: ?(Pick[]), + pointerDownScreenCoords: ScreenCoordinates, + pointerDownMapCoords: Position, + cancelPan: () => void +}; + // Represents an event that occurs every time the pointer moves export type PointerMoveEvent = { ...BasePointerEvent, - isDragging: boolean, pointerDownPicks?: ?(Pick[]), pointerDownScreenCoords?: ?ScreenCoordinates, pointerDownMapCoords?: ?Position diff --git a/modules/edit-modes/test/lib/modify-mode.test.js b/modules/edit-modes/test/lib/modify-mode.test.js index d51cd5428..7ca74d48e 100644 --- a/modules/edit-modes/test/lib/modify-mode.test.js +++ b/modules/edit-modes/test/lib/modify-mode.test.js @@ -224,7 +224,7 @@ describe('getGuides()', () => { picks: [pick], mapCoords, screenCoords: [42, 42], - isDragging: false, + cancelPan: jest.fn(), sourceEvent: null } }); @@ -280,7 +280,7 @@ describe('getGuides()', () => { ], mapCoords, screenCoords: [42, 42], - isDragging: false, + cancelPan: jest.fn(), sourceEvent: null } }); @@ -330,7 +330,7 @@ describe('getGuides()', () => { ], mapCoords, screenCoords: [42, 42], - isDragging: false, + cancelPan: jest.fn(), sourceEvent: null } }); diff --git a/modules/edit-modes/test/test-utils.js b/modules/edit-modes/test/test-utils.js index 4455d0aa1..21233cff3 100644 --- a/modules/edit-modes/test/test-utils.js +++ b/modules/edit-modes/test/test-utils.js @@ -267,7 +267,6 @@ export function createPointerDragEvent( screenCoords: [-1, -1], mapCoords, picks, - isDragging: true, pointerDownPicks: null, pointerDownScreenCoords: [-1, -1], pointerDownMapCoords, @@ -280,10 +279,10 @@ export function createPointerMoveEvent(mapCoords: Position, picks: Pick[] = []): screenCoords: [-1, -1], mapCoords, picks, - isDragging: false, pointerDownPicks: null, pointerDownScreenCoords: null, pointerDownMapCoords: null, + cancelPan: jest.fn(), sourceEvent: null }; } diff --git a/modules/layers/src/layers/editable-geojson-layer.js b/modules/layers/src/layers/editable-geojson-layer.js index 70ba03892..7a642b36e 100644 --- a/modules/layers/src/layers/editable-geojson-layer.js +++ b/modules/layers/src/layers/editable-geojson-layer.js @@ -31,6 +31,7 @@ import type { ClickEvent, StartDraggingEvent, StopDraggingEvent, + DraggingEvent, PointerMoveEvent, GeoJsonEditMode, FeatureCollection @@ -442,6 +443,10 @@ export default class EditableGeoJsonLayer extends EditableLayer { this.getActiveMode().handleStartDragging(event, this.getModeProps(this.props)); } + onDragging(event: DraggingEvent) { + this.getActiveMode().handleDragging(event, this.getModeProps(this.props)); + } + onStopDragging(event: StopDraggingEvent) { this.getActiveMode().handleStopDragging(event, this.getModeProps(this.props)); } @@ -454,6 +459,7 @@ export default class EditableGeoJsonLayer extends EditableLayer { getCursor({ isDragging }: { isDragging: boolean }) { let { cursor } = this.state; if (!cursor) { + // default cursor cursor = isDragging ? 'grabbing' : 'grab'; } return cursor; diff --git a/modules/layers/src/layers/editable-layer.js b/modules/layers/src/layers/editable-layer.js index 28f2b738d..6a64916c8 100644 --- a/modules/layers/src/layers/editable-layer.js +++ b/modules/layers/src/layers/editable-layer.js @@ -6,12 +6,12 @@ import type { ClickEvent, StartDraggingEvent, StopDraggingEvent, + DraggingEvent, PointerMoveEvent, DoubleClickEvent -} from '@nebula.gl/edit-modes'; +} from '../../../edit-modes/src/index.js'; -// Minimum number of pixels the pointer must move from the original pointer down to be considered dragging -const MINIMUM_POINTER_MOVE_THRESHOLD_PIXELS = 7; +const EVENT_TYPES = ['anyclick', 'pointermove', 'panstart', 'panmove', 'panend', 'dblclick']; export default class EditableLayer extends CompositeLayer { // Overridable interaction event handlers @@ -31,6 +31,10 @@ export default class EditableLayer extends CompositeLayer { // default implementation - do nothing } + onDragging(event: DraggingEvent) { + // default implementation - do nothing + } + onPointerMove(event: PointerMoveEvent) { // default implementation - do nothing } @@ -40,118 +44,118 @@ export default class EditableLayer extends CompositeLayer { initializeState() { this.setState({ _editableLayerState: { - // Pointer event handlers - pointerHandlers: null, // Picked objects at the time the pointer went down pointerDownPicks: null, // Screen coordinates where the pointer went down pointerDownScreenCoords: null, // Ground coordinates where the pointer went down pointerDownMapCoords: null, - // Is the pointer dragging (pointer down + moved at least MINIMUM_POINTER_MOVE_THRESHOLD_PIXELS) - isDragging: false + + // Keep track of the mjolnir.js event handler so it can be deregistered + eventHandler: this._forwardEventToCurrentLayer.bind(this) } }); + + this._addPointerHandlers(); } finalizeState() { this._removePointerHandlers(); } - updateState({ props, changeFlags }: Object) { - // unsubscribe previous layer instance's handlers - this._removePointerHandlers(); - this._addPointerHandlers(); + _addPointerHandlers() { + const { eventManager } = this.context.deck; + const { eventHandler } = this.state._editableLayerState; + + for (const eventType of EVENT_TYPES) { + eventManager.on(eventType, eventHandler, { + // give nebula a higher priority so that it can stop propagation to deck.gl's map panning handlers + priority: 100 + }); + } } _removePointerHandlers() { - // https://github.com/uber/deck.gl/pull/4013 - const element = this.context.deck.props.parent || this.context.gl.canvas; - - if (this.state._editableLayerState.pointerHandlers) { - element.removeEventListener( - 'pointermove', - this.state._editableLayerState.pointerHandlers.onPointerMove - ); - element.removeEventListener( - 'pointerdown', - this.state._editableLayerState.pointerHandlers.onPointerDown - ); - element.removeEventListener( - 'pointerup', - this.state._editableLayerState.pointerHandlers.onPointerUp - ); - element.removeEventListener( - 'dblclick', - this.state._editableLayerState.pointerHandlers.onDoubleClick - ); + const { eventManager } = this.context.deck; + const { eventHandler } = this.state._editableLayerState; + + for (const eventType of EVENT_TYPES) { + eventManager.off(eventType, eventHandler); } - this.state._editableLayerState.pointerHandlers = null; } - _addPointerHandlers() { - // https://github.com/uber/deck.gl/pull/4013 - const element = this.context.deck.props.parent || this.context.gl.canvas; - - this.state._editableLayerState.pointerHandlers = { - onPointerMove: this._onPointerMove.bind(this), - onPointerDown: this._onPointerDown.bind(this), - onPointerUp: this._onPointerUp.bind(this), - onDoubleClick: this._onDoubleClick.bind(this) - }; - - element.addEventListener( - 'pointermove', - this.state._editableLayerState.pointerHandlers.onPointerMove - ); - element.addEventListener( - 'pointerdown', - this.state._editableLayerState.pointerHandlers.onPointerDown - ); - element.addEventListener( - 'pointerup', - this.state._editableLayerState.pointerHandlers.onPointerUp - ); - element.addEventListener( - 'dblclick', - this.state._editableLayerState.pointerHandlers.onDoubleClick - ); + // A new layer instance is created on every render, so forward the event to the current layer + // This means that the first layer instance will stick around to be the event listener, but will forward the event + // to the latest layer instance. + _forwardEventToCurrentLayer(event: any) { + const currentLayer = this.getCurrentLayer(); + + // Use a naming convention to find the event handling function for this event type + const func = currentLayer[`_on${event.type}`].bind(currentLayer); + if (!func) { + console.warn(`no handler for mjolnir event ${event.type}`); // eslint-disable-line + return; + } + func(event); } - _onDoubleClick(event: any) { - const screenCoords = this.getScreenCoords(event); + _onanyclick({ srcEvent }: any) { + const screenCoords = this.getScreenCoords(srcEvent); const mapCoords = this.getMapCoords(screenCoords); - this.onDoubleClick({ + + const picks = this.getPicks(screenCoords); + + this.onLayerClick({ mapCoords, - sourceEvent: event + screenCoords, + picks, + sourceEvent: srcEvent }); } - _onPointerDown(event: any) { - const screenCoords = this.getScreenCoords(event); + _ondblclick({ srcEvent }: any) { + const screenCoords = this.getScreenCoords(srcEvent); const mapCoords = this.getMapCoords(screenCoords); - const picks = this.context.deck.pickMultipleObjects({ - x: screenCoords[0], - y: screenCoords[1], - layerIds: [this.props.id], - radius: this.props.pickingRadius, - depth: this.props.pickingDepth + const picks = this.getPicks(screenCoords); + + this.onDoubleClick({ + mapCoords, + screenCoords, + picks, + sourceEvent: srcEvent }); + } + + _onpanstart(event: any) { + const screenCoords = this.getScreenCoords(event.srcEvent); + const mapCoords = this.getMapCoords(screenCoords); + + const picks = this.getPicks(screenCoords); this.setState({ _editableLayerState: { ...this.state._editableLayerState, pointerDownScreenCoords: screenCoords, pointerDownMapCoords: mapCoords, - pointerDownPicks: picks, - isDragging: false + pointerDownPicks: picks } }); + + this.onStartDragging({ + picks, + screenCoords, + mapCoords, + pointerDownScreenCoords: screenCoords, + pointerDownMapCoords: mapCoords, + cancelPan: event.stopImmediatePropagation, + sourceEvent: event.srcEvent + }); } - _onPointerMove(event: any) { - const screenCoords = this.getScreenCoords(event); + _onpanmove(event: any) { + const { srcEvent } = event; + const screenCoords = this.getScreenCoords(srcEvent); const mapCoords = this.getMapCoords(screenCoords); const { @@ -160,114 +164,91 @@ export default class EditableLayer extends CompositeLayer { pointerDownMapCoords } = this.state._editableLayerState; - let { isDragging } = this.state._editableLayerState; - let startedDragging = false; - - if (pointerDownScreenCoords) { - // Pointer went down and is moving - - // Did it move enough to consider it a drag - if (!isDragging && this.movedEnoughForDrag(pointerDownScreenCoords, screenCoords)) { - // OK, this is considered dragging - - // Fire the start dragging event - this.onStartDragging({ - picks: pointerDownPicks, - screenCoords, - mapCoords, - pointerDownScreenCoords, - pointerDownMapCoords, - sourceEvent: event - }); - - startedDragging = true; - - isDragging = true; - this.setState({ - _editableLayerState: { - ...this.state._editableLayerState, - isDragging - } - }); - } - } - - if (!startedDragging) { - const picks = this.context.deck.pickMultipleObjects({ - x: screenCoords[0], - y: screenCoords[1], - layerIds: [this.props.id], - radius: this.props.pickingRadius, - depth: this.props.pickingDepth - }); + const picks = this.getPicks(screenCoords); - this.onPointerMove({ - screenCoords, - mapCoords, - picks, - isDragging, - pointerDownPicks, - pointerDownScreenCoords, - pointerDownMapCoords, - sourceEvent: event - }); - } + this.onDragging({ + screenCoords, + mapCoords, + picks, + pointerDownPicks, + pointerDownScreenCoords, + pointerDownMapCoords, + sourceEvent: srcEvent, + cancelPan: event.stopImmediatePropagation + // another (hacky) approach for cancelling map panning + // const controller = this.context.deck.viewManager.controllers[ + // Object.keys(this.context.deck.viewManager.controllers)[0] + // ]; + // controller._state.isDragging = false; + }); } - _onPointerUp(event: any) { - const screenCoords = this.getScreenCoords(event); + _onpanend({ srcEvent }: any) { + const screenCoords = this.getScreenCoords(srcEvent); const mapCoords = this.getMapCoords(screenCoords); const { pointerDownPicks, pointerDownScreenCoords, - pointerDownMapCoords, - isDragging + pointerDownMapCoords } = this.state._editableLayerState; - if (!pointerDownScreenCoords) { - // This is a pointer up without a pointer down (e.g. user pointer downed elsewhere), so ignore - return; - } + const picks = this.getPicks(screenCoords); - if (isDragging) { - const picks = this.context.deck.pickMultipleObjects({ - x: screenCoords[0], - y: screenCoords[1], - layerIds: [this.props.id], - radius: this.props.pickingRadius, - depth: this.props.pickingDepth - }); - - this.onStopDragging({ - picks, - screenCoords, - mapCoords, - pointerDownPicks, - pointerDownScreenCoords, - pointerDownMapCoords, - sourceEvent: event - }); - } else if (!this.movedEnoughForDrag(pointerDownScreenCoords, screenCoords)) { - this.onLayerClick({ - picks: pointerDownPicks, - screenCoords, - mapCoords, - sourceEvent: event - }); - } + this.onStopDragging({ + picks, + screenCoords, + mapCoords, + pointerDownPicks, + pointerDownScreenCoords, + pointerDownMapCoords, + sourceEvent: srcEvent + }); this.setState({ _editableLayerState: { ...this.state._editableLayerState, pointerDownScreenCoords: null, pointerDownMapCoords: null, - pointerDownPicks: null, - isDragging: false + pointerDownPicks: null } }); } + _onpointermove(event: any) { + const { srcEvent } = event; + const screenCoords = this.getScreenCoords(srcEvent); + const mapCoords = this.getMapCoords(screenCoords); + + const { + pointerDownPicks, + pointerDownScreenCoords, + pointerDownMapCoords + } = this.state._editableLayerState; + + const picks = this.getPicks(screenCoords); + + this.onPointerMove({ + screenCoords, + mapCoords, + picks, + pointerDownPicks, + pointerDownScreenCoords, + pointerDownMapCoords, + sourceEvent: srcEvent + }); + } + + getPicks(screenCoords: [number, number]) { + return this.context.deck.pickMultipleObjects({ + x: screenCoords[0], + y: screenCoords[1], + layerIds: [this.props.id], + radius: this.props.pickingRadius, + depth: this.props.pickingDepth + }); + } + getScreenCoords(pointerEvent: any) { return [ pointerEvent.clientX - this.context.gl.canvas.getBoundingClientRect().x, @@ -278,13 +259,6 @@ export default class EditableLayer extends CompositeLayer { getMapCoords(screenCoords: number[]) { return this.context.viewport.unproject([screenCoords[0], screenCoords[1]]); } - - movedEnoughForDrag(screenCoords1: number[], screenCoords2: number[]) { - return ( - Math.abs(screenCoords1[0] - screenCoords2[0]) > MINIMUM_POINTER_MOVE_THRESHOLD_PIXELS || - Math.abs(screenCoords1[1] - screenCoords2[1]) > MINIMUM_POINTER_MOVE_THRESHOLD_PIXELS - ); - } } EditableLayer.layerName = 'EditableLayer'; diff --git a/modules/react-map-gl-draw/package.json b/modules/react-map-gl-draw/package.json index 54be987e2..d655e91b9 100644 --- a/modules/react-map-gl-draw/package.json +++ b/modules/react-map-gl-draw/package.json @@ -41,7 +41,7 @@ "viewport-mercator-project": "^6.1.0" }, "devDependencies": { - "react-map-gl": "^5.0.2" + "react-map-gl": "^5.2.1" }, "peerDependencies": { "react": "^16.x", diff --git a/package.json b/package.json index 525e6d116..df6a596d5 100644 --- a/package.json +++ b/package.json @@ -50,10 +50,10 @@ "@babel/preset-flow": "^7.0.0", "@babel/preset-react": "^7.0.0", "@babel/register": "^7.0.0", - "@deck.gl/core": "^8.0.5", - "@deck.gl/layers": "^8.0.5", - "@deck.gl/mesh-layers": "^8.0.5", - "@deck.gl/react": "^8.0.5", + "@deck.gl/core": "^8.0.6", + "@deck.gl/layers": "^8.0.6", + "@deck.gl/mesh-layers": "^8.0.6", + "@deck.gl/react": "^8.0.6", "babel-core": "^7.0.0-bridge.0", "babel-eslint": "^9.0.0", "babel-jest": "^24.8.0", diff --git a/yarn.lock b/yarn.lock index aa22f8d26..93782a22f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -683,13 +683,13 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@deck.gl/core@^8.0.5": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@deck.gl/core/-/core-8.0.5.tgz#3c191c994172d253879a64417ba037d570bc8071" - integrity sha512-xAQhNPhR9FuQZx0zK1DEJ+pK6LH97OcABhwniCyU4tzReRW8KqnJILMrmrcrooY4lLw5KaPhZXnzUrILMrEmow== +"@deck.gl/core@^8.0.6": + version "8.0.6" + resolved "https://registry.yarnpkg.com/@deck.gl/core/-/core-8.0.6.tgz#5bdee9323e69cf4ffc6dddeb8ab9cb10f552b7fe" + integrity sha512-wiGVBSnsP8lcbNPAqqnEYslvIcHMBP3++rvYtGzwyweYnfQobcI7i54fpRLJtYTjBhIdL15VxOCiVwFWJ/Dp+w== dependencies: - "@loaders.gl/core" "^2.0.0" - "@loaders.gl/images" "^2.0.0" + "@loaders.gl/core" "^2.0.2" + "@loaders.gl/images" "^2.0.2" "@luma.gl/core" "^8.0.1" "@math.gl/web-mercator" "^3.1.3" gl-matrix "^3.0.0" @@ -697,26 +697,27 @@ mjolnir.js "^2.1.2" probe.gl "^3.2.0" -"@deck.gl/layers@^8.0.5": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@deck.gl/layers/-/layers-8.0.5.tgz#d49f4379536c3fa4974b4083a5b01d840844c883" - integrity sha512-uUY7OH8wD4Y29YbXrOuhPK+bdUDEACMrTcv1ECPsdsexwJeT0sqnXcMxllspMAA4fDF0fffZHL8Q+ll135Otug== +"@deck.gl/layers@^8.0.6": + version "8.0.6" + resolved "https://registry.yarnpkg.com/@deck.gl/layers/-/layers-8.0.6.tgz#1bee0e7ad9a2a0ce42cfab6f6d1c953a2fe2a16b" + integrity sha512-OHGMf5DF8ibqEraEUxBgUt7fcMqPtarzq9ciPZtWG4JjxbzqqAfDwuPYzgBdapL+978lpqKHmXpd/sEQfE2Lfw== dependencies: - "@loaders.gl/images" "^2.0.0" + "@loaders.gl/core" "^2.0.2" + "@loaders.gl/images" "^2.0.2" "@mapbox/tiny-sdf" "^1.1.0" earcut "^2.0.6" -"@deck.gl/mesh-layers@^8.0.5": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@deck.gl/mesh-layers/-/mesh-layers-8.0.5.tgz#d491f919fd2cc5ca07bda7eaf51e0e45b787132d" - integrity sha512-nJ//ilPVDxQ2d71TWEDOQZQJWWjxqnnW+yrDCnPhdF8x+hyhLFwsSQIWRGkYX/bolX7MeDOK2bcj6BjmZTA5Bg== +"@deck.gl/mesh-layers@^8.0.6": + version "8.0.6" + resolved "https://registry.yarnpkg.com/@deck.gl/mesh-layers/-/mesh-layers-8.0.6.tgz#e72d098ef83aba134a654919f1a79dd81becaf67" + integrity sha512-Kw7Mvuv+b9CdiVPRj3l3q6npqZ4LcTf3UdeTd7wow2kxK8RCGeNy593OmuSgBXECOwL1LvOCD+uBvV4lZdm0Ew== dependencies: "@luma.gl/experimental" "^8.0.1" -"@deck.gl/react@^8.0.5": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@deck.gl/react/-/react-8.0.5.tgz#92065a1bed892ef2dbcdb0346f71f89d0345879b" - integrity sha512-aKczC7iyXual11Q+Ocn4zH+EDKS8V0gTvz2iZqb2YwNeJfKNl6Ldydh3GD5lDugQzhyKYRmTwgVh81bSC0IGmg== +"@deck.gl/react@^8.0.6": + version "8.0.6" + resolved "https://registry.yarnpkg.com/@deck.gl/react/-/react-8.0.6.tgz#2fcd8e0e43fcc0aabdff73a37fbf8d3f1fbc036e" + integrity sha512-7d5K7WZ0Sbnui184WFGNPZpIEFJXyamYzp1HLDePEJzkaD0LRL8ug4wmxEt21a7GnWBqNrZT83GHX+j8d8vS2A== dependencies: prop-types "^15.6.0" @@ -1460,23 +1461,23 @@ libnpm "^2.0.1" write-file-atomic "^2.3.0" -"@loaders.gl/core@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@loaders.gl/core/-/core-2.0.0.tgz#ab84b94efb8ad3a90133389e5b76f6a721b20419" - integrity sha512-tcKTfDy3H7jsP61pEWG22rjnSjz4JzXlBzJuMt86Z76ASM1ZY5glfnNneA/x6Yqcl+8U0003B2PtRIFtQgo9og== +"@loaders.gl/core@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@loaders.gl/core/-/core-2.0.2.tgz#1ca39ce7168379bd24e39a2a443672b01bf764af" + integrity sha512-l2atBRmKln/0M6GEbtobS1fIIYzGfbN72Vloc3V4+p31gxDsWj35QLvHMAc4K8SOE0lk5gRDcZkJjYQo90JoUQ== dependencies: "@babel/runtime" "^7.3.1" - "@loaders.gl/loader-utils" "2.0.0" + "@loaders.gl/loader-utils" "2.0.2" -"@loaders.gl/images@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@loaders.gl/images/-/images-2.0.0.tgz#d3425ac855dfa54bd8119014bd548ea6f8a2ac5b" - integrity sha512-GUsN7hSpYGtVNf3EcWjh1QgzJXJrS73KkD7GgM/pGqMpFlmNOkWYjW0DV8yYHikRQG4awNMGKgnUUzmXtdgpzQ== +"@loaders.gl/images@^2.0.0", "@loaders.gl/images@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@loaders.gl/images/-/images-2.0.2.tgz#546929146b38a428e55905e513b4b9ec7afc58e2" + integrity sha512-H6xhSvM24CI++P46TZRLX+95mn5B4HaP0jWGSIn2Lo0aBpcI9/T8z2EZhJyihjoR450fph1ER0j+Mnz+ovHEGg== -"@loaders.gl/loader-utils@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@loaders.gl/loader-utils/-/loader-utils-2.0.0.tgz#8de22bd999fd09f5769fd70e23e7280c5a598506" - integrity sha512-dK3pjS56M+18CrgdycgTsF/YkanWSojO/1JHVBB+KorjqoMWXhtCAnTToQ60u+XA8k0AF3mBQUPL7Hd2OIsbmA== +"@loaders.gl/loader-utils@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@loaders.gl/loader-utils/-/loader-utils-2.0.2.tgz#9ee11de0ae9f8d8d7c763fb5d17b3eeb0b5a888d" + integrity sha512-sowdxj1wE2lSXSBSJswNjWfJvfdi21ZG9nB7OmenvbPiqcd1NyjUVsr+TeiTBiRsPlyQhp5BjVEYnywDLHSNUg== dependencies: "@babel/runtime" "^7.3.1" @@ -1748,14 +1749,15 @@ "@turf/invariant" "6.x" "@turf/difference@>=4.0.0": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@turf/difference/-/difference-6.0.2.tgz#dd20c0e2301ba6c22019e38a36eea3975205a77f" + version "6.0.1" + resolved "https://registry.yarnpkg.com/@turf/difference/-/difference-6.0.1.tgz#a5ee3433eddb7d707cac227adf0d43ab0d651682" + integrity sha512-lkhJjNfPeLARQm232A851vVhrUvX3gdvTft5QlqkUlr7AzLpiT8PW14yEkU9xABxRh6PGv7T1UUVAeRgC7JxuA== dependencies: "@turf/area" "6.x" "@turf/helpers" "6.x" "@turf/invariant" "6.x" "@turf/meta" "6.x" - martinez-polygon-clipping "^0.4.3" + martinez-polygon-clipping "*" "@turf/distance@6.x", "@turf/distance@>=4.0.0": version "6.0.1" @@ -6943,6 +6945,15 @@ mapbox-gl@^1.0.0: tinyqueue "^2.0.0" vt-pbf "^3.1.1" +martinez-polygon-clipping@*: + version "0.6.0" + resolved "https://registry.yarnpkg.com/martinez-polygon-clipping/-/martinez-polygon-clipping-0.6.0.tgz#a971bd61ae5db3653e4aab3ae3f0796d52c8ddf7" + integrity sha512-H8AVwCTFYDI2DPi8gS01YglTErLqfQ/Sojl93zcAVPTLYuiBtu5mtcXJQJbjQ5lEbGWootXG/9IinfX2LLt1Tw== + dependencies: + robust-predicates "^2.0.4" + splaytree "^0.1.4" + tinyqueue "^1.2.0" + martinez-polygon-clipping@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/martinez-polygon-clipping/-/martinez-polygon-clipping-0.4.3.tgz#a3971ddf1da147104b5d0fbbf68f728bb62885c1" @@ -7191,10 +7202,10 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mjolnir.js@^2.1.1, mjolnir.js@^2.1.2, mjolnir.js@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/mjolnir.js/-/mjolnir.js-2.2.1.tgz#84fc2352ff2ec58b061b0dab1a5ec67f3d2ad966" - integrity sha512-bUTP/NbwOfdrN4TKMjUcarfGmWU5yN6aHFR1ek7BNuFOwHk4PslUZjKzdOp1jwx2m0uCoRa5lG+x82l8Vii7Ng== +mjolnir.js@^2.1.2, mjolnir.js@^2.2.0, mjolnir.js@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/mjolnir.js/-/mjolnir.js-2.3.0.tgz#192e66fb21b9e81521ee3ac71676e2a3fa678dec" + integrity sha512-ungiyxsr+E/M6/76e/K3Ut98QbuEO3UhvC3ucHplDkOpA1x7TeAm01hpP3E8bDsYFrkPk4PCUVJEuirZWguxEA== dependencies: "@babel/runtime" "^7.0.0" hammerjs "^2.0.8" @@ -8394,17 +8405,17 @@ react-is@^16.4.1, react-is@^16.8.1, react-is@^16.8.4: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== -react-map-gl@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-5.0.2.tgz#43c5c3b7ad02019e44b37e5b87807a60a6a3c8b0" - integrity sha512-NUBBZgDZED0fEYWfKJILChCXCHyMVQq+cbxwLRqkLewJjpqRH1i8X1QI7anC9oDHZ9q3hHQG4/RJuj7iThJ6Kw== +react-map-gl@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-5.2.1.tgz#a56977987be8d844c9cec90a0668d6f9e928e930" + integrity sha512-8o8WhCIhOS90FfEEnXJDcylnq0qZPdsMaQVW0qBVY9GYbnRJQlCw6ZTusg0rgmCYmbXKWA1ApuKnA7PrpXRxlQ== dependencies: "@babel/runtime" "^7.0.0" mapbox-gl "^1.0.0" - mjolnir.js "^2.1.1" + mjolnir.js "^2.2.0" prop-types "^15.7.2" react-virtualized-auto-sizer "^1.0.2" - viewport-mercator-project "^6.1.0" + viewport-mercator-project "^6.2.3 || ^7.0.1" react-test-renderer@^16.4.1: version "16.4.1" @@ -8852,6 +8863,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" +robust-predicates@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-2.0.4.tgz#0a2367a93abd99676d075981707f29cfb402248b" + integrity sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg== + rsvp@^4.8.4: version "4.8.4" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" @@ -10060,7 +10076,14 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -viewport-mercator-project@>=6.0.0, viewport-mercator-project@^6.1.0: +viewport-mercator-project@>=6.0.0, "viewport-mercator-project@^6.2.3 || ^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/viewport-mercator-project/-/viewport-mercator-project-7.0.1.tgz#9d7248072f2cbb122f93b63d2b346a5763b8d79a" + integrity sha512-WKTuTL7o6WKdPQ+gmZhlXL7UpSdCdPUjxkDTBd/3AayBdAFSQGHxsqdbmPBvmoGwvo9KWo/30HTkNo/Z7ORJpw== + dependencies: + "@math.gl/web-mercator" "^3.1.3" + +viewport-mercator-project@^6.1.0: version "6.1.1" resolved "https://registry.yarnpkg.com/viewport-mercator-project/-/viewport-mercator-project-6.1.1.tgz#d7b2cb3cb772b819f1daab17cf4019102a9102a6" integrity sha512-nI0GEmXnESwZxWSJuaQkdCnvOv6yckUfqqFbNB8KWVbQY3eUExVM4ZziqCVVs5mNznLjDF1auj6HLW5D5DKcng==