├── .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 | 
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 |
--------------------------------------------------------------------------------