diff --git a/examples/api/cubemap/app.js b/examples/api/cubemap/app.js index 9a2bf629b..69f0a2f4a 100644 --- a/examples/api/cubemap/app.js +++ b/examples/api/cubemap/app.js @@ -1,9 +1,8 @@ import GL from '@luma.gl/constants'; import {AnimationLoop, Model, CubeGeometry} from '@luma.gl/engine'; -import {Texture2D, TextureCube} from '@luma.gl/webgl'; +import {Texture2D, TextureCube, loadImage} from '@luma.gl/webgl'; import {setParameters} from '@luma.gl/gltools'; import {Matrix4, radians} from 'math.gl'; -import {loadImage} from '@loaders.gl/images'; const INFO_HTML = `

@@ -78,7 +77,7 @@ varying vec3 vNormal; varying vec2 vUV; void main(void) { - vec4 color = texture2D(uTexture, vUV); + vec4 color = texture2D(uTexture, vec2(vUV.x, 1.0 - vUV.y)); vec3 reflectedDir = reflect(normalize(vPosition - uEyePosition), vNormal); vec4 reflectedColor = textureCube(uTextureCube, reflectedDir); diff --git a/examples/api/cubemap/package.json b/examples/api/cubemap/package.json index 514c933e2..6c3d828e2 100644 --- a/examples/api/cubemap/package.json +++ b/examples/api/cubemap/package.json @@ -5,7 +5,6 @@ "build": "webpack --env.analyze" }, "dependencies": { - "@loaders.gl/images": "^1.3.3", "@luma.gl/constants": "^8.0.0-alpha.9", "@luma.gl/engine": "^8.0.0-alpha.9", "@luma.gl/gltools": "^8.0.0-alpha.9", diff --git a/examples/performance/stress-test/app.js b/examples/performance/stress-test/app.js index 36d1533a4..7dbd152d9 100644 --- a/examples/performance/stress-test/app.js +++ b/examples/performance/stress-test/app.js @@ -55,7 +55,7 @@ uniform float alpha; out vec4 fragColor; void main(void) { - fragColor.rgb = texture(uTexture, vUV).rgb; + fragColor.rgb = texture(uTexture, vec2(vUV.x, 1.0 - vUV.y)).rgb; fragColor.a = alpha; fragColor = dirlight_filterColor(fragColor); fragColor.rgb *= fragColor.a; diff --git a/examples/showcase/dof/app.js b/examples/showcase/dof/app.js index 63804ac0b..957986982 100644 --- a/examples/showcase/dof/app.js +++ b/examples/showcase/dof/app.js @@ -100,7 +100,7 @@ uniform sampler2D uTexture; out vec4 fragColor; void main(void) { float d = clamp(dot(normalize(vNormal), normalize(vec3(1.0, 1.0, 0.2))), 0.0, 1.0); - fragColor.rgb = texture(uTexture, vUV).rgb * (d + 0.1); + fragColor.rgb = texture(uTexture, vec2(vUV.x, 1.0 - vUV.y)).rgb * (d + 0.1); fragColor.a = 1.0; } `; diff --git a/examples/showcase/geospatial/app.js b/examples/showcase/geospatial/app.js new file mode 100644 index 000000000..b2f100247 --- /dev/null +++ b/examples/showcase/geospatial/app.js @@ -0,0 +1,162 @@ +/* global window */ +import mapboxgl from 'mapbox-gl'; +import {instrumentGLContext} from '@luma.gl/gltools'; +import {Buffer} from '@luma.gl/webgl'; +import {Model} from '@luma.gl/engine'; +import {MiniAnimationLoop} from '../../utils'; + +const INFO_HTML = ` +A triangle connecting Times Square, Rockafeller Center, and Columbus Circle in Manhattan, NYC on a Mapbox basemap using the +Mapbox GL JS custom layer API. +`; + +mapboxgl.accessToken = process.env.MapboxAccessToken; // eslint-disable-line + +const coordinates = [ + [-73.9819, 40.7681], // Columbus Circle + [-73.98513, 40.758896], // Times Square + [-73.9786, 40.7589] // Rockafeller Center +]; + +// Create a Mapbox custom layer +// https://docs.mapbox.com/mapbox-gl-js/example/custom-style-layer/ +class CustomLayer { + constructor() { + this.id = 'lumagl-layer'; + this.type = 'custom'; + this.renderingMode = '3d'; + } + + onAdd(m, gl) { + instrumentGLContext(gl); + this.map = m; + + const vertexSource = ` + attribute vec2 positions; + attribute vec3 colors; + + uniform mat4 uPMatrix; + + varying vec3 vColor; + + void main() { + vColor = colors; + gl_Position = uPMatrix * vec4(positions, 0, 1.0); + } + `; + + const fragmentSource = ` + varying vec3 vColor; + + void main() { + gl_FragColor = vec4(vColor, 0.5); + } + `; + + const positions = new Float32Array(6); + + coordinates.forEach((point, i) => { + const coords = mapboxgl.MercatorCoordinate.fromLngLat(point); + positions[i * 2] = coords.x; + positions[i * 2 + 1] = coords.y; + }); + + this.positionBuffer = new Buffer(gl, new Float32Array(positions)); + this.colorBuffer = new Buffer( + gl, + new Float32Array([1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]) + ); + + // Model to draw a triangle on the map + this.model = new Model(gl, { + id: 'my-program', + vs: vertexSource, + fs: fragmentSource, + attributes: { + positions: this.positionBuffer, + colors: this.colorBuffer + }, + vertexCount: 3 + }); + } + + render(gl, matrix) { + // Mapbox passes us a projection matrix + this.model + .setUniforms({ + uPMatrix: matrix + }) + .draw(); + } + + onRemove() { + // Cleanup + this.positionBuffer.delete(); + this.colorBuffer.delete(); + this.model.delete(); + } +} + +// +export default class AppAnimationLoop extends MiniAnimationLoop { + static getInfo() { + return INFO_HTML; + } + + start(props) { + let bearing = -10; + let vb = 0.1; + let pitch = 40; + let vp = 0.01; + + this.map = new mapboxgl.Map({ + container: this._getContainer(props), + style: 'mapbox://styles/mapbox/streets-v9', + center: [-73.98213, 40.762896], + zoom: 14, + pitch, + bearing, + antialias: true + }); + + this.map.on('load', () => { + this.map.addLayer(new CustomLayer()); + }); + + let loopHandle = null; + + const loop = () => { + bearing += vb; + pitch += vp; + + if (Math.abs(bearing) > 90) { + vb *= -1; + } + + if (pitch > 50 || pitch < 30) { + vp *= -1; + } + + this.map.setBearing(bearing); + this.map.setPitch(pitch); + loopHandle = window.requestAnimationFrame(loop); + }; + + loopHandle = window.requestAnimationFrame(loop); + + this.map.on('mousedown', () => { + window.cancelAnimationFrame(loopHandle); + }); + } + + delete() { + this.map.remove(); + this._removeContainer(); + } +} + +/* global window */ +if (typeof window !== 'undefined' && !window.website) { + const animationLoop = new AppAnimationLoop(); + animationLoop.start(); +} diff --git a/examples/showcase/geospatial/package.json b/examples/showcase/geospatial/package.json new file mode 100644 index 000000000..84bf782fd --- /dev/null +++ b/examples/showcase/geospatial/package.json @@ -0,0 +1,18 @@ +{ + "scripts": { + "start": "webpack-dev-server --progress --hot --open -d", + "start-local": "webpack-dev-server --env.local --progress --hot --open -d", + "build": "webpack --env.local --env.analyze --profile --json > stats.json" + }, + "dependencies": { + "@luma.gl/gltools": "^8.0.0-beta.1", + "@luma.gl/engine": "^8.0.0-beta.1", + "@luma.gl/webgl": "^8.0.0-beta.1", + "mapbox-gl": "^1.2.1", + "webpack": "^4.3.0" + }, + "devDependencies": { + "html-webpack-plugin": "^3.2.0", + "webpack-dev-server": "^3.1.1" + } +} diff --git a/examples/showcase/geospatial/webpack.config.js b/examples/showcase/geospatial/webpack.config.js new file mode 100644 index 000000000..aebca4db6 --- /dev/null +++ b/examples/showcase/geospatial/webpack.config.js @@ -0,0 +1,20 @@ +const webpack = require('webpack'); +const {resolve} = require('path'); +// eslint-disable-next-line import/no-extraneous-dependencies +const HtmlWebpackPlugin = require('html-webpack-plugin'); + +const CONFIG = { + mode: 'development', + + entry: { + app: resolve('./app.js') + }, + + plugins: [ + new HtmlWebpackPlugin({title: 'Geospatial'}), + new webpack.EnvironmentPlugin(['MapboxAccessToken']) + ] +}; + +// This line enables bundling against src in this repo rather than installed module +module.exports = env => (env ? require('../../webpack.config.local')(CONFIG)(env) : CONFIG); diff --git a/examples/utils/index.js b/examples/utils/index.js index 107142b19..d63c0a663 100644 --- a/examples/utils/index.js +++ b/examples/utils/index.js @@ -31,6 +31,40 @@ export class MiniAnimationLoop { return canvas; } + + _getContainer(props = {}) { + if (this.container) { + return this.container; + } + + let width; + let height; + + this.container = document.createElement('div'); + + if (props.canvas) { + const canvas = document.getElementById(props.canvas); + this.parent = canvas.parentElement; + width = canvas.clientWidth; + height = canvas.clientHeight; + this.container.style.position = 'relative'; + this.container.style.top = `-${height}px`; + } else { + this.parent = document.body; + width = 800; + height = 800; + } + + this.container.style.width = `${width}px`; + this.container.style.height = `${height}px`; + this.parent.appendChild(this.container); + + return this.container; + } + + _removeContainer(props = {}) { + this.parent.removeChild(this.container); + } } // Create a deterministic pseudorandom number generator diff --git a/package.json b/package.json index d4a5bfadf..7d7fd156d 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "eslint-plugin-luma-gl-custom-rules": "file:./dev-modules/eslint-plugin-luma-gl-custom-rules", "eslint-plugin-tree-shaking": "^1.7.3", "gl": "^4.2.2", + "mapbox-gl": "^1.2.1", "mkdirp": "^0.5.1", "mjolnir.js": "^2.1.2", "ocular-dev-tools": "0.0.29", diff --git a/website/gatsby-node.js b/website/gatsby-node.js index 8d1b8bf10..f6adef0e8 100644 --- a/website/gatsby-node.js +++ b/website/gatsby-node.js @@ -27,7 +27,7 @@ callbacks.onCreateWebpackConfig = function onCreateWebpackConfigOverride(opts) { onCreateWebpackConfig(opts); const { - // stage, // build stage: ‘develop’, ‘develop-html’, ‘build-javascript’, or ‘build-html’ + stage, // build stage: ‘develop’, ‘develop-html’, ‘build-javascript’, or ‘build-html’ // rules, // Object (map): set of preconfigured webpack config rules // plugins, // Object (map): A set of preconfigured webpack config plugins // getConfig, // Function that returns the current webpack config @@ -60,12 +60,19 @@ callbacks.onCreateWebpackConfig = function onCreateWebpackConfigOverride(opts) { !/node_modules\/(ocular|ocular-gatsby|gatsby-plugin-ocular)/.test(modulePath) }); + // Omit the default rule where test === '\.jsx?$' + const rules = [newJSRule]; + + if (stage === 'build-html') { + rules.push({ + test: /mapbox-gl/, + use: loaders.null() + }); + } + const newConfig = { module: { - rules: [ - // Omit the default rule where test === '\.jsx?$' - newJSRule - ] + rules }, node: { fs: 'empty' diff --git a/website/ocular-config.js b/website/ocular-config.js index 79bb3d58f..968b07e4b 100644 --- a/website/ocular-config.js +++ b/website/ocular-config.js @@ -135,6 +135,12 @@ module.exports = { path: 'examples/showcase/instancing/', image: 'images/example-instancing.jpg' }, + { + title: 'Geospatial', + componentUrl: resolve(__dirname, './templates/showcase/example-geospatial.jsx'), + path: 'examples/showcase/geospatial/', + image: 'images/example-geospatial.jpg' + }, { title: 'Persistence', componentUrl: resolve(__dirname, './templates/showcase/example-persistence.jsx'), diff --git a/website/package.json b/website/package.json index 5940630ff..e364c4803 100644 --- a/website/package.json +++ b/website/package.json @@ -22,7 +22,8 @@ "@probe.gl/stats-widget": "^3.1.1", "react": "^16.6.0", "react-dom": "^16.6.0", - "ocular-gatsby": "1.0.3" + "ocular-gatsby": "1.0.3", + "mapbox-gl": "^1.2.1" }, "devDependencies": { "gatsby": "^2.13.0", diff --git a/website/static/images/example-geospatial.jpg b/website/static/images/example-geospatial.jpg new file mode 100644 index 000000000..989b14278 Binary files /dev/null and b/website/static/images/example-geospatial.jpg differ diff --git a/website/templates/showcase/example-geospatial.jsx b/website/templates/showcase/example-geospatial.jsx new file mode 100644 index 000000000..0d0aaa7e0 --- /dev/null +++ b/website/templates/showcase/example-geospatial.jsx @@ -0,0 +1,13 @@ +import React from 'react'; +import AnimationLoopExamplePage from '../../src/components/animation-loop-example-page'; +import AnimationLoop from '../../../examples/showcase/geospatial/app'; + +export default class Example extends React.Component { + render() { + const { pageContext } = this.props; + const exampleConfig = (pageContext && pageContext.exampleConfig) || {}; + return ( + + ); + } +} diff --git a/website/templates/style.css b/website/templates/style.css index f60447b68..51b54109f 100644 --- a/website/templates/style.css +++ b/website/templates/style.css @@ -13,11 +13,16 @@ margin: 24px; padding: 12px 24px; outline: none; + z-index: 99; } .options-panel h3 { margin: 8px 0; } +a.external-link { + text-decoration: underline; +} + .options-panel .source-link { text-align: right; margin-top: 8px; diff --git a/yarn.lock b/yarn.lock index 28d679685..c9a34c4f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1363,6 +1363,65 @@ resolved "https://registry.yarnpkg.com/@luma.gl/constants/-/constants-7.1.1.tgz#f966fad9069722974e1b7bcae2fcd7a2444090dc" integrity sha512-F+lkZzMJNPvGeTCkOezyHafAb48ottMx10PYx3j1rsKFBM2v1LgBHnV1I37xjkrx8PMhdb/2zMg80nRrniudGw== +"@mapbox/geojson-area@0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz#18d7814aa36bf23fbbcc379f8e26a22927debf10" + integrity sha1-GNeBSqNr8j+7zDefjiaiKSfevxA= + 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" + integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw== + +"@mapbox/jsonlint-lines-primitives@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" + integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ= + +"@mapbox/mapbox-gl-supported@^1.4.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.4.1.tgz#c0a03cf75f8b0ad7b57849d6c7e91b0aec4b640f" + integrity sha512-yyKza9S6z3ELKuf6w5n6VNUB0Osu6Z93RXPfMHLIlNWohu3KqxewLOq4lMXseYJ92GwkRAxd207Pr/Z98cwmvw== + +"@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" + integrity sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI= + +"@mapbox/tiny-sdf@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-1.1.1.tgz#16a20c470741bfe9191deb336f46e194da4a91ff" + integrity sha512-Ihn1nZcGIswJ5XGbgFAvVumOgWpvIjBX9jiRlIl46uQG9vJOF51ViBYHF95rEZupuyQbEmhLaDPLQlU7fUTsBg== + +"@mapbox/unitbezier@^0.0.0": + version "0.0.0" + resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e" + integrity sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4= + +"@mapbox/vector-tile@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666" + integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw== + dependencies: + "@mapbox/point-geometry" "~0.1.0" + +"@mapbox/whoots-js@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" + integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1788,6 +1847,11 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansicolors@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" + integrity sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8= + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -2481,6 +2545,14 @@ caniuse-lite@^1.0.30000974: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000974.tgz#b7afe14ee004e97ce6dc73e3f878290a12928ad8" integrity sha512-xc3rkNS/Zc3CmpMKuczWEdY2sZgx09BkAxfvkxlAEBTqcMHeL8QnPqhKse+5sRTi3nrw2pJwToD2WvKn1Uhvww== +cardinal@~0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-0.4.4.tgz#ca5bb68a5b511b90fe93b9acea49bdee5c32bfe2" + integrity sha1-ylu2iltRG5D+k7ms6km97lwyv+I= + dependencies: + ansicolors "~0.2.1" + redeyed "~0.4.0" + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -2724,7 +2796,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@1.6.2, concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.6.0: +concat-stream@1.6.2, concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@~1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -3047,6 +3119,11 @@ css-what@2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== +csscolorparser@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" + integrity sha1-s085HupNqPPpgjHizNjfnAQfFxs= + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -3442,6 +3519,11 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +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== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -3734,6 +3816,11 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +esprima@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" + integrity sha1-n1V+CPw7TSbs6d00+Pv0drYlha0= + esquery@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" @@ -4268,6 +4355,11 @@ genfun@^5.0.0: resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== +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== + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -4535,6 +4627,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== +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== + "growl@~> 1.10.0": version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" @@ -4848,7 +4945,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, ic dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.4: +ieee754@^1.1.12, ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== @@ -5503,6 +5600,11 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +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" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -5860,6 +5962,35 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +mapbox-gl@^1.2.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/mapbox-gl/-/mapbox-gl-1.5.1.tgz#354560bc550b8bffa7573c2ebd0febfe00f8d334" + integrity sha512-B2LXxHQAOWx/bdHd2lBKhW0zWGYL73bb0CXVFsSblXW3Ta8h5czRW3sHYrXpWCOt+nO/+3XtxTYJ9vyZ2HL2nA== + 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" + "@mapbox/point-geometry" "^0.1.0" + "@mapbox/tiny-sdf" "^1.1.0" + "@mapbox/unitbezier" "^0.0.0" + "@mapbox/vector-tile" "^1.3.1" + "@mapbox/whoots-js" "^3.1.0" + csscolorparser "~1.0.2" + 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.2.1" + potpack "^1.0.1" + quickselect "^2.0.0" + rw "^1.3.3" + supercluster "^6.0.1" + tinyqueue "^2.0.0" + vt-pbf "^3.1.1" + math.gl@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/math.gl/-/math.gl-3.0.0.tgz#fe7ee98bd9439a29942246b3fe7a36f27fba06b2" @@ -6048,12 +6179,17 @@ minimist-options@^3.0.1: arrify "^1.0.1" is-plain-obj "^1.1.0" +minimist@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.5.tgz#d7aa327bcecf518f9106ac6b8f003fa3bcea8566" + integrity sha1-16oye87PUY+RBqxrjwA/o7zqhWY= + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: +minimist@1.2.0, minimist@^1.1.3, 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= @@ -6177,6 +6313,11 @@ multimatch@^2.1.0: arrify "^1.0.0" minimatch "^3.0.0" +murmurhash-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" + integrity sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E= + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -7071,6 +7212,14 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +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" + pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -7174,6 +7323,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +potpack@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.1.tgz#d1b1afd89e4c8f7762865ec30bd112ab767e2ebf" + integrity sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw== + pre-commit@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" @@ -7311,6 +7465,11 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= +protocol-buffers-schema@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz#00434f608b4e8df54c59e070efeefc37fb4bb859" + integrity sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w== + protocols@^1.1.0, protocols@^1.4.0: version "1.4.7" resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" @@ -7460,6 +7619,11 @@ quick-lru@^1.0.0: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= +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" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -7678,6 +7842,13 @@ redent@^2.0.0: indent-string "^3.0.0" strip-indent "^2.0.0" +redeyed@~0.4.0: + version "0.4.4" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-0.4.4.tgz#37e990a6f2b21b2a11c2e6a48fd4135698cba97f" + integrity sha1-N+mQpvKyGyoRwuakj9QTVpjLqX8= + dependencies: + esprima "~1.0.4" + regenerate-unicode-properties@^8.0.2: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" @@ -7881,6 +8052,13 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-protobuf-schema@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" + integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== + dependencies: + protocol-buffers-schema "^3.3.1" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -7959,6 +8137,11 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rw@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= + rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" @@ -8149,6 +8332,15 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +sharkdown@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/sharkdown/-/sharkdown-0.1.1.tgz#64484bd0f08f347f8319e9ff947a670f6b48b1b2" + integrity sha512-exwooSpmo5s45lrexgz6Q0rFQM574wYIX3iDZ7RLLqOb7IAoQZu9nxlZODU972g19sR69OIpKP2cpHTzU+PHIg== + dependencies: + cardinal "~0.4.2" + minimist "0.0.5" + split "~0.2.10" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -8429,6 +8621,13 @@ split@^1.0.0: dependencies: through "2" +split@~0.2.10: + version "0.2.10" + resolved "https://registry.yarnpkg.com/split/-/split-0.2.10.tgz#67097c601d697ce1368f418f06cd201cf0521a57" + integrity sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc= + dependencies: + through "2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -8615,6 +8814,13 @@ strong-log-transformer@^2.0.0: minimist "^1.2.0" through "^2.3.4" +supercluster@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-6.0.2.tgz#aa2eaae185ef97872f388c683ec29f6991721ee3" + integrity sha512-aa0v2HURjBTOpbcknilcfxGDuArM8khklKSmZ/T8ZXL0BuRwb5aRw95lz+2bmWpFvCXDX/+FzqHxmg0TIaJErw== + dependencies: + kdbush "^3.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -8827,6 +9033,11 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +tinyqueue@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" + integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -9200,6 +9411,15 @@ vm-browserify@0.0.4: dependencies: indexof "0.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== + dependencies: + "@mapbox/point-geometry" "0.1.0" + "@mapbox/vector-tile" "^1.3.1" + pbf "^3.0.5" + watchpack@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" @@ -9376,6 +9596,11 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== +wgs84@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/wgs84/-/wgs84-0.0.0.tgz#34fdc555917b6e57cf2a282ed043710c049cdc76" + integrity sha1-NP3FVZF7blfPKigu0ENxDASc3HY= + whatwg-url@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd"