├── .gitignore ├── LICENSE ├── README.md ├── css └── base.css ├── favicon.ico ├── img ├── 1.jpg ├── 10.jpg ├── 11.jpg ├── 12.jpg ├── 13.jpg ├── 14.jpg ├── 15.jpg ├── 2.jpg ├── 3.jpg ├── 4.jpg ├── 5.jpg ├── 6.jpg ├── 7.jpg ├── 8.jpg └── 9.jpg ├── index.html ├── index1.html ├── index2.html ├── index3.html ├── index4.html ├── js ├── app.js ├── demo0.js ├── demo0 │ ├── fragment.glsl │ └── vertex.glsl ├── demo1.js ├── demo1 │ ├── fragment.glsl │ └── vertex.glsl ├── demo2.js ├── demo2 │ ├── fragment.glsl │ └── vertex.glsl ├── demo3.js ├── demo3 │ ├── fragment.glsl │ └── vertex.glsl ├── demo4.js ├── demo4 │ ├── fragment.glsl │ └── vertex.glsl ├── lib │ └── getGeometry.js └── shader │ ├── fragment.glsl │ ├── vertex.glsl │ ├── vertex1.glsl │ └── vertexParticles.glsl ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | .cache/ 3 | node_modules/ 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2009 - 2020 [Codrops](https://tympanus.net/codrops) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Experimental Polygon Transitions with WebGL 2 | 3 | Some experimental animations using triangles for image transitions with WebGL. 4 | 5 | ![Triangles](https://tympanus.net/codrops/wp-content/uploads/2020/08/Triangles_Featured.jpg) 6 | 7 | [Article on Codrops](https://tympanus.net/codrops/?p=50876) 8 | 9 | [Demo](https://github.com/akella/PolygonTransitions/archive/master.zip) 10 | 11 | 12 | ## Installation 13 | 14 | To run demo you will need [Parcel](https://parceljs.org/), either install it 15 | ``` 16 | npm install -g parcel-bundler 17 | parcel index.html 18 | ``` 19 | Or run without installation: 20 | ``` 21 | npx parcel index.html 22 | ``` 23 | After that demo should be available on http://localhost:1234. 24 | 25 | ## Misc 26 | 27 | Follow Yuriy: [Twitter](http://twitter.com/akella), [GitHub](https://github.com/akella) 28 | 29 | Follow Codrops: [Twitter](http://www.twitter.com/codrops), [Facebook](http://www.facebook.com/codrops), [GitHub](https://github.com/codrops), [Instagram](https://www.instagram.com/codropsss/) 30 | 31 | ## License 32 | [MIT](LICENSE) 33 | 34 | Made with :blue_heart: by [Codrops](http://www.codrops.com) 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /css/base.css: -------------------------------------------------------------------------------- 1 | *, 2 | *::after, 3 | *::before { 4 | box-sizing: border-box; 5 | } 6 | 7 | :root { 8 | font-size: 15px; 9 | } 10 | 11 | body { 12 | margin: 0; 13 | --color-text: #202127; 14 | --color-bg: #e6e6e6; 15 | --color-link: #a06d2d; 16 | --color-link-hover: #ba7e31; 17 | color: var(--color-text); 18 | background-color: var(--color-bg); 19 | font-family: tenon, -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif; 20 | font-weight: 300; 21 | } 22 | 23 | body #cdawrap { 24 | --cda-left: auto; 25 | --cda-right: 3rem; 26 | --cda-top: 6rem; 27 | --cda-bottom: auto; 28 | --cda-text-align: right; 29 | --footer-align: end; 30 | --cda-width: 255px; 31 | --cda-text-size: 12px; 32 | --cda-text-color: var(--color-text); 33 | --cda-footer-fontsize: 10px; 34 | --cda-footer-color: var(--color-text); 35 | } 36 | 37 | .demo-1 { 38 | --color-text: #fff; 39 | --color-bg: #000; 40 | --color-link: #edc4a4; 41 | --color-link-hover: #fff; 42 | } 43 | 44 | .demo-2 { 45 | --color-text: #fff; 46 | --color-bg: #000; 47 | --color-link: #b7491a; 48 | --color-link-hover: #fff; 49 | } 50 | 51 | .demo-3 { 52 | --color-text: #fff; 53 | --color-bg: #000; 54 | --color-link: #ebea9b; 55 | --color-link-hover: #fff; 56 | } 57 | 58 | .demo-4 { 59 | --color-text: #000; 60 | --color-bg: #fff; 61 | --color-link: #3f51b5; 62 | --color-link-hover: #000; 63 | } 64 | 65 | /* Page Loader */ 66 | .js .loading::before, 67 | .js .loading::after { 68 | content: ''; 69 | position: fixed; 70 | z-index: 1000; 71 | } 72 | 73 | .js .loading::before { 74 | top: 0; 75 | left: 0; 76 | width: 100%; 77 | height: 100%; 78 | background: var(--color-bg); 79 | } 80 | 81 | .js .loading::after { 82 | top: 50%; 83 | left: 50%; 84 | width: 60px; 85 | height: 60px; 86 | margin: -30px 0 0 -30px; 87 | border-radius: 50%; 88 | opacity: 0.4; 89 | background: var(--color-link); 90 | animation: loaderAnim 0.7s linear infinite alternate forwards; 91 | } 92 | 93 | @keyframes loaderAnim { 94 | to { 95 | opacity: 1; 96 | transform: scale3d(0.5,0.5,1); 97 | } 98 | } 99 | 100 | a { 101 | text-decoration: none; 102 | color: var(--color-link); 103 | outline: none; 104 | } 105 | 106 | a:hover, 107 | a:focus { 108 | color: var(--color-link-hover); 109 | outline: none; 110 | } 111 | 112 | main { 113 | height: 100vh; 114 | display: flex; 115 | flex-direction: column; 116 | justify-content: space-between; 117 | } 118 | 119 | .frame { 120 | padding: 3rem 5vw; 121 | text-align: center; 122 | position: relative; 123 | z-index: 1000; 124 | } 125 | 126 | .frame__title { 127 | font-size: 1rem; 128 | margin: 0 0 1rem; 129 | font-weight: 300; 130 | } 131 | 132 | .frame__links { 133 | display: inline; 134 | } 135 | 136 | .frame__links a { 137 | text-decoration: underline; 138 | } 139 | 140 | .frame__links a:hover, 141 | .frame__links a:focus { 142 | text-decoration: none; 143 | } 144 | 145 | .frame__demos { 146 | position: relative; 147 | margin: 1rem 0; 148 | } 149 | 150 | .frame__demos a, 151 | .frame__links a { 152 | margin: 0 1rem; 153 | } 154 | 155 | .frame__demos::before { 156 | content: 'More demos'; 157 | text-align: center; 158 | margin: 0 0 1rem; 159 | display: block; 160 | } 161 | 162 | .frame__demos a { 163 | position: relative; 164 | } 165 | 166 | .frame__demo--current, 167 | .frame__demo--current:hover { 168 | color: var(--color-text); 169 | } 170 | 171 | .frame__demo--current::after { 172 | content: ''; 173 | position: absolute; 174 | left: calc(50% - 1rem); 175 | width: 2rem; 176 | height: 1px; 177 | top: calc(0% + 0.5rem); 178 | background: currentColor; 179 | } 180 | 181 | #container{ 182 | width: 100vw; 183 | height: 100vh; 184 | position: absolute; 185 | top: 0; 186 | left: 0; 187 | } 188 | 189 | .content { 190 | display: flex; 191 | flex-direction: column; 192 | width: 100vw; 193 | position: relative; 194 | align-items: flex-start; 195 | justify-content: flex-end; 196 | background-position: 50% 50%; 197 | background-size: cover; 198 | padding: 2rem 5vw; 199 | } 200 | 201 | .content__title { 202 | font-size: clamp(2rem,10vw,9rem); 203 | text-transform: uppercase; 204 | line-height: 0.7; 205 | font-family: degular, sans-serif; 206 | font-weight: 500; 207 | letter-spacing: clamp(-0.05rem,-0.12vw,-0.15rem); 208 | margin: 0 0 5rem 0; 209 | max-width: 60rem; 210 | } 211 | 212 | .content__title span { 213 | white-space: nowrap; 214 | } 215 | 216 | .content__title em { 217 | display: block; 218 | font-weight: 200; 219 | } 220 | 221 | .nav { 222 | position: relative; 223 | cursor: pointer; 224 | padding-left: 7rem; 225 | } 226 | 227 | .nav::before { 228 | content: ''; 229 | height: 1px; 230 | width: 6rem; 231 | background: currentColor; 232 | position: absolute; 233 | left: 0; 234 | top: 50%; 235 | } 236 | 237 | @media screen and (min-width: 53em) { 238 | main { 239 | display: block; 240 | } 241 | .frame { 242 | position: fixed; 243 | text-align: left; 244 | z-index: 100; 245 | top: 0; 246 | left: 0; 247 | display: grid; 248 | align-content: space-between; 249 | width: 100%; 250 | max-width: none; 251 | height: 100vh; 252 | padding: 3rem; 253 | pointer-events: none; 254 | grid-template-columns: 50% 50%; 255 | grid-template-rows: auto auto auto; 256 | grid-template-areas: 'title links' 257 | '... ...' 258 | '... demos'; 259 | } 260 | .frame__title-wrap { 261 | grid-area: title; 262 | display: flex; 263 | } 264 | .frame__title { 265 | margin: 0; 266 | } 267 | .frame__tagline { 268 | position: relative; 269 | margin: 0 0 0 1rem; 270 | padding: 0 0 0 1rem; 271 | opacity: 0.5; 272 | } 273 | .frame__demos { 274 | margin: 0; 275 | grid-area: demos; 276 | justify-self: end; 277 | } 278 | .frame__links a:last-child, 279 | .frame__demos a:last-child { 280 | margin-right: 0; 281 | } 282 | .frame__demos::before { 283 | text-align: right; 284 | } 285 | .frame__links { 286 | grid-area: links; 287 | padding: 0; 288 | justify-self: end; 289 | } 290 | .frame a { 291 | pointer-events: auto; 292 | } 293 | .content { 294 | padding: 3rem; 295 | height: 100vh; 296 | } 297 | } -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/favicon.ico -------------------------------------------------------------------------------- /img/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/1.jpg -------------------------------------------------------------------------------- /img/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/10.jpg -------------------------------------------------------------------------------- /img/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/11.jpg -------------------------------------------------------------------------------- /img/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/12.jpg -------------------------------------------------------------------------------- /img/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/13.jpg -------------------------------------------------------------------------------- /img/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/14.jpg -------------------------------------------------------------------------------- /img/15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/15.jpg -------------------------------------------------------------------------------- /img/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/2.jpg -------------------------------------------------------------------------------- /img/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/3.jpg -------------------------------------------------------------------------------- /img/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/4.jpg -------------------------------------------------------------------------------- /img/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/5.jpg -------------------------------------------------------------------------------- /img/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/6.jpg -------------------------------------------------------------------------------- /img/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/7.jpg -------------------------------------------------------------------------------- /img/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/8.jpg -------------------------------------------------------------------------------- /img/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akella/PolygonTransitions/e8ca20266d00be0eb085a98cd50bbe8e23220cd2/img/9.jpg -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Experimental Polygon Transitions with WebGL | Demo 1 | Codrops 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |

Experimental Polygon Transitions with WebGL

19 | 24 |
25 | 1 26 | 2 27 | 3 28 | 4 29 | 5 30 |
31 |
32 |
33 |
34 |

South AlpineEngineeringSolutions

35 | Next 36 |
37 |
38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /index1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Experimental Polygon Transitions with WebGL | Demo 2 | Codrops 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |

Experimental Polygon Transitions with WebGL

19 | 24 |
25 | 1 26 | 2 27 | 3 28 | 4 29 | 5 30 |
31 |
32 |
33 |
34 |

Sati Zen 18 Mindfulness Sessions

35 | Next 36 |
37 |
38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /index2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Experimental Polygon Transitions with WebGL | Demo 3 | Codrops 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |

Experimental Polygon Transitions with WebGL

19 | 24 |
25 | 1 26 | 2 27 | 3 28 | 4 29 | 5 30 |
31 |
32 |
33 |
34 |

Desert Hill Experience Destinations

35 | Next 36 |
37 |
38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /index3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Experimental Polygon Transitions with WebGL | Demo 4 | Codrops 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |

Experimental Polygon Transitions with WebGL

19 | 24 |
25 | 1 26 | 2 27 | 3 28 | 4 29 | 5 30 |
31 |
32 |
33 |
34 |

Julian Brecht Fantomasia Installations

35 | Next 36 |
37 |
38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /index4.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Experimental Polygon Transitions with WebGL | Demo 5 | Codrops 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |

Experimental Polygon Transitions with WebGL

19 | 24 |
25 | 1 26 | 2 27 | 3 28 | 4 29 | 5 30 |
31 |
32 |
33 |
34 |

Aurelie Libre Performance Academy

35 | Next 36 |
37 |
38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /js/app.js: -------------------------------------------------------------------------------- 1 | import * as THREE from "three"; 2 | import getGeometry from './lib/getGeometry' 3 | import * as dat from "dat.gui"; 4 | // let OrbitControls = require("three-orbit-controls")(THREE); 5 | import gsap from 'gsap'; 6 | export default class Sketch { 7 | constructor(options) { 8 | 9 | this.scene = new THREE.Scene(); 10 | this.renderer = new THREE.WebGLRenderer({ 11 | // antialias: true 12 | }); 13 | this.detail = options.detail; 14 | this.nextDOM = options.next; 15 | this.fragment = options.fragment; 16 | this.offsettop = options.offsettop || 0; 17 | this.ease = options.ease || 'none'; 18 | this.duration = options.duration || 2; 19 | this.vertex = options.vertex; 20 | this.container = options.dom; 21 | this.width = this.container.offsetWidth; 22 | this.height = this.container.offsetHeight; 23 | this.images = JSON.parse(this.container.getAttribute('data-images')); 24 | this.renderer.setPixelRatio(window.devicePixelRatio); 25 | this.renderer.setSize(this.width, this.height); 26 | this.renderer.setClearColor(0xeeeeee, 1); 27 | this.renderer.physicallyCorrectLights = true; 28 | this.renderer.outputEncoding = THREE.sRGBEncoding; 29 | this.currentIndex = 0; 30 | this.rendering = true; 31 | 32 | 33 | this.container.appendChild(this.renderer.domElement); 34 | 35 | this.camera = new THREE.PerspectiveCamera( 36 | 70, 37 | window.innerWidth / window.innerHeight, 38 | 0.001, 39 | 1000 40 | ); 41 | this.camera.position.set(0, 0, 2); 42 | // this.controls = new OrbitControls(this.camera, this.renderer.domElement); 43 | this.time = 0; 44 | this.paused = false; 45 | this.textures = [] 46 | this.initiate(()=>{ 47 | this.imageAspect = this.textures[0].image.naturalHeight/this.textures[0].image.naturalWidth 48 | this.setupResize(); 49 | this.addObjects(); 50 | this.resize(); 51 | this.render(); 52 | // this.settings(); 53 | this.nextEvent(); 54 | document.body.classList.remove('loading') 55 | }) 56 | 57 | } 58 | 59 | nextEvent(){ 60 | this.nextDOM.addEventListener('click',()=>{ 61 | this.next(); 62 | }) 63 | } 64 | 65 | initiate(cb){ 66 | const promises = []; 67 | let that = this; 68 | this.images.forEach((url,i)=>{ 69 | let promise = new Promise(resolve => { 70 | that.textures[i] = new THREE.TextureLoader().load( url, resolve ); 71 | }); 72 | promises.push(promise); 73 | }) 74 | Promise.all(promises).then(() => { 75 | cb(); 76 | }); 77 | } 78 | 79 | settings() { 80 | let that = this; 81 | this.settings = { 82 | progress: 0, 83 | next: function(){ 84 | that.next(); 85 | } 86 | }; 87 | this.gui = new dat.GUI(); 88 | this.gui.add(this.settings, "progress", 0, 1, 0.01); 89 | this.gui.add(this.settings, "next"); 90 | } 91 | 92 | setupResize() { 93 | window.addEventListener("resize", this.resize.bind(this)); 94 | } 95 | 96 | resize() { 97 | this.width = this.container.offsetWidth; 98 | this.height = this.container.offsetHeight; 99 | this.renderer.setSize(this.width, this.height); 100 | this.camera.aspect = this.width / this.height; 101 | 102 | 103 | // image cover 104 | let a1; let a2; 105 | if(this.height/this.widththis.height) koef = this.camera.aspect 128 | 129 | this.nextMesh.scale.set(this.camera.aspect,1,1) 130 | this.currentMesh.scale.set(this.camera.aspect,1,1) 131 | this.camera.fov = 2*(180/Math.PI)*Math.atan(height/(2*dist*koef)); 132 | this.camera.updateProjectionMatrix(); 133 | } 134 | 135 | 136 | next(){ 137 | let that = this; 138 | 139 | if(!this.isRunning){ 140 | this.isRunning = true; 141 | this.rendering = true; 142 | this.currentIndex++; 143 | this.nextTexture = this.textures[this.currentIndex%this.textures.length]; 144 | this.nextnextTexture = this.textures[(this.currentIndex+1)%this.textures.length]; 145 | gsap.to(this.settings,{ 146 | duration: this.duration, 147 | progress: 1, 148 | ease: this.ease, 149 | onComplete: ()=>{ 150 | this.isRunning = false; 151 | this.settings.progress = 0; 152 | this.material.uniforms.texture1.value = this.nextTexture; 153 | this.material1.uniforms.texture1.value = this.nextnextTexture; 154 | this.rendering = false; 155 | } 156 | }) 157 | } 158 | 159 | } 160 | 161 | 162 | addObjects() { 163 | let that = this; 164 | this.material = new THREE.ShaderMaterial({ 165 | extensions: { 166 | derivatives: "#extension GL_OES_standard_derivatives : enable" 167 | }, 168 | side: THREE.DoubleSide, 169 | uniforms: { 170 | time: { type: "f", value: 0 }, 171 | progress: { type: "f", value: 0 }, 172 | resolution: { type: "v4", value: new THREE.Vector4() }, 173 | texture1: { type: "t", value: this.textures[0] } 174 | }, 175 | // wireframe: true, 176 | transparent: true, 177 | vertexShader: this.vertex, 178 | fragmentShader: this.fragment, 179 | depthTest: false, 180 | depthWrite: false 181 | }); 182 | 183 | let geo = getGeometry(this.detail,this.offsettop); 184 | this.material1 = this.material.clone() 185 | let t = this.textures[1]; 186 | this.material1.uniforms.texture1.value = t; 187 | this.currentMesh = new THREE.Mesh(geo, this.material); 188 | this.nextMesh = new THREE.Mesh(geo, this.material1); 189 | 190 | this.nextMesh.position.z = -0.0001; 191 | this.scene.add(this.currentMesh); 192 | this.scene.add(this.nextMesh); 193 | // this.geometry = new THREE.PlaneGeometry(1, 1, 10, 10); 194 | // this.testMesh = new THREE.Mesh(this.geometry, new THREE.MeshBasicMaterial({color:0x000000,wireframe: true})); 195 | // this.scene.add(this.testMesh); 196 | } 197 | 198 | render() { 199 | if (this.paused) return; 200 | if(this.material) this.material.uniforms.progress.value = this.settings.progress; 201 | requestAnimationFrame(this.render.bind(this)); 202 | // if(this.rendering) 203 | this.renderer.render(this.scene, this.camera); 204 | } 205 | } 206 | 207 | 208 | -------------------------------------------------------------------------------- /js/demo0.js: -------------------------------------------------------------------------------- 1 | import Sketch from './app.js' 2 | import fragment from "./demo0/fragment.glsl"; 3 | import vertex from "./demo0/vertex.glsl"; 4 | 5 | const sketch = new Sketch({ 6 | dom: document.getElementById('container'), 7 | next: document.querySelector('.nav-next'), 8 | detail: 10, 9 | duration: 2, 10 | fragment: fragment, 11 | vertex: vertex, 12 | offsettop: 0., 13 | ease: "power2.in" 14 | }); 15 | 16 | -------------------------------------------------------------------------------- /js/demo0/fragment.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | uniform sampler2D texture1; 4 | uniform vec4 resolution; 5 | varying vec2 vUv; 6 | varying float vProgress; 7 | varying float vProgress1; 8 | float PI = 3.141592653589793238; 9 | varying vec3 vBary; 10 | void main() { 11 | 12 | float width =2.5*vProgress1; 13 | vec3 d = fwidth(vBary); 14 | vec3 s = smoothstep(d * (width + 0.5), d * (width - 0.5), vBary); 15 | float alpha = max(max(s.x, s.y), s.z); 16 | vec3 color = vec3(alpha); 17 | vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5); 18 | // newUV = vUv; 19 | vec4 t = texture2D(texture1,newUV); 20 | float opa = smoothstep(1.,0.5,vProgress); 21 | opa = 1. - vProgress; 22 | gl_FragColor = vec4(vUv,0.0,opa); 23 | gl_FragColor = vec4(t.rgb + 1.*color*vProgress1,opa); 24 | // gl_FragColor.rgb = mix(gl_FragColor.rgb,vec3(1.,0.,0.),1. - opa); 25 | // gl_FragColor = vec4(color,opa); 26 | // gl_FragColor = vec4(t.rgb,opa); 27 | } -------------------------------------------------------------------------------- /js/demo0/vertex.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | uniform vec4 resolution; 4 | varying vec2 vUv; 5 | varying vec4 vPosition; 6 | varying float vProgress; 7 | varying float vProgress1; 8 | uniform vec2 pixels; 9 | 10 | attribute float offset; 11 | attribute float random; 12 | attribute vec3 centroid1; 13 | attribute vec3 bary; 14 | varying vec3 vBary; 15 | 16 | mat4 rotationMatrix(vec3 axis, float angle) { 17 | axis = normalize(axis); 18 | float s = sin(angle); 19 | float c = cos(angle); 20 | float oc = 1.0 - c; 21 | 22 | return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, 23 | oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, 24 | oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, 25 | 0.0, 0.0, 0.0, 1.0); 26 | } 27 | 28 | vec3 rotate(vec3 v, vec3 axis, float angle) { 29 | mat4 m = rotationMatrix(axis, angle); 30 | return (m * vec4(v, 1.0)).xyz; 31 | } 32 | 33 | float easeInOutQuint(float t){ 34 | return t < 0.5 ? 16.0 * t * t * t * t * t : 1.0 + 16.0 * (--t) * t * t * t * t; 35 | } 36 | float easeOutQuint(float t){ 37 | return 1. + (--t) * t * t * t * t; 38 | } 39 | float easeOut(float t){ 40 | return t * t * t; 41 | } 42 | 43 | 44 | 45 | void main() { 46 | float PI = 3.141592653589793238; 47 | vUv = uv; 48 | vBary = bary; 49 | 50 | vec3 newpos = position; 51 | 52 | float o = 1. - offset; 53 | // float prog = clamp( (progress - o*0.999) /0.001,0.,1.); 54 | float pr = (progress - 0.5)*(0. + resolution.y/resolution.x) + 0.5; 55 | pr = progress; 56 | float prog = clamp( (pr - o*0.9) /0.1,0.,1.); 57 | vProgress = prog; 58 | vProgress1 = clamp( (pr - clamp(o - 0.1,0.,1.)*0.9) /0.1,0.,1.); 59 | // prog = easeInOutQuint(prog); 60 | newpos = rotate((newpos - centroid1), vec3(1.,0.,0.),-prog*PI) + centroid1 + vec3(0.,-1.,0.)*prog*0.; 61 | // newpos.y += prog*1.5*sin(PI*random); 62 | // newpos.x += prog*1.5*cos(PI*random); 63 | // newpos.x += sin(10.*offset)*prog; 64 | // newpos.y += 0.4*sin(time + offset); 65 | gl_Position = projectionMatrix * modelViewMatrix * vec4( newpos, 1.0 ); 66 | } -------------------------------------------------------------------------------- /js/demo1.js: -------------------------------------------------------------------------------- 1 | import Sketch from './app.js' 2 | import fragment from "./demo1/fragment.glsl"; 3 | import vertex from "./demo1/vertex.glsl"; 4 | const sketch = new Sketch({ 5 | dom: document.getElementById('container'), 6 | next: document.querySelector('.nav-next'), 7 | detail: 50, 8 | fragment: fragment, 9 | vertex: vertex, 10 | offsettop: 0.9, 11 | ease: "power2.in" 12 | }); 13 | 14 | -------------------------------------------------------------------------------- /js/demo1/fragment.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | uniform sampler2D texture1; 4 | uniform vec4 resolution; 5 | varying vec2 vUv; 6 | varying float vProgress; 7 | varying float vProgress1; 8 | float PI = 3.141592653589793238; 9 | varying vec3 vBary; 10 | void main() { 11 | 12 | float width =2.5*vProgress1; 13 | vec3 d = fwidth(vBary); 14 | vec3 s = smoothstep(d * (width + 0.5), d * (width - 0.5), vBary); 15 | float alpha = max(max(s.x, s.y), s.z); 16 | vec3 color = vec3(alpha); 17 | 18 | 19 | vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5); 20 | // vec2 newUV = (vUv - vec2(0.5))*koef + vec2(0.5); 21 | vec4 t = texture2D(texture1,newUV); 22 | float opa = smoothstep(1.,0.5,vProgress); 23 | opa = 1. - vProgress; 24 | gl_FragColor = vec4(vUv,0.0,opa); 25 | gl_FragColor = vec4(t.rgb + 0.*color*vProgress1,opa); 26 | gl_FragColor.rgb = mix(gl_FragColor.rgb,vec3(1.,0.,0.),1. - opa); 27 | // gl_FragColor = vec4(color,opa); 28 | gl_FragColor = vec4(t.rgb,opa); 29 | } -------------------------------------------------------------------------------- /js/demo1/vertex.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | uniform vec4 resolution; 4 | varying vec2 vUv; 5 | varying vec4 vPosition; 6 | varying float vProgress; 7 | varying float vProgress1; 8 | uniform vec2 pixels; 9 | 10 | attribute float offset; 11 | attribute float random; 12 | attribute vec3 centroid1; 13 | attribute vec3 bary; 14 | varying vec3 vBary; 15 | 16 | mat4 rotationMatrix(vec3 axis, float angle) { 17 | axis = normalize(axis); 18 | float s = sin(angle); 19 | float c = cos(angle); 20 | float oc = 1.0 - c; 21 | 22 | return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, 23 | oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, 24 | oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, 25 | 0.0, 0.0, 0.0, 1.0); 26 | } 27 | 28 | vec3 rotate(vec3 v, vec3 axis, float angle) { 29 | mat4 m = rotationMatrix(axis, angle); 30 | return (m * vec4(v, 1.0)).xyz; 31 | } 32 | 33 | float easeInOutQuint(float t){ 34 | return t < 0.5 ? 16.0 * t * t * t * t * t : 1.0 + 16.0 * (--t) * t * t * t * t; 35 | } 36 | float easeOutQuint(float t){ 37 | return 1. + (--t) * t * t * t * t; 38 | } 39 | float easeOut(float t){ 40 | return t * t * t; 41 | } 42 | 43 | 44 | 45 | void main() { 46 | float PI = 3.141592653589793238; 47 | vUv = uv; 48 | vBary = bary; 49 | 50 | vec3 newpos = position; 51 | 52 | float o = 1. - offset; 53 | // float prog = clamp( (progress - o*0.999) /0.001,0.,1.); 54 | float pr = (progress - 0.5)*(0.3 + resolution.y/resolution.x) + 0.5; 55 | pr = progress; 56 | float prog = clamp( (pr - o*0.6) /0.4,0.,1.); 57 | vProgress = prog; 58 | vProgress1 = clamp( (pr - (o - 0.1)*0.9) /0.1,0.,1.); 59 | // prog = easeInOutQuint(prog); 60 | // newpos = rotate(newpos - centroid1, vec3(1.,0.,0.),-prog*PI) + centroid1 + vec3(0.,-1.,0.)*prog*0.; 61 | newpos.y += easeOut(prog)*1.5*sin(PI*random); 62 | newpos.x += easeOut(prog)*1.5*cos(PI*random); 63 | // newpos.x += sin(10.*offset)*prog; 64 | // newpos.y += 0.4*sin(time + offset); 65 | gl_Position = projectionMatrix * modelViewMatrix * vec4( newpos, 1.0 ); 66 | } -------------------------------------------------------------------------------- /js/demo2.js: -------------------------------------------------------------------------------- 1 | import Sketch from './app.js' 2 | import fragment from "./demo2/fragment.glsl"; 3 | import vertex from "./demo2/vertex.glsl"; 4 | 5 | const sketch = new Sketch({ 6 | dom: document.getElementById('container'), 7 | next: document.querySelector('.nav-next'), 8 | detail: 100, 9 | fragment: fragment, 10 | vertex: vertex, 11 | offsettop: 0.4, 12 | 13 | }); 14 | 15 | -------------------------------------------------------------------------------- /js/demo2/fragment.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | uniform sampler2D texture1; 4 | uniform vec4 resolution; 5 | varying vec2 vUv; 6 | varying float vProgress; 7 | varying float vProgress1; 8 | float PI = 3.141592653589793238; 9 | varying vec3 vBary; 10 | void main() { 11 | 12 | float width =2.5*vProgress1; 13 | vec3 d = fwidth(vBary); 14 | vec3 s = smoothstep(d * (width + 0.5), d * (width - 0.5), vBary); 15 | float alpha = max(max(s.x, s.y), s.z); 16 | vec3 color = vec3(alpha); 17 | 18 | 19 | vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5); 20 | vec4 t = texture2D(texture1,newUV); 21 | float opa = smoothstep(1.,0.5,vProgress); 22 | opa = 1. - vProgress; 23 | gl_FragColor = vec4(vUv,0.0,opa); 24 | opa = smoothstep(0.5,1.,opa); 25 | gl_FragColor = vec4(t.rgb + 1.*color*vProgress1,opa); 26 | // gl_FragColor.rgb = mix(gl_FragColor.rgb,vec3(1.,0.,0.),1. - opa); 27 | // gl_FragColor = vec4(color,opa); 28 | } -------------------------------------------------------------------------------- /js/demo2/vertex.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | varying vec2 vUv; 4 | varying vec4 vPosition; 5 | varying float vProgress; 6 | varying float vProgress1; 7 | uniform vec2 pixels; 8 | 9 | attribute float offset; 10 | attribute float random; 11 | attribute vec3 centroid1; 12 | attribute vec3 control0; 13 | attribute vec3 control1; 14 | attribute vec3 bary; 15 | varying vec3 vBary; 16 | 17 | mat4 rotationMatrix(vec3 axis, float angle) { 18 | axis = normalize(axis); 19 | float s = sin(angle); 20 | float c = cos(angle); 21 | float oc = 1.0 - c; 22 | 23 | return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, 24 | oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, 25 | oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, 26 | 0.0, 0.0, 0.0, 1.0); 27 | } 28 | 29 | vec3 rotate(vec3 v, vec3 axis, float angle) { 30 | mat4 m = rotationMatrix(axis, angle); 31 | return (m * vec4(v, 1.0)).xyz; 32 | } 33 | 34 | 35 | float easeOutQuint(float t){ 36 | return 1. + (--t) * t * t * t * t; 37 | } 38 | float easeOut(float t){ 39 | return t * t * t; 40 | } 41 | 42 | vec3 cubicBezier(vec3 p0, vec3 c0, vec3 c1, vec3 p1, float t) { 43 | float tn = 1.0 - t; 44 | 45 | return tn * tn * tn * p0 + 3.0 * tn * tn * t * c0 + 3.0 * tn * t * t * c1 + t * t * t * p1; 46 | } 47 | 48 | vec2 cubicBezier(vec2 p0, vec2 c0, vec2 c1, vec2 p1, float t) { 49 | float tn = 1.0 - t; 50 | 51 | return tn * tn * tn * p0 + 3.0 * tn * tn * t * c0 + 3.0 * tn * t * t * c1 + t * t * t * p1; 52 | } 53 | 54 | vec3 bezier4(vec3 a, vec3 b, vec3 c, vec3 d, float t) { 55 | return mix(mix(mix(a, b, t), mix(b, c, t), t), mix(mix(b, c, t), mix(c, d, t), t), t); 56 | } 57 | 58 | float easeInOutQuint(float t){ 59 | return t < 0.5 ? 16.0 * t * t * t * t * t : 1.0 + 16.0 * (--t) * t * t * t * t; 60 | } 61 | 62 | void main() { 63 | float PI = 3.141592653589793238; 64 | vUv = uv; 65 | vBary = bary; 66 | 67 | vec3 newpos = position; 68 | 69 | float o = 1. - offset; 70 | // float prog = clamp( (progress - o*0.999) /0.001,0.,1.); 71 | float prog = clamp( (progress - o*0.6) /0.4,0.,1.); 72 | vProgress = prog; 73 | vProgress1 = clamp( (progress - clamp(o - 0.2,-0.,1.)*0.6) /0.4,0.,1.); 74 | newpos = bezier4(newpos, control0, control1, newpos, easeOut(prog)); 75 | // newpos.z = abs(newpos.z); 76 | // prog = easeInOutQuint(prog); 77 | // newpos = rotate(newpos - centroid1, vec3(1.,0.,0.),-prog*PI) + centroid1 + vec3(0.,-1.,0.)*prog*0.; 78 | // newpos.y += prog*1.5*sin(PI*random); 79 | // newpos.x += prog*1.5*cos(PI*random); 80 | // newpos.x += sin(10.*offset)*prog; 81 | // newpos.y += 0.4*sin(time + offset); 82 | gl_Position = projectionMatrix * modelViewMatrix * vec4( newpos, 1.0 ); 83 | } -------------------------------------------------------------------------------- /js/demo3.js: -------------------------------------------------------------------------------- 1 | import Sketch from './app.js' 2 | import fragment from "./demo3/fragment.glsl"; 3 | import vertex from "./demo3/vertex.glsl"; 4 | 5 | const sketch = new Sketch({ 6 | dom: document.getElementById('container'), 7 | next: document.querySelector('.nav-next'), 8 | detail: 20, 9 | fragment: fragment, 10 | vertex: vertex, 11 | offsettop: 0.4, 12 | 13 | }); 14 | 15 | -------------------------------------------------------------------------------- /js/demo3/fragment.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | uniform sampler2D texture1; 4 | uniform vec4 resolution; 5 | varying vec2 vUv; 6 | varying float vProgress; 7 | varying float vProgress1; 8 | float PI = 3.141592653589793238; 9 | varying vec3 vBary; 10 | void main() { 11 | 12 | float width =2.5*vProgress1; 13 | vec3 d = fwidth(vBary); 14 | vec3 s = smoothstep(d * (width + 0.5), d * (width - 0.5), vBary); 15 | float alpha = max(max(s.x, s.y), s.z); 16 | vec3 color = vec3(alpha); 17 | 18 | 19 | vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5); 20 | vec4 t = texture2D(texture1,newUV); 21 | float opa = smoothstep(1.,0.5,vProgress); 22 | opa = 1. - vProgress; 23 | gl_FragColor = vec4(vUv,0.0,opa); 24 | // opa = smoothstep(0.5,1.,opa); 25 | gl_FragColor = vec4(t.rgb + 1.*color*vProgress1,opa); 26 | // gl_FragColor.rgb = mix(gl_FragColor.rgb,vec3(1.,0.,0.),1. - opa); 27 | // gl_FragColor = vec4(color,opa); 28 | } -------------------------------------------------------------------------------- /js/demo3/vertex.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | varying vec2 vUv; 4 | varying vec4 vPosition; 5 | varying float vProgress; 6 | varying float vProgress1; 7 | uniform vec2 pixels; 8 | 9 | attribute float offset; 10 | attribute float random; 11 | attribute vec3 centroid1; 12 | attribute vec3 control0; 13 | attribute vec3 control1; 14 | attribute vec3 bary; 15 | varying vec3 vBary; 16 | 17 | mat4 rotationMatrix(vec3 axis, float angle) { 18 | axis = normalize(axis); 19 | float s = sin(angle); 20 | float c = cos(angle); 21 | float oc = 1.0 - c; 22 | 23 | return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, 24 | oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, 25 | oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, 26 | 0.0, 0.0, 0.0, 1.0); 27 | } 28 | 29 | vec3 rotate(vec3 v, vec3 axis, float angle) { 30 | mat4 m = rotationMatrix(axis, angle); 31 | return (m * vec4(v, 1.0)).xyz; 32 | } 33 | 34 | 35 | float easeOutQuint(float t){ 36 | return 1. + (--t) * t * t * t * t; 37 | } 38 | float easeOut(float t){ 39 | return t * t * t; 40 | } 41 | 42 | vec3 cubicBezier(vec3 p0, vec3 c0, vec3 c1, vec3 p1, float t) { 43 | float tn = 1.0 - t; 44 | 45 | return tn * tn * tn * p0 + 3.0 * tn * tn * t * c0 + 3.0 * tn * t * t * c1 + t * t * t * p1; 46 | } 47 | 48 | vec2 cubicBezier(vec2 p0, vec2 c0, vec2 c1, vec2 p1, float t) { 49 | float tn = 1.0 - t; 50 | 51 | return tn * tn * tn * p0 + 3.0 * tn * tn * t * c0 + 3.0 * tn * t * t * c1 + t * t * t * p1; 52 | } 53 | 54 | vec3 bezier4(vec3 a, vec3 b, vec3 c, vec3 d, float t) { 55 | return mix(mix(mix(a, b, t), mix(b, c, t), t), mix(mix(b, c, t), mix(c, d, t), t), t); 56 | } 57 | 58 | float easeInOutQuint(float t){ 59 | return t < 0.5 ? 16.0 * t * t * t * t * t : 1.0 + 16.0 * (--t) * t * t * t * t; 60 | } 61 | 62 | void main() { 63 | float PI = 3.141592653589793238; 64 | vUv = uv; 65 | vBary = bary; 66 | 67 | vec3 newpos = position; 68 | 69 | float o = 1. - offset; 70 | // float prog = clamp( (progress - o*0.999) /0.001,0.,1.); 71 | float prog = clamp( (progress - o*0.6) /0.4,0.,1.); 72 | vProgress = prog; 73 | vProgress1 = clamp( (progress - clamp(o - 0.1,-0.,1.)*0.9) /0.1,0.,1.); 74 | // newpos = bezier4(newpos, control0, control1, newpos, easeInOutQuint(prog)); 75 | // newpos.z = abs(newpos.z); 76 | // prog = easeInOutQuint(prog); 77 | // newpos = rotate(newpos - centroid1, vec3(1.,0.,0.),-prog*PI) + centroid1 + vec3(0.,-1.,0.)*prog*0.; 78 | // newpos.y += prog*1.5*sin(PI*random); 79 | // newpos.x += prog*1.5*cos(PI*random); 80 | // newpos.x += sin(10.*offset)*prog; 81 | // newpos.y += 0.4*sin(time + offset); 82 | gl_Position = projectionMatrix * modelViewMatrix * vec4( newpos, 1.0 ); 83 | } -------------------------------------------------------------------------------- /js/demo4.js: -------------------------------------------------------------------------------- 1 | import Sketch from './app.js' 2 | import fragment from "./demo4/fragment.glsl"; 3 | import vertex from "./demo4/vertex.glsl"; 4 | 5 | const sketch = new Sketch({ 6 | dom: document.getElementById('container'), 7 | next: document.querySelector('.nav-next'), 8 | detail: 100, 9 | fragment: fragment, 10 | vertex: vertex, 11 | offsettop: .5, 12 | }); 13 | 14 | -------------------------------------------------------------------------------- /js/demo4/fragment.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | uniform sampler2D texture1; 4 | uniform vec4 resolution; 5 | varying vec2 vUv; 6 | varying float vProgress; 7 | varying float vProgress1; 8 | float PI = 3.141592653589793238; 9 | varying vec3 vBary; 10 | void main() { 11 | 12 | float width =2.5*vProgress1; 13 | vec3 d = fwidth(vBary); 14 | vec3 s = smoothstep(d * (width + 0.5), d * (width - 0.5), vBary); 15 | float alpha = max(max(s.x, s.y), s.z); 16 | vec3 color = vec3(alpha); 17 | 18 | 19 | vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5); 20 | vec4 t = texture2D(texture1,newUV); 21 | float opa = smoothstep(1.,0.5,vProgress); 22 | opa = 1. - vProgress; 23 | gl_FragColor = vec4(vUv,0.0,opa); 24 | opa = smoothstep(0.5,1.,opa); 25 | gl_FragColor = vec4(t.rgb + 1.*color*vProgress1,opa); 26 | // gl_FragColor.rgb = mix(gl_FragColor.rgb,vec3(1.,0.,0.),1. - opa); 27 | // gl_FragColor = vec4(color,opa); 28 | } -------------------------------------------------------------------------------- /js/demo4/vertex.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | varying vec2 vUv; 4 | varying vec4 vPosition; 5 | varying float vProgress; 6 | varying float vProgress1; 7 | uniform vec2 pixels; 8 | 9 | attribute float offset; 10 | attribute float random; 11 | attribute vec3 centroid1; 12 | attribute vec3 control0; 13 | attribute vec3 control1; 14 | attribute vec3 bary; 15 | varying vec3 vBary; 16 | 17 | mat4 rotationMatrix(vec3 axis, float angle) { 18 | axis = normalize(axis); 19 | float s = sin(angle); 20 | float c = cos(angle); 21 | float oc = 1.0 - c; 22 | 23 | return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, 24 | oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, 25 | oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, 26 | 0.0, 0.0, 0.0, 1.0); 27 | } 28 | 29 | vec3 rotate(vec3 v, vec3 axis, float angle) { 30 | mat4 m = rotationMatrix(axis, angle); 31 | return (m * vec4(v, 1.0)).xyz; 32 | } 33 | 34 | 35 | float easeOutQuint(float t){ 36 | return 1. + (--t) * t * t * t * t; 37 | } 38 | float easeOut(float t){ 39 | return t * t * t; 40 | } 41 | 42 | vec3 cubicBezier(vec3 p0, vec3 c0, vec3 c1, vec3 p1, float t) { 43 | float tn = 1.0 - t; 44 | 45 | return tn * tn * tn * p0 + 3.0 * tn * tn * t * c0 + 3.0 * tn * t * t * c1 + t * t * t * p1; 46 | } 47 | 48 | vec2 cubicBezier(vec2 p0, vec2 c0, vec2 c1, vec2 p1, float t) { 49 | float tn = 1.0 - t; 50 | 51 | return tn * tn * tn * p0 + 3.0 * tn * tn * t * c0 + 3.0 * tn * t * t * c1 + t * t * t * p1; 52 | } 53 | 54 | vec3 bezier4(vec3 a, vec3 b, vec3 c, vec3 d, float t) { 55 | return mix(mix(mix(a, b, t), mix(b, c, t), t), mix(mix(b, c, t), mix(c, d, t), t), t); 56 | } 57 | 58 | float easeInOutQuint(float t){ 59 | return t < 0.5 ? 16.0 * t * t * t * t * t : 1.0 + 16.0 * (--t) * t * t * t * t; 60 | } 61 | 62 | void main() { 63 | float PI = 3.141592653589793238; 64 | vUv = uv; 65 | vBary = bary; 66 | 67 | vec3 newpos = position; 68 | 69 | float o = 1. - offset; 70 | // float prog = clamp( (progress - o*0.999) /0.001,0.,1.); 71 | float prog = clamp( (progress - o*0.6) /0.4,0.,1.); 72 | vProgress = prog; 73 | vProgress1 = clamp( (progress - clamp(o - 0.2,-0.,1.)*0.6) /0.4,0.,1.); 74 | // newpos = bezier4(newpos, control0, control1, newpos, easeOut(prog)); 75 | // newpos.z = abs(newpos.z); 76 | // prog = easeInOutQuint(prog); 77 | newpos = rotate(newpos , vec3(0.,1.,0.),-prog*PI) + 0.*centroid1 + vec3(0.,-1.,0.)*prog*0.; 78 | // newpos.y += prog*1.5*sin(PI*random); 79 | // newpos.x += prog*1.5*cos(PI*random); 80 | // newpos.x += sin(10.*offset)*prog; 81 | // newpos.y += 0.4*sin(time + offset); 82 | gl_Position = projectionMatrix * modelViewMatrix * vec4( newpos, 1.0 ); 83 | } -------------------------------------------------------------------------------- /js/lib/getGeometry.js: -------------------------------------------------------------------------------- 1 | import * as THREE from "three"; 2 | let SimplexNoise = require('simplex-noise'), 3 | simplex = new SimplexNoise(Math.random); 4 | 5 | function clamp(a){ 6 | return Math.max(0,Math.min(1,a)); 7 | } 8 | export default function getGeometry(detail,offsettop){ 9 | offsettop = offsettop || 0; 10 | let geometry = new THREE.BufferGeometry(); 11 | let number = detail; 12 | let width = 2; 13 | let height = 2; 14 | 15 | let gran = width/number; 16 | let granH = gran*Math.sqrt(3)/2; 17 | let rows = height/granH; 18 | 19 | let offsets = [] 20 | let positions = []; 21 | let centroids = []; 22 | let control0 = []; 23 | let control1 = []; 24 | let randoms = []; 25 | let uvs = []; 26 | let currentShift = 0; 27 | let bary = []; 28 | let currentheight = 0; 29 | let numberOfTriangles = 0; 30 | let scale = 2; 31 | 32 | for (let j = 0; j < rows; j++) { 33 | currentheight = j*granH; 34 | if(j%2===1){ currentShift = -gran/2;} 35 | else{currentShift = 0;} 36 | for (let i = 0; i <= number; i++) { 37 | let sign = Math.sign(i*gran + currentShift - width/2) 38 | // sign =1 39 | // first triangle 40 | positions.push(i*gran + currentShift - width/2,currentheight - height/2,0); 41 | uvs.push((i*gran + currentShift)/width, (currentheight)/height) 42 | positions.push(i*gran + gran/2 + currentShift - width/2,granH + currentheight - height/2,0); 43 | uvs.push((i*gran + gran/2 + currentShift)/width, (granH + currentheight)/height) 44 | positions.push(i*gran - gran/2 + currentShift - width/2,granH + currentheight - height/2,0); 45 | uvs.push((i*gran - gran/2 + currentShift)/width, (granH + currentheight)/height) 46 | 47 | let simp = simplex.noise2D(i/rows, j/rows) + Math.random() 48 | let o = clamp(currentheight/height + 2*simp/detail); 49 | let r = Math.random() 50 | offsets.push(o,clamp(o + 0.1*offsettop),clamp(o + 0.1*offsettop)); 51 | randoms.push(r,r,r); 52 | let c = [i*gran + currentShift - width/2,currentheight - height/2,0]; 53 | centroids.push(...c,...c,...c) 54 | 55 | let ctrl0 = [ 56 | scale*sign*THREE.Math.randFloat(-.3, 0.3), 57 | -scale*THREE.Math.randFloat(-.3, 0.3) * 1.5, 58 | -THREE.Math.randFloatSpread(.5) 59 | ]; 60 | let ctrl1 = [ 61 | scale*sign*THREE.Math.randFloat(0.3, 0.6), 62 | -scale*THREE.Math.randFloat(0.3, 0.6) * 1.5, 63 | -THREE.Math.randFloatSpread(.5) 64 | ]; 65 | control0.push(...ctrl0,...ctrl0,...ctrl0) 66 | control1.push(...ctrl1,...ctrl1,...ctrl1) 67 | 68 | 69 | bary.push(0,0,1, 0,1,0, 1,0,0); 70 | // second triangle 71 | positions.push(i*gran + currentShift - width/2,currentheight - height/2,0); 72 | uvs.push((i*gran + currentShift)/width, (currentheight)/height) 73 | positions.push(i*gran + gran + currentShift - width/2,currentheight - height/2,0); 74 | uvs.push((i*gran + gran + currentShift)/width, (currentheight)/height) 75 | positions.push(i*gran + gran/2 + currentShift - width/2,granH + currentheight - height/2,0); 76 | uvs.push((i*gran + gran/2 + currentShift)/width, (granH + currentheight)/height) 77 | 78 | simp = simplex.noise2D((i+1)/rows, j/rows) + Math.random() 79 | let o1 = clamp(currentheight/height + 2*simp/detail); 80 | r = Math.random() 81 | offsets.push(o1,o1,clamp(o1 + 0.1*offsettop)); 82 | randoms.push(r,r,r); 83 | let c1 = [i*gran + currentShift - width/2,currentheight - height/2,0] 84 | 85 | control0.push(...ctrl0,...ctrl0,...ctrl0) 86 | control1.push(...ctrl1,...ctrl1,...ctrl1) 87 | 88 | centroids.push(...c1,...c1,...c1) 89 | bary.push(0,0,1, 0,1,0, 1,0,0); 90 | 91 | numberOfTriangles += 2; 92 | } 93 | } 94 | // console.log(control1,control0,centroids); 95 | geometry.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array(positions), 3 ) ); 96 | geometry.addAttribute( 'bary', new THREE.BufferAttribute( new Float32Array(bary), 3 ) ); 97 | geometry.addAttribute( 'uv', new THREE.BufferAttribute( new Float32Array(uvs), 2 ) ); 98 | geometry.addAttribute( 'offset', new THREE.BufferAttribute( new Float32Array(offsets), 1 ) ); 99 | geometry.addAttribute( 'centroid1', new THREE.BufferAttribute( new Float32Array(centroids), 3 ) ); 100 | geometry.addAttribute( 'control0', new THREE.BufferAttribute( new Float32Array(control0), 3 ) ); 101 | geometry.addAttribute( 'control1', new THREE.BufferAttribute( new Float32Array(control1), 3 ) ); 102 | geometry.addAttribute( 'random', new THREE.BufferAttribute( new Float32Array(randoms), 1 ) ); 103 | 104 | return geometry; 105 | } -------------------------------------------------------------------------------- /js/shader/fragment.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | uniform sampler2D texture1; 4 | uniform vec4 resolution; 5 | varying vec2 vUv; 6 | varying float vProgress; 7 | varying float vProgress1; 8 | float PI = 3.141592653589793238; 9 | varying vec3 vBary; 10 | void main() { 11 | 12 | float width =2.5*vProgress1; 13 | vec3 d = fwidth(vBary); 14 | vec3 s = smoothstep(d * (width + 0.5), d * (width - 0.5), vBary); 15 | float alpha = max(max(s.x, s.y), s.z); 16 | vec3 color = vec3(alpha); 17 | 18 | 19 | vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5); 20 | vec4 t = texture2D(texture1,newUV); 21 | float opa = smoothstep(1.,0.5,vProgress); 22 | opa = 1. - vProgress; 23 | gl_FragColor = vec4(vUv,0.0,opa); 24 | gl_FragColor = vec4(t.rgb + 0.*color*vProgress1,opa); 25 | gl_FragColor.rgb = mix(gl_FragColor.rgb,vec3(1.,0.,0.),1. - opa); 26 | // gl_FragColor = vec4(color,opa); 27 | } -------------------------------------------------------------------------------- /js/shader/vertex.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | varying vec2 vUv; 4 | varying vec4 vPosition; 5 | varying float vProgress; 6 | varying float vProgress1; 7 | uniform vec2 pixels; 8 | 9 | attribute float offset; 10 | attribute vec3 centroid1; 11 | attribute vec3 bary; 12 | varying vec3 vBary; 13 | 14 | mat4 rotationMatrix(vec3 axis, float angle) { 15 | axis = normalize(axis); 16 | float s = sin(angle); 17 | float c = cos(angle); 18 | float oc = 1.0 - c; 19 | 20 | return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, 21 | oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, 22 | oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, 23 | 0.0, 0.0, 0.0, 1.0); 24 | } 25 | 26 | vec3 rotate(vec3 v, vec3 axis, float angle) { 27 | mat4 m = rotationMatrix(axis, angle); 28 | return (m * vec4(v, 1.0)).xyz; 29 | } 30 | 31 | float easeInOutQuint(float t){ 32 | return t < 0.5 ? 16.0 * t * t * t * t * t : 1.0 + 16.0 * (--t) * t * t * t * t; 33 | } 34 | float easeOutQuint(float t){ 35 | return 1. + (--t) * t * t * t * t; 36 | } 37 | float easeOut(float t){ 38 | return t * t * t; 39 | } 40 | 41 | void main() { 42 | float PI = 3.141592653589793238; 43 | vUv = uv; 44 | vBary = bary; 45 | 46 | vec3 newpos = position; 47 | 48 | float o = 1. - offset; 49 | float prog = clamp( (progress - o*0.99) /0.01,0.,1.); 50 | vProgress = prog; 51 | vProgress1 = clamp( (progress - (o - 0.1)*0.9) /0.1,0.,1.); 52 | // prog = easeInOutQuint(prog); 53 | newpos = rotate(newpos - centroid1, vec3(1.,0.,0.),-prog*PI) + centroid1 + vec3(0.,-1.,0.)*prog*0.; 54 | // newpos.y += 0.4*sin(time + offset); 55 | gl_Position = projectionMatrix * modelViewMatrix * vec4( newpos, 1.0 ); 56 | } -------------------------------------------------------------------------------- /js/shader/vertex1.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | uniform float progress; 3 | varying vec2 vUv; 4 | varying vec4 vPosition; 5 | varying float vProgress; 6 | varying float vProgress1; 7 | uniform vec2 pixels; 8 | 9 | attribute float offset; 10 | attribute vec3 centroid1; 11 | attribute vec3 bary; 12 | varying vec3 vBary; 13 | 14 | mat4 rotationMatrix(vec3 axis, float angle) { 15 | axis = normalize(axis); 16 | float s = sin(angle); 17 | float c = cos(angle); 18 | float oc = 1.0 - c; 19 | 20 | return mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, 0.0, 21 | oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, 0.0, 22 | oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c, 0.0, 23 | 0.0, 0.0, 0.0, 1.0); 24 | } 25 | 26 | vec3 rotate(vec3 v, vec3 axis, float angle) { 27 | mat4 m = rotationMatrix(axis, angle); 28 | return (m * vec4(v, 1.0)).xyz; 29 | } 30 | 31 | float easeInOutQuint(float t){ 32 | return t < 0.5 ? 16.0 * t * t * t * t * t : 1.0 + 16.0 * (--t) * t * t * t * t; 33 | } 34 | float easeOutQuint(float t){ 35 | return 1. + (--t) * t * t * t * t; 36 | } 37 | float easeOut(float t){ 38 | return t * t * t; 39 | } 40 | 41 | void main() { 42 | float PI = 3.141592653589793238; 43 | vUv = uv; 44 | vBary = bary; 45 | 46 | vec3 newpos = position; 47 | 48 | float o = 1. - offset; 49 | float prog = clamp( (progress - o*0.999) /0.001,0.,1.); 50 | vProgress = prog; 51 | vProgress1 = clamp( (progress - (o - 0.1)*0.9) /0.1,0.,1.); 52 | // prog = easeInOutQuint(prog); 53 | // newpos = rotate(newpos - centroid1, vec3(1.,0.,0.),-prog*PI) + centroid1 + vec3(0.,-1.,0.)*prog*0.; 54 | newpos.y += prog*0.05; 55 | // newpos.x += sin(10.*offset)*prog; 56 | // newpos.y += 0.4*sin(time + offset); 57 | gl_Position = projectionMatrix * modelViewMatrix * vec4( newpos, 1.0 ); 58 | } -------------------------------------------------------------------------------- /js/shader/vertexParticles.glsl: -------------------------------------------------------------------------------- 1 | uniform float time; 2 | varying vec2 vUv; 3 | varying vec2 vUv1; 4 | varying vec4 vPosition; 5 | 6 | uniform sampler2D texture1; 7 | uniform sampler2D texture2; 8 | uniform vec2 pixels; 9 | uniform vec2 uvRate1; 10 | 11 | void main() { 12 | vUv = uv; 13 | vec4 mvPosition = modelViewMatrix * vec4( position, 1. ); 14 | gl_PointSize = 1000. * ( 1. / - mvPosition.z ); 15 | gl_Position = projectionMatrix * mvPosition; 16 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "@choojs/findup": { 6 | "version": "0.2.1", 7 | "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz", 8 | "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==", 9 | "dev": true, 10 | "requires": { 11 | "commander": "^2.15.1" 12 | } 13 | }, 14 | "@types/q": { 15 | "version": "1.5.4", 16 | "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", 17 | "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", 18 | "dev": true 19 | }, 20 | "alphanum-sort": { 21 | "version": "1.0.2", 22 | "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", 23 | "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", 24 | "dev": true 25 | }, 26 | "ansi-styles": { 27 | "version": "3.2.1", 28 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 29 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 30 | "dev": true, 31 | "requires": { 32 | "color-convert": "^1.9.0" 33 | } 34 | }, 35 | "argparse": { 36 | "version": "1.0.10", 37 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 38 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 39 | "dev": true, 40 | "requires": { 41 | "sprintf-js": "~1.0.2" 42 | } 43 | }, 44 | "boolbase": { 45 | "version": "1.0.0", 46 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 47 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", 48 | "dev": true 49 | }, 50 | "browserslist": { 51 | "version": "4.14.0", 52 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", 53 | "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", 54 | "dev": true, 55 | "requires": { 56 | "caniuse-lite": "^1.0.30001111", 57 | "electron-to-chromium": "^1.3.523", 58 | "escalade": "^3.0.2", 59 | "node-releases": "^1.1.60" 60 | } 61 | }, 62 | "caller-callsite": { 63 | "version": "2.0.0", 64 | "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", 65 | "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", 66 | "dev": true, 67 | "requires": { 68 | "callsites": "^2.0.0" 69 | } 70 | }, 71 | "caller-path": { 72 | "version": "2.0.0", 73 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", 74 | "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", 75 | "dev": true, 76 | "requires": { 77 | "caller-callsite": "^2.0.0" 78 | } 79 | }, 80 | "callsites": { 81 | "version": "2.0.0", 82 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", 83 | "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", 84 | "dev": true 85 | }, 86 | "caniuse-api": { 87 | "version": "3.0.0", 88 | "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", 89 | "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", 90 | "dev": true, 91 | "requires": { 92 | "browserslist": "^4.0.0", 93 | "caniuse-lite": "^1.0.0", 94 | "lodash.memoize": "^4.1.2", 95 | "lodash.uniq": "^4.5.0" 96 | } 97 | }, 98 | "caniuse-lite": { 99 | "version": "1.0.30001118", 100 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001118.tgz", 101 | "integrity": "sha512-RNKPLojZo74a0cP7jFMidQI7nvLER40HgNfgKQEJ2PFm225L0ectUungNQoK3Xk3StQcFbpBPNEvoWD59436Hg==", 102 | "dev": true 103 | }, 104 | "chalk": { 105 | "version": "2.4.2", 106 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 107 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 108 | "dev": true, 109 | "requires": { 110 | "ansi-styles": "^3.2.1", 111 | "escape-string-regexp": "^1.0.5", 112 | "supports-color": "^5.3.0" 113 | }, 114 | "dependencies": { 115 | "supports-color": { 116 | "version": "5.5.0", 117 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 118 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 119 | "dev": true, 120 | "requires": { 121 | "has-flag": "^3.0.0" 122 | } 123 | } 124 | } 125 | }, 126 | "coa": { 127 | "version": "2.0.2", 128 | "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", 129 | "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", 130 | "dev": true, 131 | "requires": { 132 | "@types/q": "^1.5.1", 133 | "chalk": "^2.4.1", 134 | "q": "^1.1.2" 135 | } 136 | }, 137 | "color": { 138 | "version": "3.1.2", 139 | "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", 140 | "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", 141 | "dev": true, 142 | "requires": { 143 | "color-convert": "^1.9.1", 144 | "color-string": "^1.5.2" 145 | } 146 | }, 147 | "color-convert": { 148 | "version": "1.9.3", 149 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 150 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 151 | "dev": true, 152 | "requires": { 153 | "color-name": "1.1.3" 154 | } 155 | }, 156 | "color-name": { 157 | "version": "1.1.3", 158 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 159 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 160 | "dev": true 161 | }, 162 | "color-string": { 163 | "version": "1.5.3", 164 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", 165 | "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", 166 | "dev": true, 167 | "requires": { 168 | "color-name": "^1.0.0", 169 | "simple-swizzle": "^0.2.2" 170 | } 171 | }, 172 | "commander": { 173 | "version": "2.20.3", 174 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 175 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 176 | "dev": true 177 | }, 178 | "core-util-is": { 179 | "version": "1.0.2", 180 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 181 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 182 | "dev": true 183 | }, 184 | "cosmiconfig": { 185 | "version": "5.2.1", 186 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", 187 | "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", 188 | "dev": true, 189 | "requires": { 190 | "import-fresh": "^2.0.0", 191 | "is-directory": "^0.3.1", 192 | "js-yaml": "^3.13.1", 193 | "parse-json": "^4.0.0" 194 | } 195 | }, 196 | "css-color-names": { 197 | "version": "0.0.4", 198 | "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", 199 | "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", 200 | "dev": true 201 | }, 202 | "css-declaration-sorter": { 203 | "version": "4.0.1", 204 | "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", 205 | "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", 206 | "dev": true, 207 | "requires": { 208 | "postcss": "^7.0.1", 209 | "timsort": "^0.3.0" 210 | } 211 | }, 212 | "css-select": { 213 | "version": "2.1.0", 214 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", 215 | "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", 216 | "dev": true, 217 | "requires": { 218 | "boolbase": "^1.0.0", 219 | "css-what": "^3.2.1", 220 | "domutils": "^1.7.0", 221 | "nth-check": "^1.0.2" 222 | } 223 | }, 224 | "css-select-base-adapter": { 225 | "version": "0.1.1", 226 | "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", 227 | "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", 228 | "dev": true 229 | }, 230 | "css-tree": { 231 | "version": "1.0.0-alpha.37", 232 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", 233 | "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", 234 | "dev": true, 235 | "requires": { 236 | "mdn-data": "2.0.4", 237 | "source-map": "^0.6.1" 238 | } 239 | }, 240 | "css-what": { 241 | "version": "3.3.0", 242 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", 243 | "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", 244 | "dev": true 245 | }, 246 | "cssesc": { 247 | "version": "3.0.0", 248 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 249 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 250 | "dev": true 251 | }, 252 | "cssnano": { 253 | "version": "4.1.10", 254 | "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", 255 | "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", 256 | "dev": true, 257 | "requires": { 258 | "cosmiconfig": "^5.0.0", 259 | "cssnano-preset-default": "^4.0.7", 260 | "is-resolvable": "^1.0.0", 261 | "postcss": "^7.0.0" 262 | } 263 | }, 264 | "cssnano-preset-default": { 265 | "version": "4.0.7", 266 | "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", 267 | "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", 268 | "dev": true, 269 | "requires": { 270 | "css-declaration-sorter": "^4.0.1", 271 | "cssnano-util-raw-cache": "^4.0.1", 272 | "postcss": "^7.0.0", 273 | "postcss-calc": "^7.0.1", 274 | "postcss-colormin": "^4.0.3", 275 | "postcss-convert-values": "^4.0.1", 276 | "postcss-discard-comments": "^4.0.2", 277 | "postcss-discard-duplicates": "^4.0.2", 278 | "postcss-discard-empty": "^4.0.1", 279 | "postcss-discard-overridden": "^4.0.1", 280 | "postcss-merge-longhand": "^4.0.11", 281 | "postcss-merge-rules": "^4.0.3", 282 | "postcss-minify-font-values": "^4.0.2", 283 | "postcss-minify-gradients": "^4.0.2", 284 | "postcss-minify-params": "^4.0.2", 285 | "postcss-minify-selectors": "^4.0.2", 286 | "postcss-normalize-charset": "^4.0.1", 287 | "postcss-normalize-display-values": "^4.0.2", 288 | "postcss-normalize-positions": "^4.0.2", 289 | "postcss-normalize-repeat-style": "^4.0.2", 290 | "postcss-normalize-string": "^4.0.2", 291 | "postcss-normalize-timing-functions": "^4.0.2", 292 | "postcss-normalize-unicode": "^4.0.1", 293 | "postcss-normalize-url": "^4.0.1", 294 | "postcss-normalize-whitespace": "^4.0.2", 295 | "postcss-ordered-values": "^4.1.2", 296 | "postcss-reduce-initial": "^4.0.3", 297 | "postcss-reduce-transforms": "^4.0.2", 298 | "postcss-svgo": "^4.0.2", 299 | "postcss-unique-selectors": "^4.0.1" 300 | } 301 | }, 302 | "cssnano-util-get-arguments": { 303 | "version": "4.0.0", 304 | "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", 305 | "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", 306 | "dev": true 307 | }, 308 | "cssnano-util-get-match": { 309 | "version": "4.0.0", 310 | "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", 311 | "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", 312 | "dev": true 313 | }, 314 | "cssnano-util-raw-cache": { 315 | "version": "4.0.1", 316 | "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", 317 | "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", 318 | "dev": true, 319 | "requires": { 320 | "postcss": "^7.0.0" 321 | } 322 | }, 323 | "cssnano-util-same-parent": { 324 | "version": "4.0.1", 325 | "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", 326 | "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", 327 | "dev": true 328 | }, 329 | "csso": { 330 | "version": "4.0.3", 331 | "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", 332 | "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", 333 | "dev": true, 334 | "requires": { 335 | "css-tree": "1.0.0-alpha.39" 336 | }, 337 | "dependencies": { 338 | "css-tree": { 339 | "version": "1.0.0-alpha.39", 340 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", 341 | "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", 342 | "dev": true, 343 | "requires": { 344 | "mdn-data": "2.0.6", 345 | "source-map": "^0.6.1" 346 | } 347 | }, 348 | "mdn-data": { 349 | "version": "2.0.6", 350 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", 351 | "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", 352 | "dev": true 353 | } 354 | } 355 | }, 356 | "dat.gui": { 357 | "version": "0.7.7", 358 | "resolved": "https://registry.npmjs.org/dat.gui/-/dat.gui-0.7.7.tgz", 359 | "integrity": "sha512-sRl/28gF/XRC5ywC9I4zriATTsQcpSsRG7seXCPnTkK8/EQMIbCu5NPMpICLGxX9ZEUvcXR3ArLYCtgreFoMDw==" 360 | }, 361 | "define-properties": { 362 | "version": "1.1.3", 363 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 364 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 365 | "dev": true, 366 | "requires": { 367 | "object-keys": "^1.0.12" 368 | } 369 | }, 370 | "dom-serializer": { 371 | "version": "0.2.2", 372 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", 373 | "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", 374 | "dev": true, 375 | "requires": { 376 | "domelementtype": "^2.0.1", 377 | "entities": "^2.0.0" 378 | }, 379 | "dependencies": { 380 | "domelementtype": { 381 | "version": "2.0.1", 382 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", 383 | "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", 384 | "dev": true 385 | } 386 | } 387 | }, 388 | "domelementtype": { 389 | "version": "1.3.1", 390 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 391 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", 392 | "dev": true 393 | }, 394 | "domutils": { 395 | "version": "1.7.0", 396 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", 397 | "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", 398 | "dev": true, 399 | "requires": { 400 | "dom-serializer": "0", 401 | "domelementtype": "1" 402 | } 403 | }, 404 | "dot-prop": { 405 | "version": "5.2.0", 406 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", 407 | "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", 408 | "dev": true, 409 | "requires": { 410 | "is-obj": "^2.0.0" 411 | } 412 | }, 413 | "electron-to-chromium": { 414 | "version": "1.3.550", 415 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.550.tgz", 416 | "integrity": "sha512-MWDHoJsSieBaJ6mObvi3V0eKZufR1iMJl56VIGdXCgFHyCUbVDGm2IMXUNjDxgbGbKa3tA5+zJmHuBQqRxGiLA==", 417 | "dev": true 418 | }, 419 | "entities": { 420 | "version": "2.0.3", 421 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", 422 | "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", 423 | "dev": true 424 | }, 425 | "error-ex": { 426 | "version": "1.3.2", 427 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 428 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 429 | "dev": true, 430 | "requires": { 431 | "is-arrayish": "^0.2.1" 432 | } 433 | }, 434 | "es-abstract": { 435 | "version": "1.17.6", 436 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", 437 | "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", 438 | "dev": true, 439 | "requires": { 440 | "es-to-primitive": "^1.2.1", 441 | "function-bind": "^1.1.1", 442 | "has": "^1.0.3", 443 | "has-symbols": "^1.0.1", 444 | "is-callable": "^1.2.0", 445 | "is-regex": "^1.1.0", 446 | "object-inspect": "^1.7.0", 447 | "object-keys": "^1.1.1", 448 | "object.assign": "^4.1.0", 449 | "string.prototype.trimend": "^1.0.1", 450 | "string.prototype.trimstart": "^1.0.1" 451 | } 452 | }, 453 | "es-to-primitive": { 454 | "version": "1.2.1", 455 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 456 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 457 | "dev": true, 458 | "requires": { 459 | "is-callable": "^1.1.4", 460 | "is-date-object": "^1.0.1", 461 | "is-symbol": "^1.0.2" 462 | } 463 | }, 464 | "escalade": { 465 | "version": "3.0.2", 466 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", 467 | "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", 468 | "dev": true 469 | }, 470 | "escape-string-regexp": { 471 | "version": "1.0.5", 472 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 473 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 474 | "dev": true 475 | }, 476 | "esprima": { 477 | "version": "4.0.1", 478 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 479 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 480 | "dev": true 481 | }, 482 | "events": { 483 | "version": "1.1.1", 484 | "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 485 | "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", 486 | "dev": true 487 | }, 488 | "function-bind": { 489 | "version": "1.1.1", 490 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 491 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 492 | "dev": true 493 | }, 494 | "glsl-inject-defines": { 495 | "version": "1.0.3", 496 | "resolved": "https://registry.npmjs.org/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz", 497 | "integrity": "sha1-3RqswsF/yyvT/DJBHGYz0Ne2D9Q=", 498 | "dev": true, 499 | "requires": { 500 | "glsl-token-inject-block": "^1.0.0", 501 | "glsl-token-string": "^1.0.1", 502 | "glsl-tokenizer": "^2.0.2" 503 | } 504 | }, 505 | "glsl-resolve": { 506 | "version": "0.0.1", 507 | "resolved": "https://registry.npmjs.org/glsl-resolve/-/glsl-resolve-0.0.1.tgz", 508 | "integrity": "sha1-iUvvc5ENeSyBtRQxgANdCnivdtM=", 509 | "dev": true, 510 | "requires": { 511 | "resolve": "^0.6.1", 512 | "xtend": "^2.1.2" 513 | }, 514 | "dependencies": { 515 | "resolve": { 516 | "version": "0.6.3", 517 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", 518 | "integrity": "sha1-3ZV5gufnNt699TtYpN2RdUV13UY=", 519 | "dev": true 520 | } 521 | } 522 | }, 523 | "glsl-token-assignments": { 524 | "version": "2.0.2", 525 | "resolved": "https://registry.npmjs.org/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz", 526 | "integrity": "sha1-pdgqt4SZwuimuDy2lJXm5mXOAZ8=", 527 | "dev": true 528 | }, 529 | "glsl-token-defines": { 530 | "version": "1.0.0", 531 | "resolved": "https://registry.npmjs.org/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz", 532 | "integrity": "sha1-y4kqqVmTYjFyhHDU90AySJaX+p0=", 533 | "dev": true, 534 | "requires": { 535 | "glsl-tokenizer": "^2.0.0" 536 | } 537 | }, 538 | "glsl-token-depth": { 539 | "version": "1.1.2", 540 | "resolved": "https://registry.npmjs.org/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz", 541 | "integrity": "sha1-I8XjDuK9JViEtKKLyFC495HpXYQ=", 542 | "dev": true 543 | }, 544 | "glsl-token-descope": { 545 | "version": "1.0.2", 546 | "resolved": "https://registry.npmjs.org/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz", 547 | "integrity": "sha1-D8kKsyYYa4L1l7LnfcniHvzTIHY=", 548 | "dev": true, 549 | "requires": { 550 | "glsl-token-assignments": "^2.0.0", 551 | "glsl-token-depth": "^1.1.0", 552 | "glsl-token-properties": "^1.0.0", 553 | "glsl-token-scope": "^1.1.0" 554 | } 555 | }, 556 | "glsl-token-inject-block": { 557 | "version": "1.1.0", 558 | "resolved": "https://registry.npmjs.org/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz", 559 | "integrity": "sha1-4QFfWYDBCRgkraomJfHf3ovQADQ=", 560 | "dev": true 561 | }, 562 | "glsl-token-properties": { 563 | "version": "1.0.1", 564 | "resolved": "https://registry.npmjs.org/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz", 565 | "integrity": "sha1-SD3D2Dnw1LXGFx0VkfJJvlPCip4=", 566 | "dev": true 567 | }, 568 | "glsl-token-scope": { 569 | "version": "1.1.2", 570 | "resolved": "https://registry.npmjs.org/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz", 571 | "integrity": "sha1-oXKOeN8kRE+cuT/RjvD3VQOmQ7E=", 572 | "dev": true 573 | }, 574 | "glsl-token-string": { 575 | "version": "1.0.1", 576 | "resolved": "https://registry.npmjs.org/glsl-token-string/-/glsl-token-string-1.0.1.tgz", 577 | "integrity": "sha1-WUQdL4V958NEnJRWZgIezjWOSOw=", 578 | "dev": true 579 | }, 580 | "glsl-token-whitespace-trim": { 581 | "version": "1.0.0", 582 | "resolved": "https://registry.npmjs.org/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz", 583 | "integrity": "sha1-RtHf6Yx1vX1QTAXX0RsbPpzJOxA=", 584 | "dev": true 585 | }, 586 | "glsl-tokenizer": { 587 | "version": "2.1.5", 588 | "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", 589 | "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", 590 | "dev": true, 591 | "requires": { 592 | "through2": "^0.6.3" 593 | } 594 | }, 595 | "glslify-bundle": { 596 | "version": "5.1.1", 597 | "resolved": "https://registry.npmjs.org/glslify-bundle/-/glslify-bundle-5.1.1.tgz", 598 | "integrity": "sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==", 599 | "dev": true, 600 | "requires": { 601 | "glsl-inject-defines": "^1.0.1", 602 | "glsl-token-defines": "^1.0.0", 603 | "glsl-token-depth": "^1.1.1", 604 | "glsl-token-descope": "^1.0.2", 605 | "glsl-token-scope": "^1.1.1", 606 | "glsl-token-string": "^1.0.1", 607 | "glsl-token-whitespace-trim": "^1.0.0", 608 | "glsl-tokenizer": "^2.0.2", 609 | "murmurhash-js": "^1.0.0", 610 | "shallow-copy": "0.0.1" 611 | } 612 | }, 613 | "glslify-deps": { 614 | "version": "1.3.1", 615 | "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.1.tgz", 616 | "integrity": "sha512-Ogm179MCazwIRyEqs3g3EOY4Y3XIAa0yl8J5RE9rJC6QH1w8weVOp2RZu0mvnYy/2xIas1w166YR2eZdDkWQxg==", 617 | "dev": true, 618 | "requires": { 619 | "@choojs/findup": "^0.2.0", 620 | "events": "^1.0.2", 621 | "glsl-resolve": "0.0.1", 622 | "glsl-tokenizer": "^2.0.0", 623 | "graceful-fs": "^4.1.2", 624 | "inherits": "^2.0.1", 625 | "map-limit": "0.0.1", 626 | "resolve": "^1.0.0" 627 | } 628 | }, 629 | "graceful-fs": { 630 | "version": "4.2.4", 631 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 632 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", 633 | "dev": true 634 | }, 635 | "gsap": { 636 | "version": "3.5.0", 637 | "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.5.0.tgz", 638 | "integrity": "sha512-YewxuqAE0HjytsKFRUnjiUz0TatHR6L1aJjalYob1ajQpWCZz+gTRJOgQWiABfTEcA6YpgUcrWLEvEIM1Fftpg==" 639 | }, 640 | "has": { 641 | "version": "1.0.3", 642 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 643 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 644 | "dev": true, 645 | "requires": { 646 | "function-bind": "^1.1.1" 647 | } 648 | }, 649 | "has-flag": { 650 | "version": "3.0.0", 651 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 652 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 653 | "dev": true 654 | }, 655 | "has-symbols": { 656 | "version": "1.0.1", 657 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 658 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 659 | "dev": true 660 | }, 661 | "hex-color-regex": { 662 | "version": "1.1.0", 663 | "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", 664 | "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", 665 | "dev": true 666 | }, 667 | "hsl-regex": { 668 | "version": "1.0.0", 669 | "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", 670 | "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", 671 | "dev": true 672 | }, 673 | "hsla-regex": { 674 | "version": "1.0.0", 675 | "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", 676 | "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", 677 | "dev": true 678 | }, 679 | "html-comment-regex": { 680 | "version": "1.1.2", 681 | "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", 682 | "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", 683 | "dev": true 684 | }, 685 | "import-fresh": { 686 | "version": "2.0.0", 687 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", 688 | "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", 689 | "dev": true, 690 | "requires": { 691 | "caller-path": "^2.0.0", 692 | "resolve-from": "^3.0.0" 693 | } 694 | }, 695 | "indexes-of": { 696 | "version": "1.0.1", 697 | "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", 698 | "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", 699 | "dev": true 700 | }, 701 | "inherits": { 702 | "version": "2.0.4", 703 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 704 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 705 | "dev": true 706 | }, 707 | "is-absolute-url": { 708 | "version": "2.1.0", 709 | "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", 710 | "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", 711 | "dev": true 712 | }, 713 | "is-arrayish": { 714 | "version": "0.2.1", 715 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 716 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 717 | "dev": true 718 | }, 719 | "is-callable": { 720 | "version": "1.2.0", 721 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", 722 | "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", 723 | "dev": true 724 | }, 725 | "is-color-stop": { 726 | "version": "1.1.0", 727 | "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", 728 | "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", 729 | "dev": true, 730 | "requires": { 731 | "css-color-names": "^0.0.4", 732 | "hex-color-regex": "^1.1.0", 733 | "hsl-regex": "^1.0.0", 734 | "hsla-regex": "^1.0.0", 735 | "rgb-regex": "^1.0.1", 736 | "rgba-regex": "^1.0.0" 737 | } 738 | }, 739 | "is-date-object": { 740 | "version": "1.0.2", 741 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 742 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 743 | "dev": true 744 | }, 745 | "is-directory": { 746 | "version": "0.3.1", 747 | "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", 748 | "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", 749 | "dev": true 750 | }, 751 | "is-obj": { 752 | "version": "2.0.0", 753 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 754 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", 755 | "dev": true 756 | }, 757 | "is-regex": { 758 | "version": "1.1.1", 759 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", 760 | "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", 761 | "dev": true, 762 | "requires": { 763 | "has-symbols": "^1.0.1" 764 | } 765 | }, 766 | "is-resolvable": { 767 | "version": "1.1.0", 768 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", 769 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", 770 | "dev": true 771 | }, 772 | "is-svg": { 773 | "version": "3.0.0", 774 | "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", 775 | "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", 776 | "dev": true, 777 | "requires": { 778 | "html-comment-regex": "^1.1.0" 779 | } 780 | }, 781 | "is-symbol": { 782 | "version": "1.0.3", 783 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 784 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 785 | "dev": true, 786 | "requires": { 787 | "has-symbols": "^1.0.1" 788 | } 789 | }, 790 | "isarray": { 791 | "version": "0.0.1", 792 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 793 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 794 | "dev": true 795 | }, 796 | "js-yaml": { 797 | "version": "3.14.0", 798 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", 799 | "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", 800 | "dev": true, 801 | "requires": { 802 | "argparse": "^1.0.7", 803 | "esprima": "^4.0.0" 804 | } 805 | }, 806 | "json-parse-better-errors": { 807 | "version": "1.0.2", 808 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 809 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", 810 | "dev": true 811 | }, 812 | "lodash.memoize": { 813 | "version": "4.1.2", 814 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", 815 | "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", 816 | "dev": true 817 | }, 818 | "lodash.uniq": { 819 | "version": "4.5.0", 820 | "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", 821 | "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", 822 | "dev": true 823 | }, 824 | "map-limit": { 825 | "version": "0.0.1", 826 | "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", 827 | "integrity": "sha1-63lhAxwPDo0AG/LVb6toXViCLzg=", 828 | "dev": true, 829 | "requires": { 830 | "once": "~1.3.0" 831 | } 832 | }, 833 | "mdn-data": { 834 | "version": "2.0.4", 835 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", 836 | "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", 837 | "dev": true 838 | }, 839 | "minimist": { 840 | "version": "1.2.5", 841 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 842 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 843 | "dev": true 844 | }, 845 | "mkdirp": { 846 | "version": "0.5.5", 847 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 848 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 849 | "dev": true, 850 | "requires": { 851 | "minimist": "^1.2.5" 852 | } 853 | }, 854 | "murmurhash-js": { 855 | "version": "1.0.0", 856 | "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", 857 | "integrity": "sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E=", 858 | "dev": true 859 | }, 860 | "node-releases": { 861 | "version": "1.1.60", 862 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", 863 | "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", 864 | "dev": true 865 | }, 866 | "normalize-url": { 867 | "version": "3.3.0", 868 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", 869 | "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", 870 | "dev": true 871 | }, 872 | "nth-check": { 873 | "version": "1.0.2", 874 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", 875 | "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", 876 | "dev": true, 877 | "requires": { 878 | "boolbase": "~1.0.0" 879 | } 880 | }, 881 | "object-inspect": { 882 | "version": "1.8.0", 883 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", 884 | "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", 885 | "dev": true 886 | }, 887 | "object-keys": { 888 | "version": "1.1.1", 889 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 890 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 891 | "dev": true 892 | }, 893 | "object.assign": { 894 | "version": "4.1.0", 895 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 896 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 897 | "dev": true, 898 | "requires": { 899 | "define-properties": "^1.1.2", 900 | "function-bind": "^1.1.1", 901 | "has-symbols": "^1.0.0", 902 | "object-keys": "^1.0.11" 903 | } 904 | }, 905 | "object.getownpropertydescriptors": { 906 | "version": "2.1.0", 907 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", 908 | "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", 909 | "dev": true, 910 | "requires": { 911 | "define-properties": "^1.1.3", 912 | "es-abstract": "^1.17.0-next.1" 913 | } 914 | }, 915 | "object.values": { 916 | "version": "1.1.1", 917 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", 918 | "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", 919 | "dev": true, 920 | "requires": { 921 | "define-properties": "^1.1.3", 922 | "es-abstract": "^1.17.0-next.1", 923 | "function-bind": "^1.1.1", 924 | "has": "^1.0.3" 925 | } 926 | }, 927 | "once": { 928 | "version": "1.3.3", 929 | "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 930 | "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", 931 | "dev": true, 932 | "requires": { 933 | "wrappy": "1" 934 | } 935 | }, 936 | "parse-json": { 937 | "version": "4.0.0", 938 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", 939 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", 940 | "dev": true, 941 | "requires": { 942 | "error-ex": "^1.3.1", 943 | "json-parse-better-errors": "^1.0.1" 944 | } 945 | }, 946 | "path-parse": { 947 | "version": "1.0.6", 948 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 949 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 950 | "dev": true 951 | }, 952 | "postcss": { 953 | "version": "7.0.32", 954 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", 955 | "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", 956 | "dev": true, 957 | "requires": { 958 | "chalk": "^2.4.2", 959 | "source-map": "^0.6.1", 960 | "supports-color": "^6.1.0" 961 | } 962 | }, 963 | "postcss-calc": { 964 | "version": "7.0.3", 965 | "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.3.tgz", 966 | "integrity": "sha512-IB/EAEmZhIMEIhG7Ov4x+l47UaXOS1n2f4FBUk/aKllQhtSCxWhTzn0nJgkqN7fo/jcWySvWTSB6Syk9L+31bA==", 967 | "dev": true, 968 | "requires": { 969 | "postcss": "^7.0.27", 970 | "postcss-selector-parser": "^6.0.2", 971 | "postcss-value-parser": "^4.0.2" 972 | } 973 | }, 974 | "postcss-colormin": { 975 | "version": "4.0.3", 976 | "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", 977 | "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", 978 | "dev": true, 979 | "requires": { 980 | "browserslist": "^4.0.0", 981 | "color": "^3.0.0", 982 | "has": "^1.0.0", 983 | "postcss": "^7.0.0", 984 | "postcss-value-parser": "^3.0.0" 985 | }, 986 | "dependencies": { 987 | "postcss-value-parser": { 988 | "version": "3.3.1", 989 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 990 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 991 | "dev": true 992 | } 993 | } 994 | }, 995 | "postcss-convert-values": { 996 | "version": "4.0.1", 997 | "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", 998 | "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", 999 | "dev": true, 1000 | "requires": { 1001 | "postcss": "^7.0.0", 1002 | "postcss-value-parser": "^3.0.0" 1003 | }, 1004 | "dependencies": { 1005 | "postcss-value-parser": { 1006 | "version": "3.3.1", 1007 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1008 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1009 | "dev": true 1010 | } 1011 | } 1012 | }, 1013 | "postcss-discard-comments": { 1014 | "version": "4.0.2", 1015 | "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", 1016 | "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", 1017 | "dev": true, 1018 | "requires": { 1019 | "postcss": "^7.0.0" 1020 | } 1021 | }, 1022 | "postcss-discard-duplicates": { 1023 | "version": "4.0.2", 1024 | "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", 1025 | "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", 1026 | "dev": true, 1027 | "requires": { 1028 | "postcss": "^7.0.0" 1029 | } 1030 | }, 1031 | "postcss-discard-empty": { 1032 | "version": "4.0.1", 1033 | "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", 1034 | "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", 1035 | "dev": true, 1036 | "requires": { 1037 | "postcss": "^7.0.0" 1038 | } 1039 | }, 1040 | "postcss-discard-overridden": { 1041 | "version": "4.0.1", 1042 | "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", 1043 | "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", 1044 | "dev": true, 1045 | "requires": { 1046 | "postcss": "^7.0.0" 1047 | } 1048 | }, 1049 | "postcss-merge-longhand": { 1050 | "version": "4.0.11", 1051 | "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", 1052 | "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", 1053 | "dev": true, 1054 | "requires": { 1055 | "css-color-names": "0.0.4", 1056 | "postcss": "^7.0.0", 1057 | "postcss-value-parser": "^3.0.0", 1058 | "stylehacks": "^4.0.0" 1059 | }, 1060 | "dependencies": { 1061 | "postcss-value-parser": { 1062 | "version": "3.3.1", 1063 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1064 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1065 | "dev": true 1066 | } 1067 | } 1068 | }, 1069 | "postcss-merge-rules": { 1070 | "version": "4.0.3", 1071 | "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", 1072 | "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", 1073 | "dev": true, 1074 | "requires": { 1075 | "browserslist": "^4.0.0", 1076 | "caniuse-api": "^3.0.0", 1077 | "cssnano-util-same-parent": "^4.0.0", 1078 | "postcss": "^7.0.0", 1079 | "postcss-selector-parser": "^3.0.0", 1080 | "vendors": "^1.0.0" 1081 | }, 1082 | "dependencies": { 1083 | "postcss-selector-parser": { 1084 | "version": "3.1.2", 1085 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", 1086 | "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", 1087 | "dev": true, 1088 | "requires": { 1089 | "dot-prop": "^5.2.0", 1090 | "indexes-of": "^1.0.1", 1091 | "uniq": "^1.0.1" 1092 | } 1093 | } 1094 | } 1095 | }, 1096 | "postcss-minify-font-values": { 1097 | "version": "4.0.2", 1098 | "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", 1099 | "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", 1100 | "dev": true, 1101 | "requires": { 1102 | "postcss": "^7.0.0", 1103 | "postcss-value-parser": "^3.0.0" 1104 | }, 1105 | "dependencies": { 1106 | "postcss-value-parser": { 1107 | "version": "3.3.1", 1108 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1109 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1110 | "dev": true 1111 | } 1112 | } 1113 | }, 1114 | "postcss-minify-gradients": { 1115 | "version": "4.0.2", 1116 | "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", 1117 | "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", 1118 | "dev": true, 1119 | "requires": { 1120 | "cssnano-util-get-arguments": "^4.0.0", 1121 | "is-color-stop": "^1.0.0", 1122 | "postcss": "^7.0.0", 1123 | "postcss-value-parser": "^3.0.0" 1124 | }, 1125 | "dependencies": { 1126 | "postcss-value-parser": { 1127 | "version": "3.3.1", 1128 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1129 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1130 | "dev": true 1131 | } 1132 | } 1133 | }, 1134 | "postcss-minify-params": { 1135 | "version": "4.0.2", 1136 | "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", 1137 | "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", 1138 | "dev": true, 1139 | "requires": { 1140 | "alphanum-sort": "^1.0.0", 1141 | "browserslist": "^4.0.0", 1142 | "cssnano-util-get-arguments": "^4.0.0", 1143 | "postcss": "^7.0.0", 1144 | "postcss-value-parser": "^3.0.0", 1145 | "uniqs": "^2.0.0" 1146 | }, 1147 | "dependencies": { 1148 | "postcss-value-parser": { 1149 | "version": "3.3.1", 1150 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1151 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1152 | "dev": true 1153 | } 1154 | } 1155 | }, 1156 | "postcss-minify-selectors": { 1157 | "version": "4.0.2", 1158 | "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", 1159 | "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", 1160 | "dev": true, 1161 | "requires": { 1162 | "alphanum-sort": "^1.0.0", 1163 | "has": "^1.0.0", 1164 | "postcss": "^7.0.0", 1165 | "postcss-selector-parser": "^3.0.0" 1166 | }, 1167 | "dependencies": { 1168 | "postcss-selector-parser": { 1169 | "version": "3.1.2", 1170 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", 1171 | "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", 1172 | "dev": true, 1173 | "requires": { 1174 | "dot-prop": "^5.2.0", 1175 | "indexes-of": "^1.0.1", 1176 | "uniq": "^1.0.1" 1177 | } 1178 | } 1179 | } 1180 | }, 1181 | "postcss-normalize-charset": { 1182 | "version": "4.0.1", 1183 | "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", 1184 | "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", 1185 | "dev": true, 1186 | "requires": { 1187 | "postcss": "^7.0.0" 1188 | } 1189 | }, 1190 | "postcss-normalize-display-values": { 1191 | "version": "4.0.2", 1192 | "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", 1193 | "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", 1194 | "dev": true, 1195 | "requires": { 1196 | "cssnano-util-get-match": "^4.0.0", 1197 | "postcss": "^7.0.0", 1198 | "postcss-value-parser": "^3.0.0" 1199 | }, 1200 | "dependencies": { 1201 | "postcss-value-parser": { 1202 | "version": "3.3.1", 1203 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1204 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1205 | "dev": true 1206 | } 1207 | } 1208 | }, 1209 | "postcss-normalize-positions": { 1210 | "version": "4.0.2", 1211 | "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", 1212 | "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", 1213 | "dev": true, 1214 | "requires": { 1215 | "cssnano-util-get-arguments": "^4.0.0", 1216 | "has": "^1.0.0", 1217 | "postcss": "^7.0.0", 1218 | "postcss-value-parser": "^3.0.0" 1219 | }, 1220 | "dependencies": { 1221 | "postcss-value-parser": { 1222 | "version": "3.3.1", 1223 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1224 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1225 | "dev": true 1226 | } 1227 | } 1228 | }, 1229 | "postcss-normalize-repeat-style": { 1230 | "version": "4.0.2", 1231 | "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", 1232 | "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", 1233 | "dev": true, 1234 | "requires": { 1235 | "cssnano-util-get-arguments": "^4.0.0", 1236 | "cssnano-util-get-match": "^4.0.0", 1237 | "postcss": "^7.0.0", 1238 | "postcss-value-parser": "^3.0.0" 1239 | }, 1240 | "dependencies": { 1241 | "postcss-value-parser": { 1242 | "version": "3.3.1", 1243 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1244 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1245 | "dev": true 1246 | } 1247 | } 1248 | }, 1249 | "postcss-normalize-string": { 1250 | "version": "4.0.2", 1251 | "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", 1252 | "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", 1253 | "dev": true, 1254 | "requires": { 1255 | "has": "^1.0.0", 1256 | "postcss": "^7.0.0", 1257 | "postcss-value-parser": "^3.0.0" 1258 | }, 1259 | "dependencies": { 1260 | "postcss-value-parser": { 1261 | "version": "3.3.1", 1262 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1263 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1264 | "dev": true 1265 | } 1266 | } 1267 | }, 1268 | "postcss-normalize-timing-functions": { 1269 | "version": "4.0.2", 1270 | "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", 1271 | "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", 1272 | "dev": true, 1273 | "requires": { 1274 | "cssnano-util-get-match": "^4.0.0", 1275 | "postcss": "^7.0.0", 1276 | "postcss-value-parser": "^3.0.0" 1277 | }, 1278 | "dependencies": { 1279 | "postcss-value-parser": { 1280 | "version": "3.3.1", 1281 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1282 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1283 | "dev": true 1284 | } 1285 | } 1286 | }, 1287 | "postcss-normalize-unicode": { 1288 | "version": "4.0.1", 1289 | "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", 1290 | "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", 1291 | "dev": true, 1292 | "requires": { 1293 | "browserslist": "^4.0.0", 1294 | "postcss": "^7.0.0", 1295 | "postcss-value-parser": "^3.0.0" 1296 | }, 1297 | "dependencies": { 1298 | "postcss-value-parser": { 1299 | "version": "3.3.1", 1300 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1301 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1302 | "dev": true 1303 | } 1304 | } 1305 | }, 1306 | "postcss-normalize-url": { 1307 | "version": "4.0.1", 1308 | "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", 1309 | "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", 1310 | "dev": true, 1311 | "requires": { 1312 | "is-absolute-url": "^2.0.0", 1313 | "normalize-url": "^3.0.0", 1314 | "postcss": "^7.0.0", 1315 | "postcss-value-parser": "^3.0.0" 1316 | }, 1317 | "dependencies": { 1318 | "postcss-value-parser": { 1319 | "version": "3.3.1", 1320 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1321 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1322 | "dev": true 1323 | } 1324 | } 1325 | }, 1326 | "postcss-normalize-whitespace": { 1327 | "version": "4.0.2", 1328 | "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", 1329 | "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", 1330 | "dev": true, 1331 | "requires": { 1332 | "postcss": "^7.0.0", 1333 | "postcss-value-parser": "^3.0.0" 1334 | }, 1335 | "dependencies": { 1336 | "postcss-value-parser": { 1337 | "version": "3.3.1", 1338 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1339 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1340 | "dev": true 1341 | } 1342 | } 1343 | }, 1344 | "postcss-ordered-values": { 1345 | "version": "4.1.2", 1346 | "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", 1347 | "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", 1348 | "dev": true, 1349 | "requires": { 1350 | "cssnano-util-get-arguments": "^4.0.0", 1351 | "postcss": "^7.0.0", 1352 | "postcss-value-parser": "^3.0.0" 1353 | }, 1354 | "dependencies": { 1355 | "postcss-value-parser": { 1356 | "version": "3.3.1", 1357 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1358 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1359 | "dev": true 1360 | } 1361 | } 1362 | }, 1363 | "postcss-reduce-initial": { 1364 | "version": "4.0.3", 1365 | "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", 1366 | "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", 1367 | "dev": true, 1368 | "requires": { 1369 | "browserslist": "^4.0.0", 1370 | "caniuse-api": "^3.0.0", 1371 | "has": "^1.0.0", 1372 | "postcss": "^7.0.0" 1373 | } 1374 | }, 1375 | "postcss-reduce-transforms": { 1376 | "version": "4.0.2", 1377 | "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", 1378 | "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", 1379 | "dev": true, 1380 | "requires": { 1381 | "cssnano-util-get-match": "^4.0.0", 1382 | "has": "^1.0.0", 1383 | "postcss": "^7.0.0", 1384 | "postcss-value-parser": "^3.0.0" 1385 | }, 1386 | "dependencies": { 1387 | "postcss-value-parser": { 1388 | "version": "3.3.1", 1389 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1390 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1391 | "dev": true 1392 | } 1393 | } 1394 | }, 1395 | "postcss-selector-parser": { 1396 | "version": "6.0.2", 1397 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", 1398 | "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", 1399 | "dev": true, 1400 | "requires": { 1401 | "cssesc": "^3.0.0", 1402 | "indexes-of": "^1.0.1", 1403 | "uniq": "^1.0.1" 1404 | } 1405 | }, 1406 | "postcss-svgo": { 1407 | "version": "4.0.2", 1408 | "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", 1409 | "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", 1410 | "dev": true, 1411 | "requires": { 1412 | "is-svg": "^3.0.0", 1413 | "postcss": "^7.0.0", 1414 | "postcss-value-parser": "^3.0.0", 1415 | "svgo": "^1.0.0" 1416 | }, 1417 | "dependencies": { 1418 | "postcss-value-parser": { 1419 | "version": "3.3.1", 1420 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", 1421 | "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", 1422 | "dev": true 1423 | } 1424 | } 1425 | }, 1426 | "postcss-unique-selectors": { 1427 | "version": "4.0.1", 1428 | "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", 1429 | "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", 1430 | "dev": true, 1431 | "requires": { 1432 | "alphanum-sort": "^1.0.0", 1433 | "postcss": "^7.0.0", 1434 | "uniqs": "^2.0.0" 1435 | } 1436 | }, 1437 | "postcss-value-parser": { 1438 | "version": "4.1.0", 1439 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", 1440 | "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", 1441 | "dev": true 1442 | }, 1443 | "q": { 1444 | "version": "1.5.1", 1445 | "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", 1446 | "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", 1447 | "dev": true 1448 | }, 1449 | "readable-stream": { 1450 | "version": "1.0.34", 1451 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 1452 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 1453 | "dev": true, 1454 | "requires": { 1455 | "core-util-is": "~1.0.0", 1456 | "inherits": "~2.0.1", 1457 | "isarray": "0.0.1", 1458 | "string_decoder": "~0.10.x" 1459 | } 1460 | }, 1461 | "resolve": { 1462 | "version": "1.17.0", 1463 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 1464 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 1465 | "dev": true, 1466 | "requires": { 1467 | "path-parse": "^1.0.6" 1468 | } 1469 | }, 1470 | "resolve-from": { 1471 | "version": "3.0.0", 1472 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", 1473 | "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", 1474 | "dev": true 1475 | }, 1476 | "rgb-regex": { 1477 | "version": "1.0.1", 1478 | "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", 1479 | "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", 1480 | "dev": true 1481 | }, 1482 | "rgba-regex": { 1483 | "version": "1.0.0", 1484 | "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", 1485 | "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", 1486 | "dev": true 1487 | }, 1488 | "sax": { 1489 | "version": "1.2.4", 1490 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1491 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 1492 | "dev": true 1493 | }, 1494 | "shallow-copy": { 1495 | "version": "0.0.1", 1496 | "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", 1497 | "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=", 1498 | "dev": true 1499 | }, 1500 | "simple-swizzle": { 1501 | "version": "0.2.2", 1502 | "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 1503 | "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", 1504 | "dev": true, 1505 | "requires": { 1506 | "is-arrayish": "^0.3.1" 1507 | }, 1508 | "dependencies": { 1509 | "is-arrayish": { 1510 | "version": "0.3.2", 1511 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", 1512 | "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", 1513 | "dev": true 1514 | } 1515 | } 1516 | }, 1517 | "simplex-noise": { 1518 | "version": "2.4.0", 1519 | "resolved": "https://registry.npmjs.org/simplex-noise/-/simplex-noise-2.4.0.tgz", 1520 | "integrity": "sha512-OjyDWm/QZjVbMrPxDVi9b2as+SeNn9EBXlrWVRlFW+TSyWMSXouDryXkQN0vf5YP+QZKobrmkvx1eQYPLtuqfw==" 1521 | }, 1522 | "source-map": { 1523 | "version": "0.6.1", 1524 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1525 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1526 | "dev": true 1527 | }, 1528 | "sprintf-js": { 1529 | "version": "1.0.3", 1530 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1531 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1532 | "dev": true 1533 | }, 1534 | "stable": { 1535 | "version": "0.1.8", 1536 | "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", 1537 | "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", 1538 | "dev": true 1539 | }, 1540 | "string.prototype.trimend": { 1541 | "version": "1.0.1", 1542 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", 1543 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", 1544 | "dev": true, 1545 | "requires": { 1546 | "define-properties": "^1.1.3", 1547 | "es-abstract": "^1.17.5" 1548 | } 1549 | }, 1550 | "string.prototype.trimstart": { 1551 | "version": "1.0.1", 1552 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", 1553 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", 1554 | "dev": true, 1555 | "requires": { 1556 | "define-properties": "^1.1.3", 1557 | "es-abstract": "^1.17.5" 1558 | } 1559 | }, 1560 | "string_decoder": { 1561 | "version": "0.10.31", 1562 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1563 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 1564 | "dev": true 1565 | }, 1566 | "stylehacks": { 1567 | "version": "4.0.3", 1568 | "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", 1569 | "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", 1570 | "dev": true, 1571 | "requires": { 1572 | "browserslist": "^4.0.0", 1573 | "postcss": "^7.0.0", 1574 | "postcss-selector-parser": "^3.0.0" 1575 | }, 1576 | "dependencies": { 1577 | "postcss-selector-parser": { 1578 | "version": "3.1.2", 1579 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", 1580 | "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", 1581 | "dev": true, 1582 | "requires": { 1583 | "dot-prop": "^5.2.0", 1584 | "indexes-of": "^1.0.1", 1585 | "uniq": "^1.0.1" 1586 | } 1587 | } 1588 | } 1589 | }, 1590 | "supports-color": { 1591 | "version": "6.1.0", 1592 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", 1593 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", 1594 | "dev": true, 1595 | "requires": { 1596 | "has-flag": "^3.0.0" 1597 | } 1598 | }, 1599 | "svgo": { 1600 | "version": "1.3.2", 1601 | "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", 1602 | "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", 1603 | "dev": true, 1604 | "requires": { 1605 | "chalk": "^2.4.1", 1606 | "coa": "^2.0.2", 1607 | "css-select": "^2.0.0", 1608 | "css-select-base-adapter": "^0.1.1", 1609 | "css-tree": "1.0.0-alpha.37", 1610 | "csso": "^4.0.2", 1611 | "js-yaml": "^3.13.1", 1612 | "mkdirp": "~0.5.1", 1613 | "object.values": "^1.1.0", 1614 | "sax": "~1.2.4", 1615 | "stable": "^0.1.8", 1616 | "unquote": "~1.1.1", 1617 | "util.promisify": "~1.0.0" 1618 | } 1619 | }, 1620 | "three": { 1621 | "version": "0.119.1", 1622 | "resolved": "https://registry.npmjs.org/three/-/three-0.119.1.tgz", 1623 | "integrity": "sha512-GHyh/RiUfQ5VTiWIVRRTANYoXc1PFB1y+jDVRTb649nif1uX1F06PT1TKU3k2+F/MN4UJ3PWvQB53fY2OqKqKw==" 1624 | }, 1625 | "three-orbit-controls": { 1626 | "version": "82.1.0", 1627 | "resolved": "https://registry.npmjs.org/three-orbit-controls/-/three-orbit-controls-82.1.0.tgz", 1628 | "integrity": "sha1-EafzPQog7OyY8Jizd4D2U3N0+rQ=" 1629 | }, 1630 | "through2": { 1631 | "version": "0.6.5", 1632 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 1633 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 1634 | "dev": true, 1635 | "requires": { 1636 | "readable-stream": ">=1.0.33-1 <1.1.0-0", 1637 | "xtend": ">=4.0.0 <4.1.0-0" 1638 | }, 1639 | "dependencies": { 1640 | "xtend": { 1641 | "version": "4.0.2", 1642 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1643 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1644 | "dev": true 1645 | } 1646 | } 1647 | }, 1648 | "timsort": { 1649 | "version": "0.3.0", 1650 | "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", 1651 | "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", 1652 | "dev": true 1653 | }, 1654 | "uniq": { 1655 | "version": "1.0.1", 1656 | "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", 1657 | "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", 1658 | "dev": true 1659 | }, 1660 | "uniqs": { 1661 | "version": "2.0.0", 1662 | "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", 1663 | "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", 1664 | "dev": true 1665 | }, 1666 | "unquote": { 1667 | "version": "1.1.1", 1668 | "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", 1669 | "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", 1670 | "dev": true 1671 | }, 1672 | "util.promisify": { 1673 | "version": "1.0.1", 1674 | "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", 1675 | "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", 1676 | "dev": true, 1677 | "requires": { 1678 | "define-properties": "^1.1.3", 1679 | "es-abstract": "^1.17.2", 1680 | "has-symbols": "^1.0.1", 1681 | "object.getownpropertydescriptors": "^2.1.0" 1682 | } 1683 | }, 1684 | "vendors": { 1685 | "version": "1.0.4", 1686 | "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", 1687 | "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", 1688 | "dev": true 1689 | }, 1690 | "wrappy": { 1691 | "version": "1.0.2", 1692 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1693 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1694 | "dev": true 1695 | }, 1696 | "xtend": { 1697 | "version": "2.2.0", 1698 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", 1699 | "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=", 1700 | "dev": true 1701 | } 1702 | } 1703 | } 1704 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "cssnano": "^4.1.10", 4 | "glslify-bundle": "^5.1.1", 5 | "glslify-deps": "^1.3.1" 6 | }, 7 | "dependencies": { 8 | "dat.gui": "^0.7.7", 9 | "gsap": "^3.5.0", 10 | "simplex-noise": "^2.4.0", 11 | "three": "^0.119.1", 12 | "three-orbit-controls": "^82.1.0" 13 | } 14 | } 15 | --------------------------------------------------------------------------------