├── src
├── components
│ ├── jscode.js
│ ├── editor.vue
│ └── script.js
├── assets
│ └── logo.png
├── main.ts
├── env.d.ts
└── App.vue
├── .npmignore
├── lib
├── index.js
├── index.d.ts
└── Gradient.js
├── .prettierrc
├── .gitignore
├── .vscode
└── extensions.json
├── public
└── favicon.png
├── vite.config.ts
├── tsconfig.json
├── index.html
├── README.md
├── package.json
└── yarn.lock
/src/components/jscode.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | src
2 | .vscode
3 | public
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | export * from "./Gradient";
2 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "tabWidth": 2,
3 | "useTabs": false
4 | }
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | dist
4 | dist-ssr
5 | *.local
6 | .vscode
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["johnsoncodehk.volar"]
3 | }
4 |
--------------------------------------------------------------------------------
/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jordienr/whatamesh/HEAD/public/favicon.png
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jordienr/whatamesh/HEAD/src/assets/logo.png
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import { createApp } from 'vue'
2 | import App from './App.vue'
3 |
4 | createApp(App).mount('#app')
5 |
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import vue from '@vitejs/plugin-vue'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [vue()]
7 | })
8 |
--------------------------------------------------------------------------------
/src/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | declare module '*.vue' {
4 | import { DefineComponent } from 'vue'
5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
6 | const component: DefineComponent<{}, {}, any>
7 | export default component
8 | }
9 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "allowJs": true,
4 | "target": "esnext",
5 | "useDefineForClassFields": true,
6 | "module": "esnext",
7 | "moduleResolution": "node",
8 | "strict": true,
9 | "jsx": "preserve",
10 | "sourceMap": true,
11 | "resolveJsonModule": true,
12 | "esModuleInterop": true,
13 | "lib": ["esnext", "dom"]
14 | },
15 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
16 | }
17 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | whatamesh
9 |
10 |
11 |
12 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
11 |
28 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Whatamesh
2 |
3 | Easily create mesh gradients like Stripe.
4 |
5 | This project wouldn't be possible without stripe and https://kevinhufnagl.com/
6 |
7 | ## Live Demo
8 |
9 | [https://whatamesh.vercel.app/](https://whatamesh.vercel.app/)
10 |
11 | ## Getting started
12 |
13 | ### Creating your first gradient
14 |
15 | ```html
16 |
17 | ```
18 |
19 | ```js
20 | import { Gradient } from "whatamesh";
21 |
22 | const gradient = new Gradient();
23 | gradient.initGradient("#gradient-canvas");
24 | ```
25 |
26 | ```css
27 | #gradient-canvas {
28 | width: 100%;
29 | height: 100%;
30 | --gradient-color-1: #449ce4;
31 | --gradient-color-2: #2f8bc1;
32 | --gradient-color-3: #ccbeee;
33 | --gradient-color-4: #4c57f6;
34 | }
35 | ```
36 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "whatamesh",
3 | "version": "0.2.0",
4 | "main": "./lib/index.js",
5 | "types": "./lib/index.d.ts",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vue-tsc --noEmit && vite build",
9 | "serve": "vite preview"
10 | },
11 | "files": [
12 | "lib"
13 | ],
14 | "repository": {
15 | "type": "git",
16 | "url": "https://github.com/jordienr/whatamesh"
17 | },
18 | "devDependencies": {
19 | "vue": "^3.2.6",
20 | "sass": "^1.39.2",
21 | "@vitejs/plugin-vue": "^1.6.1",
22 | "@vue/compiler-sfc": "^3.2.6",
23 | "typescript": "^4.3.2",
24 | "vite": "^2.5.4",
25 | "vue-tsc": "^0.2.2",
26 | "vue3-clipboard": "^1.0.0"
27 | },
28 | "dependencies": {
29 | "color-schemes-generator": "^1.0.1"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/lib/index.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * @example
3 | * // Create your instance
4 | * const gradient = new Gradient()
5 | *
6 | * // Call `initGradient` with the selector to your canvas
7 | * gradient.initGradient('#gradient-canvas')
8 | * @link https://whatamesh.vercel.app/
9 | */
10 | class Gradient {
11 | /**
12 | * Creates an instance of Gradient.
13 | *
14 | * @memberof Gradient
15 | */
16 | constructor();
17 |
18 | /**
19 | * Pauses the gradient animation.
20 | *
21 | * @memberof Gradient
22 | */
23 | pause(): void;
24 |
25 | /**
26 | * Plays the gradient animation.
27 | *
28 | * @memberof Gradient
29 | */
30 | play(): void;
31 |
32 | /**
33 | * Initializes the gradient with the provided selector.
34 | *
35 | * @param {string} selector - The selector to your canvas.
36 | * @memberof Gradient
37 | */
38 | initGradient(selector: string): void;
39 |
40 | /**
41 | * Toggles the color at the specified index.
42 | *
43 | * @param {number} index - The index of the color to toggle.
44 | * @memberof Gradient
45 | */
46 | toggleColor(index: number): void;
47 |
48 | /**
49 | * Shows the legend for the gradient.
50 | *
51 | * @memberof Gradient
52 | */
53 | showGradientLegend(): void;
54 |
55 | /**
56 | * Hides the legend for the gradient.
57 | *
58 | * @memberof Gradient
59 | */
60 | hideGradientLegend(): void;
61 | }
62 |
63 | export { Gradient };
64 |
--------------------------------------------------------------------------------
/src/components/editor.vue:
--------------------------------------------------------------------------------
1 |
2 | whatamesh
3 |
4 |
5 |
6 |
12 |
15 |
16 |
38 |
39 |
40 |
Installation
41 |
42 | 1. Create a Gradient.js file somewhere in your project and
43 | add
44 |
48 | this
49 |
50 | inside
51 |
52 |
2. Add the following code to your project:
53 |
HTML
54 |
55 | {{ htmlCode }}
56 |
57 |
CSS
58 |
59 | {{ cssCode }}
60 |
61 |
JS
62 |
63 | import { Gradient } from './Gradient.js'
64 |
65 | // Create your instance
66 | const gradient = new Gradient()
67 |
68 | // Call `initGradient` with the selector to your canvas
69 | gradient.initGradient('#gradient-canvas')
70 |
72 |
73 |
74 |
88 |
89 |
90 |
195 |
196 |
303 |
--------------------------------------------------------------------------------
/src/components/script.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Stripe WebGl Gradient Animation
3 | * All Credits to Stripe.com
4 | * ScrollObserver functionality to disable animation when not scrolled into view has been disabled and
5 | * commented out for now.
6 | * https://kevinhufnagl.com
7 | */
8 |
9 | //Converting colors to proper format
10 | function normalizeColor(hexCode) {
11 | return [
12 | ((hexCode >> 16) & 255) / 255,
13 | ((hexCode >> 8) & 255) / 255,
14 | (255 & hexCode) / 255,
15 | ];
16 | }
17 | ["SCREEN", "LINEAR_LIGHT"].reduce(
18 | (hexCode, t, n) =>
19 | Object.assign(hexCode, {
20 | [t]: n,
21 | }),
22 | {}
23 | );
24 |
25 | //Essential functionality of WebGl
26 | //t = width
27 | //n = height
28 | class MiniGl {
29 | constructor(canvas, width, height, debug = false) {
30 | const _miniGl = this,
31 | debug_output =
32 | -1 !== document.location.search.toLowerCase().indexOf("debug=webgl");
33 | (_miniGl.canvas = canvas),
34 | (_miniGl.gl = _miniGl.canvas.getContext("webgl", {
35 | antialias: true,
36 | })),
37 | (_miniGl.meshes = []);
38 | const context = _miniGl.gl;
39 | width && height && this.setSize(width, height),
40 | _miniGl.lastDebugMsg,
41 | (_miniGl.debug =
42 | debug && debug_output
43 | ? function (e) {
44 | const t = new Date();
45 | t - _miniGl.lastDebugMsg > 1e3 && console.log("---"),
46 | console.log(
47 | t.toLocaleTimeString() +
48 | Array(Math.max(0, 32 - e.length)).join(" ") +
49 | e +
50 | ": ",
51 | ...Array.from(arguments).slice(1)
52 | ),
53 | (_miniGl.lastDebugMsg = t);
54 | }
55 | : () => {}),
56 | Object.defineProperties(_miniGl, {
57 | Material: {
58 | enumerable: false,
59 | value: class {
60 | constructor(vertexShaders, fragments, uniforms = {}) {
61 | const material = this;
62 | function getShaderByType(type, source) {
63 | const shader = context.createShader(type);
64 | return (
65 | context.shaderSource(shader, source),
66 | context.compileShader(shader),
67 | context.getShaderParameter(shader, context.COMPILE_STATUS) ||
68 | console.error(context.getShaderInfoLog(shader)),
69 | _miniGl.debug("Material.compileShaderSource", {
70 | source: source,
71 | }),
72 | shader
73 | );
74 | }
75 | function getUniformVariableDeclarations(uniforms, type) {
76 | return Object.entries(uniforms)
77 | .map(([uniform, value]) =>
78 | value.getDeclaration(uniform, type)
79 | )
80 | .join("\n");
81 | }
82 | (material.uniforms = uniforms), (material.uniformInstances = []);
83 |
84 | const prefix =
85 | "\n precision highp float;\n ";
86 | (material.vertexSource = `\n ${prefix}\n attribute vec4 position;\n attribute vec2 uv;\n attribute vec2 uvNorm;\n ${getUniformVariableDeclarations(
87 | _miniGl.commonUniforms,
88 | "vertex"
89 | )}\n ${getUniformVariableDeclarations(
90 | uniforms,
91 | "vertex"
92 | )}\n ${vertexShaders}\n `),
93 | (material.Source = `\n ${prefix}\n ${getUniformVariableDeclarations(
94 | _miniGl.commonUniforms,
95 | "fragment"
96 | )}\n ${getUniformVariableDeclarations(
97 | uniforms,
98 | "fragment"
99 | )}\n ${fragments}\n `),
100 | (material.vertexShader = getShaderByType(
101 | context.VERTEX_SHADER,
102 | material.vertexSource
103 | )),
104 | (material.fragmentShader = getShaderByType(
105 | context.FRAGMENT_SHADER,
106 | material.Source
107 | )),
108 | (material.program = context.createProgram()),
109 | context.attachShader(material.program, material.vertexShader),
110 | context.attachShader(material.program, material.fragmentShader),
111 | context.linkProgram(material.program),
112 | context.getProgramParameter(
113 | material.program,
114 | context.LINK_STATUS
115 | ) || console.error(context.getProgramInfoLog(material.program)),
116 | context.useProgram(material.program),
117 | material.attachUniforms(void 0, _miniGl.commonUniforms),
118 | material.attachUniforms(void 0, material.uniforms);
119 | }
120 | //t = uniform
121 | attachUniforms(name, uniforms) {
122 | //n = material
123 | const material = this;
124 | void 0 === name
125 | ? Object.entries(uniforms).forEach(([name, uniform]) => {
126 | material.attachUniforms(name, uniform);
127 | })
128 | : "array" == uniforms.type
129 | ? uniforms.value.forEach((uniform, i) =>
130 | material.attachUniforms(`${name}[${i}]`, uniform)
131 | )
132 | : "struct" == uniforms.type
133 | ? Object.entries(uniforms.value).forEach(([uniform, i]) =>
134 | material.attachUniforms(`${name}.${uniform}`, i)
135 | )
136 | : (_miniGl.debug("Material.attachUniforms", {
137 | name: name,
138 | uniform: uniforms,
139 | }),
140 | material.uniformInstances.push({
141 | uniform: uniforms,
142 | location: context.getUniformLocation(
143 | material.program,
144 | name
145 | ),
146 | }));
147 | }
148 | },
149 | },
150 | Uniform: {
151 | enumerable: !1,
152 | value: class {
153 | constructor(e) {
154 | (this.type = "float"), Object.assign(this, e);
155 | (this.typeFn =
156 | {
157 | float: "1f",
158 | int: "1i",
159 | vec2: "2fv",
160 | vec3: "3fv",
161 | vec4: "4fv",
162 | mat4: "Matrix4fv",
163 | }[this.type] || "1f"),
164 | this.update();
165 | }
166 | update(value) {
167 | void 0 !== this.value &&
168 | context[`uniform${this.typeFn}`](
169 | value,
170 | 0 === this.typeFn.indexOf("Matrix")
171 | ? this.transpose
172 | : this.value,
173 | 0 === this.typeFn.indexOf("Matrix") ? this.value : null
174 | );
175 | }
176 | //e - name
177 | //t - type
178 | //n - length
179 | getDeclaration(name, type, length) {
180 | const uniform = this;
181 | if (uniform.excludeFrom !== type) {
182 | if ("array" === uniform.type)
183 | return (
184 | uniform.value[0].getDeclaration(
185 | name,
186 | type,
187 | uniform.value.length
188 | ) + `\nconst int ${name}_length = ${uniform.value.length};`
189 | );
190 | if ("struct" === uniform.type) {
191 | let name_no_prefix = name.replace("u_", "");
192 | return (
193 | (name_no_prefix =
194 | name_no_prefix.charAt(0).toUpperCase() +
195 | name_no_prefix.slice(1)),
196 | `uniform struct ${name_no_prefix}
197 | {\n` +
198 | Object.entries(uniform.value)
199 | .map(([name, uniform]) =>
200 | uniform
201 | .getDeclaration(name, type)
202 | .replace(/^uniform/, "")
203 | )
204 | .join("") +
205 | `\n} ${name}${length > 0 ? `[${length}]` : ""};`
206 | );
207 | }
208 | return `uniform ${uniform.type} ${name}${
209 | length > 0 ? `[${length}]` : ""
210 | };`;
211 | }
212 | }
213 | },
214 | },
215 | PlaneGeometry: {
216 | enumerable: !1,
217 | value: class {
218 | constructor(width, height, n, i, orientation) {
219 | context.createBuffer(),
220 | (this.attributes = {
221 | position: new _miniGl.Attribute({
222 | target: context.ARRAY_BUFFER,
223 | size: 3,
224 | }),
225 | uv: new _miniGl.Attribute({
226 | target: context.ARRAY_BUFFER,
227 | size: 2,
228 | }),
229 | uvNorm: new _miniGl.Attribute({
230 | target: context.ARRAY_BUFFER,
231 | size: 2,
232 | }),
233 | index: new _miniGl.Attribute({
234 | target: context.ELEMENT_ARRAY_BUFFER,
235 | size: 3,
236 | type: context.UNSIGNED_SHORT,
237 | }),
238 | }),
239 | this.setTopology(n, i),
240 | this.setSize(width, height, orientation);
241 | }
242 | setTopology(e = 1, t = 1) {
243 | const n = this;
244 | (n.xSegCount = e),
245 | (n.ySegCount = t),
246 | (n.vertexCount = (n.xSegCount + 1) * (n.ySegCount + 1)),
247 | (n.quadCount = n.xSegCount * n.ySegCount * 2),
248 | (n.attributes.uv.values = new Float32Array(2 * n.vertexCount)),
249 | (n.attributes.uvNorm.values = new Float32Array(
250 | 2 * n.vertexCount
251 | )),
252 | (n.attributes.index.values = new Uint16Array(3 * n.quadCount));
253 | for (let e = 0; e <= n.ySegCount; e++)
254 | for (let t = 0; t <= n.xSegCount; t++) {
255 | const i = e * (n.xSegCount + 1) + t;
256 | if (
257 | ((n.attributes.uv.values[2 * i] = t / n.xSegCount),
258 | (n.attributes.uv.values[2 * i + 1] = 1 - e / n.ySegCount),
259 | (n.attributes.uvNorm.values[2 * i] =
260 | (t / n.xSegCount) * 2 - 1),
261 | (n.attributes.uvNorm.values[2 * i + 1] =
262 | 1 - (e / n.ySegCount) * 2),
263 | t < n.xSegCount && e < n.ySegCount)
264 | ) {
265 | const s = e * n.xSegCount + t;
266 | (n.attributes.index.values[6 * s] = i),
267 | (n.attributes.index.values[6 * s + 1] =
268 | i + 1 + n.xSegCount),
269 | (n.attributes.index.values[6 * s + 2] = i + 1),
270 | (n.attributes.index.values[6 * s + 3] = i + 1),
271 | (n.attributes.index.values[6 * s + 4] =
272 | i + 1 + n.xSegCount),
273 | (n.attributes.index.values[6 * s + 5] =
274 | i + 2 + n.xSegCount);
275 | }
276 | }
277 | n.attributes.uv.update(),
278 | n.attributes.uvNorm.update(),
279 | n.attributes.index.update(),
280 | _miniGl.debug("Geometry.setTopology", {
281 | uv: n.attributes.uv,
282 | uvNorm: n.attributes.uvNorm,
283 | index: n.attributes.index,
284 | });
285 | }
286 | setSize(width = 1, height = 1, orientation = "xz") {
287 | const geometry = this;
288 | (geometry.width = width),
289 | (geometry.height = height),
290 | (geometry.orientation = orientation),
291 | (geometry.attributes.position.values &&
292 | geometry.attributes.position.values.length ===
293 | 3 * geometry.vertexCount) ||
294 | (geometry.attributes.position.values = new Float32Array(
295 | 3 * geometry.vertexCount
296 | ));
297 | const o = width / -2,
298 | r = height / -2,
299 | segment_width = width / geometry.xSegCount,
300 | segment_height = height / geometry.ySegCount;
301 | for (let yIndex = 0; yIndex <= geometry.ySegCount; yIndex++) {
302 | const t = r + yIndex * segment_height;
303 | for (let xIndex = 0; xIndex <= geometry.xSegCount; xIndex++) {
304 | const r = o + xIndex * segment_width,
305 | l = yIndex * (geometry.xSegCount + 1) + xIndex;
306 | (geometry.attributes.position.values[
307 | 3 * l + "xyz".indexOf(orientation[0])
308 | ] = r),
309 | (geometry.attributes.position.values[
310 | 3 * l + "xyz".indexOf(orientation[1])
311 | ] = -t);
312 | }
313 | }
314 | geometry.attributes.position.update(),
315 | _miniGl.debug("Geometry.setSize", {
316 | position: geometry.attributes.position,
317 | });
318 | }
319 | },
320 | },
321 | Mesh: {
322 | enumerable: !1,
323 | value: class {
324 | constructor(geometry, material) {
325 | const mesh = this;
326 | (mesh.geometry = geometry),
327 | (mesh.material = material),
328 | (mesh.wireframe = !1),
329 | (mesh.attributeInstances = []),
330 | Object.entries(mesh.geometry.attributes).forEach(
331 | ([e, attribute]) => {
332 | mesh.attributeInstances.push({
333 | attribute: attribute,
334 | location: attribute.attach(e, mesh.material.program),
335 | });
336 | }
337 | ),
338 | _miniGl.meshes.push(mesh),
339 | _miniGl.debug("Mesh.constructor", {
340 | mesh: mesh,
341 | });
342 | }
343 | draw() {
344 | context.useProgram(this.material.program),
345 | this.material.uniformInstances.forEach(
346 | ({ uniform: e, location: t }) => e.update(t)
347 | ),
348 | this.attributeInstances.forEach(
349 | ({ attribute: e, location: t }) => e.use(t)
350 | ),
351 | context.drawElements(
352 | this.wireframe ? context.LINES : context.TRIANGLES,
353 | this.geometry.attributes.index.values.length,
354 | context.UNSIGNED_SHORT,
355 | 0
356 | );
357 | }
358 | remove() {
359 | _miniGl.meshes = _miniGl.meshes.filter((e) => e != this);
360 | }
361 | },
362 | },
363 | Attribute: {
364 | enumerable: !1,
365 | value: class {
366 | constructor(e) {
367 | (this.type = context.FLOAT),
368 | (this.normalized = !1),
369 | (this.buffer = context.createBuffer()),
370 | Object.assign(this, e),
371 | this.update();
372 | }
373 | update() {
374 | void 0 !== this.values &&
375 | (context.bindBuffer(this.target, this.buffer),
376 | context.bufferData(
377 | this.target,
378 | this.values,
379 | context.STATIC_DRAW
380 | ));
381 | }
382 | attach(e, t) {
383 | const n = context.getAttribLocation(t, e);
384 | return (
385 | this.target === context.ARRAY_BUFFER &&
386 | (context.enableVertexAttribArray(n),
387 | context.vertexAttribPointer(
388 | n,
389 | this.size,
390 | this.type,
391 | this.normalized,
392 | 0,
393 | 0
394 | )),
395 | n
396 | );
397 | }
398 | use(e) {
399 | context.bindBuffer(this.target, this.buffer),
400 | this.target === context.ARRAY_BUFFER &&
401 | (context.enableVertexAttribArray(e),
402 | context.vertexAttribPointer(
403 | e,
404 | this.size,
405 | this.type,
406 | this.normalized,
407 | 0,
408 | 0
409 | ));
410 | }
411 | },
412 | },
413 | });
414 | const a = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
415 | _miniGl.commonUniforms = {
416 | projectionMatrix: new _miniGl.Uniform({
417 | type: "mat4",
418 | value: a,
419 | }),
420 | modelViewMatrix: new _miniGl.Uniform({
421 | type: "mat4",
422 | value: a,
423 | }),
424 | resolution: new _miniGl.Uniform({
425 | type: "vec2",
426 | value: [1, 1],
427 | }),
428 | aspectRatio: new _miniGl.Uniform({
429 | type: "float",
430 | value: 1,
431 | }),
432 | };
433 | }
434 | setSize(e = 640, t = 480) {
435 | (this.width = e),
436 | (this.height = t),
437 | (this.canvas.width = e),
438 | (this.canvas.height = t),
439 | this.gl.viewport(0, 0, e, t),
440 | (this.commonUniforms.resolution.value = [e, t]),
441 | (this.commonUniforms.aspectRatio.value = e / t),
442 | this.debug("MiniGL.setSize", {
443 | width: e,
444 | height: t,
445 | });
446 | }
447 | //left, right, top, bottom, near, far
448 | setOrthographicCamera(e = 0, t = 0, n = 0, i = -2e3, s = 2e3) {
449 | (this.commonUniforms.projectionMatrix.value = [
450 | 2 / this.width,
451 | 0,
452 | 0,
453 | 0,
454 | 0,
455 | 2 / this.height,
456 | 0,
457 | 0,
458 | 0,
459 | 0,
460 | 2 / (i - s),
461 | 0,
462 | e,
463 | t,
464 | n,
465 | 1,
466 | ]),
467 | this.debug(
468 | "setOrthographicCamera",
469 | this.commonUniforms.projectionMatrix.value
470 | );
471 | }
472 | render() {
473 | this.gl.clearColor(0, 0, 0, 0),
474 | this.gl.clearDepth(1),
475 | this.meshes.forEach((e) => e.draw());
476 | }
477 | }
478 |
479 | //Sets initial properties
480 | function e(object, propertyName, val) {
481 | return (
482 | propertyName in object
483 | ? Object.defineProperty(object, propertyName, {
484 | value: val,
485 | enumerable: !0,
486 | configurable: !0,
487 | writable: !0,
488 | })
489 | : (object[propertyName] = val),
490 | object
491 | );
492 | }
493 |
494 | //Gradient object
495 | class Gradient {
496 | constructor(...t) {
497 | e(this, "el", void 0),
498 | e(this, "cssVarRetries", 0),
499 | e(this, "maxCssVarRetries", 200),
500 | e(this, "angle", 0),
501 | e(this, "isLoadedClass", !1),
502 | e(this, "isScrolling", !1),
503 | /*e(this, "isStatic", o.disableAmbientAnimations()),*/ e(
504 | this,
505 | "scrollingTimeout",
506 | void 0
507 | ),
508 | e(this, "scrollingRefreshDelay", 200),
509 | e(this, "isIntersecting", !1),
510 | e(this, "shaderFiles", void 0),
511 | e(this, "vertexShader", void 0),
512 | e(this, "sectionColors", void 0),
513 | e(this, "computedCanvasStyle", void 0),
514 | e(this, "conf", void 0),
515 | e(this, "uniforms", void 0),
516 | e(this, "t", 1253106),
517 | e(this, "last", 0),
518 | e(this, "width", void 0),
519 | e(this, "minWidth", 1111),
520 | e(this, "height", 600),
521 | e(this, "xSegCount", void 0),
522 | e(this, "ySegCount", void 0),
523 | e(this, "mesh", void 0),
524 | e(this, "material", void 0),
525 | e(this, "geometry", void 0),
526 | e(this, "minigl", void 0),
527 | e(this, "scrollObserver", void 0),
528 | e(this, "amp", 320),
529 | e(this, "seed", 5),
530 | e(this, "freqX", 14e-5),
531 | e(this, "freqY", 29e-5),
532 | e(this, "freqDelta", 1e-5),
533 | e(this, "activeColors", [1, 1, 1, 1]),
534 | e(this, "isMetaKey", !1),
535 | e(this, "isGradientLegendVisible", !1),
536 | e(this, "isMouseDown", !1),
537 | e(this, "handleScroll", () => {
538 | clearTimeout(this.scrollingTimeout),
539 | (this.scrollingTimeout = setTimeout(
540 | this.handleScrollEnd,
541 | this.scrollingRefreshDelay
542 | )),
543 | this.isGradientLegendVisible && this.hideGradientLegend(),
544 | this.conf.playing && ((this.isScrolling = !0), this.pause());
545 | }),
546 | e(this, "handleScrollEnd", () => {
547 | (this.isScrolling = !1), this.isIntersecting && this.play();
548 | }),
549 | e(this, "resize", () => {
550 | (this.width = window.innerWidth),
551 | this.minigl.setSize(this.width, this.height),
552 | this.minigl.setOrthographicCamera(),
553 | (this.xSegCount = Math.ceil(this.width * this.conf.density[0])),
554 | (this.ySegCount = Math.ceil(this.height * this.conf.density[1])),
555 | this.mesh.geometry.setTopology(this.xSegCount, this.ySegCount),
556 | this.mesh.geometry.setSize(this.width, this.height),
557 | (this.mesh.material.uniforms.u_shadow_power.value =
558 | this.width < 600 ? 5 : 6);
559 | }),
560 | e(this, "handleMouseDown", (e) => {
561 | this.isGradientLegendVisible &&
562 | ((this.isMetaKey = e.metaKey),
563 | (this.isMouseDown = !0),
564 | !1 === this.conf.playing && requestAnimationFrame(this.animate));
565 | }),
566 | e(this, "handleMouseUp", () => {
567 | this.isMouseDown = !1;
568 | }),
569 | e(this, "animate", (e) => {
570 | if (!this.shouldSkipFrame(e) || this.isMouseDown) {
571 | if (
572 | ((this.t += Math.min(e - this.last, 1e3 / 15)),
573 | (this.last = e),
574 | this.isMouseDown)
575 | ) {
576 | let e = 160;
577 | this.isMetaKey && (e = -160), (this.t += e);
578 | }
579 | (this.mesh.material.uniforms.u_time.value = this.t),
580 | this.minigl.render();
581 | }
582 | if (0 !== this.last && this.isStatic)
583 | return this.minigl.render(), void this.disconnect();
584 | /*this.isIntersecting && */ (this.conf.playing || this.isMouseDown) &&
585 | requestAnimationFrame(this.animate);
586 | }),
587 | e(this, "addIsLoadedClass", () => {
588 | /*this.isIntersecting && */ !this.isLoadedClass &&
589 | ((this.isLoadedClass = !0),
590 | this.el.classList.add("isLoaded"),
591 | setTimeout(() => {
592 | this.el.parentElement.classList.add("isLoaded");
593 | }, 3e3));
594 | }),
595 | e(this, "pause", () => {
596 | this.conf.playing = false;
597 | }),
598 | e(this, "play", () => {
599 | requestAnimationFrame(this.animate), (this.conf.playing = true);
600 | }),
601 | e(this, "initGradient", (selector) => {
602 | this.el = document.querySelector(selector);
603 | this.connect();
604 | return this;
605 | });
606 | }
607 | async connect() {
608 | (this.shaderFiles = {
609 | vertex:
610 | "varying vec3 v_color;\n\nvoid main() {\n float time = u_time * u_global.noiseSpeed;\n\n vec2 noiseCoord = resolution * uvNorm * u_global.noiseFreq;\n\n vec2 st = 1. - uvNorm.xy;\n\n //\n // Tilting the plane\n //\n\n // Front-to-back tilt\n float tilt = resolution.y / 2.0 * uvNorm.y;\n\n // Left-to-right angle\n float incline = resolution.x * uvNorm.x / 2.0 * u_vertDeform.incline;\n\n // Up-down shift to offset incline\n float offset = resolution.x / 2.0 * u_vertDeform.incline * mix(u_vertDeform.offsetBottom, u_vertDeform.offsetTop, uv.y);\n\n //\n // Vertex noise\n //\n\n float noise = snoise(vec3(\n noiseCoord.x * u_vertDeform.noiseFreq.x + time * u_vertDeform.noiseFlow,\n noiseCoord.y * u_vertDeform.noiseFreq.y,\n time * u_vertDeform.noiseSpeed + u_vertDeform.noiseSeed\n )) * u_vertDeform.noiseAmp;\n\n // Fade noise to zero at edges\n noise *= 1.0 - pow(abs(uvNorm.y), 2.0);\n\n // Clamp to 0\n noise = max(0.0, noise);\n\n vec3 pos = vec3(\n position.x,\n position.y + tilt + incline + noise - offset,\n position.z\n );\n\n //\n // Vertex color, to be passed to fragment shader\n //\n\n if (u_active_colors[0] == 1.) {\n v_color = u_baseColor;\n }\n\n for (int i = 0; i < u_waveLayers_length; i++) {\n if (u_active_colors[i + 1] == 1.) {\n WaveLayers layer = u_waveLayers[i];\n\n float noise = smoothstep(\n layer.noiseFloor,\n layer.noiseCeil,\n snoise(vec3(\n noiseCoord.x * layer.noiseFreq.x + time * layer.noiseFlow,\n noiseCoord.y * layer.noiseFreq.y,\n time * layer.noiseSpeed + layer.noiseSeed\n )) / 2.0 + 0.5\n );\n\n v_color = blendNormal(v_color, layer.color, pow(noise, 4.));\n }\n }\n\n //\n // Finish\n //\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);\n}",
611 | noise:
612 | "//\n// Description : Array and textureless GLSL 2D/3D/4D simplex\n// noise functions.\n// Author : Ian McEwan, Ashima Arts.\n// Maintainer : stegu\n// Lastmod : 20110822 (ijm)\n// License : Copyright (C) 2011 Ashima Arts. All rights reserved.\n// Distributed under the MIT License. See LICENSE file.\n// https://github.com/ashima/webgl-noise\n// https://github.com/stegu/webgl-noise\n//\n\nvec3 mod289(vec3 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 mod289(vec4 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 permute(vec4 x) {\n return mod289(((x*34.0)+1.0)*x);\n}\n\nvec4 taylorInvSqrt(vec4 r)\n{\n return 1.79284291400159 - 0.85373472095314 * r;\n}\n\nfloat snoise(vec3 v)\n{\n const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n\n// First corner\n vec3 i = floor(v + dot(v, C.yyy) );\n vec3 x0 = v - i + dot(i, C.xxx) ;\n\n// Other corners\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min( g.xyz, l.zxy );\n vec3 i2 = max( g.xyz, l.zxy );\n\n // x0 = x0 - 0.0 + 0.0 * C.xxx;\n // x1 = x0 - i1 + 1.0 * C.xxx;\n // x2 = x0 - i2 + 2.0 * C.xxx;\n // x3 = x0 - 1.0 + 3.0 * C.xxx;\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y\n vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y\n\n// Permutations\n i = mod289(i);\n vec4 p = permute( permute( permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\n\n// Gradients: 7x7 points over a square, mapped onto an octahedron.\n// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\n float n_ = 0.142857142857; // 1.0/7.0\n vec3 ns = n_ * D.wyz - D.xzx;\n\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)\n\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)\n\n vec4 x = x_ *ns.x + ns.yyyy;\n vec4 y = y_ *ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n\n vec4 b0 = vec4( x.xy, y.xy );\n vec4 b1 = vec4( x.zw, y.zw );\n\n //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\n //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\n vec4 s0 = floor(b0)*2.0 + 1.0;\n vec4 s1 = floor(b1)*2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n\n vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\n vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\n\n vec3 p0 = vec3(a0.xy,h.x);\n vec3 p1 = vec3(a0.zw,h.y);\n vec3 p2 = vec3(a1.xy,h.z);\n vec3 p3 = vec3(a1.zw,h.w);\n\n//Normalise gradients\n vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n\n// Mix final noise value\n vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\n m = m * m;\n return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),\n dot(p2,x2), dot(p3,x3) ) );\n}",
613 | blend:
614 | "//\n// https://github.com/jamieowen/glsl-blend\n//\n\n// Normal\n\nvec3 blendNormal(vec3 base, vec3 blend) {\n\treturn blend;\n}\n\nvec3 blendNormal(vec3 base, vec3 blend, float opacity) {\n\treturn (blendNormal(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Screen\n\nfloat blendScreen(float base, float blend) {\n\treturn 1.0-((1.0-base)*(1.0-blend));\n}\n\nvec3 blendScreen(vec3 base, vec3 blend) {\n\treturn vec3(blendScreen(base.r,blend.r),blendScreen(base.g,blend.g),blendScreen(base.b,blend.b));\n}\n\nvec3 blendScreen(vec3 base, vec3 blend, float opacity) {\n\treturn (blendScreen(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Multiply\n\nvec3 blendMultiply(vec3 base, vec3 blend) {\n\treturn base*blend;\n}\n\nvec3 blendMultiply(vec3 base, vec3 blend, float opacity) {\n\treturn (blendMultiply(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Overlay\n\nfloat blendOverlay(float base, float blend) {\n\treturn base<0.5?(2.0*base*blend):(1.0-2.0*(1.0-base)*(1.0-blend));\n}\n\nvec3 blendOverlay(vec3 base, vec3 blend) {\n\treturn vec3(blendOverlay(base.r,blend.r),blendOverlay(base.g,blend.g),blendOverlay(base.b,blend.b));\n}\n\nvec3 blendOverlay(vec3 base, vec3 blend, float opacity) {\n\treturn (blendOverlay(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Hard light\n\nvec3 blendHardLight(vec3 base, vec3 blend) {\n\treturn blendOverlay(blend,base);\n}\n\nvec3 blendHardLight(vec3 base, vec3 blend, float opacity) {\n\treturn (blendHardLight(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Soft light\n\nfloat blendSoftLight(float base, float blend) {\n\treturn (blend<0.5)?(2.0*base*blend+base*base*(1.0-2.0*blend)):(sqrt(base)*(2.0*blend-1.0)+2.0*base*(1.0-blend));\n}\n\nvec3 blendSoftLight(vec3 base, vec3 blend) {\n\treturn vec3(blendSoftLight(base.r,blend.r),blendSoftLight(base.g,blend.g),blendSoftLight(base.b,blend.b));\n}\n\nvec3 blendSoftLight(vec3 base, vec3 blend, float opacity) {\n\treturn (blendSoftLight(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Color dodge\n\nfloat blendColorDodge(float base, float blend) {\n\treturn (blend==1.0)?blend:min(base/(1.0-blend),1.0);\n}\n\nvec3 blendColorDodge(vec3 base, vec3 blend) {\n\treturn vec3(blendColorDodge(base.r,blend.r),blendColorDodge(base.g,blend.g),blendColorDodge(base.b,blend.b));\n}\n\nvec3 blendColorDodge(vec3 base, vec3 blend, float opacity) {\n\treturn (blendColorDodge(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Color burn\n\nfloat blendColorBurn(float base, float blend) {\n\treturn (blend==0.0)?blend:max((1.0-((1.0-base)/blend)),0.0);\n}\n\nvec3 blendColorBurn(vec3 base, vec3 blend) {\n\treturn vec3(blendColorBurn(base.r,blend.r),blendColorBurn(base.g,blend.g),blendColorBurn(base.b,blend.b));\n}\n\nvec3 blendColorBurn(vec3 base, vec3 blend, float opacity) {\n\treturn (blendColorBurn(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Vivid Light\n\nfloat blendVividLight(float base, float blend) {\n\treturn (blend<0.5)?blendColorBurn(base,(2.0*blend)):blendColorDodge(base,(2.0*(blend-0.5)));\n}\n\nvec3 blendVividLight(vec3 base, vec3 blend) {\n\treturn vec3(blendVividLight(base.r,blend.r),blendVividLight(base.g,blend.g),blendVividLight(base.b,blend.b));\n}\n\nvec3 blendVividLight(vec3 base, vec3 blend, float opacity) {\n\treturn (blendVividLight(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Lighten\n\nfloat blendLighten(float base, float blend) {\n\treturn max(blend,base);\n}\n\nvec3 blendLighten(vec3 base, vec3 blend) {\n\treturn vec3(blendLighten(base.r,blend.r),blendLighten(base.g,blend.g),blendLighten(base.b,blend.b));\n}\n\nvec3 blendLighten(vec3 base, vec3 blend, float opacity) {\n\treturn (blendLighten(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Linear burn\n\nfloat blendLinearBurn(float base, float blend) {\n\t// Note : Same implementation as BlendSubtractf\n\treturn max(base+blend-1.0,0.0);\n}\n\nvec3 blendLinearBurn(vec3 base, vec3 blend) {\n\t// Note : Same implementation as BlendSubtract\n\treturn max(base+blend-vec3(1.0),vec3(0.0));\n}\n\nvec3 blendLinearBurn(vec3 base, vec3 blend, float opacity) {\n\treturn (blendLinearBurn(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Linear dodge\n\nfloat blendLinearDodge(float base, float blend) {\n\t// Note : Same implementation as BlendAddf\n\treturn min(base+blend,1.0);\n}\n\nvec3 blendLinearDodge(vec3 base, vec3 blend) {\n\t// Note : Same implementation as BlendAdd\n\treturn min(base+blend,vec3(1.0));\n}\n\nvec3 blendLinearDodge(vec3 base, vec3 blend, float opacity) {\n\treturn (blendLinearDodge(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Linear light\n\nfloat blendLinearLight(float base, float blend) {\n\treturn blend<0.5?blendLinearBurn(base,(2.0*blend)):blendLinearDodge(base,(2.0*(blend-0.5)));\n}\n\nvec3 blendLinearLight(vec3 base, vec3 blend) {\n\treturn vec3(blendLinearLight(base.r,blend.r),blendLinearLight(base.g,blend.g),blendLinearLight(base.b,blend.b));\n}\n\nvec3 blendLinearLight(vec3 base, vec3 blend, float opacity) {\n\treturn (blendLinearLight(base, blend) * opacity + base * (1.0 - opacity));\n}",
615 | fragment:
616 | "varying vec3 v_color;\n\nvoid main() {\n vec3 color = v_color;\n if (u_darken_top == 1.0) {\n vec2 st = gl_FragCoord.xy/resolution.xy;\n color.g -= pow(st.y + sin(-12.0) * st.x, u_shadow_power) * 0.4;\n }\n gl_FragColor = vec4(color, 1.0);\n}",
617 | }),
618 | (this.conf = {
619 | presetName: "",
620 | wireframe: false,
621 | density: [0.06, 0.16],
622 | zoom: 1,
623 | rotation: 0,
624 | playing: true,
625 | }),
626 | document.querySelectorAll("canvas").length < 1
627 | ? console.log("DID NOT LOAD HERO STRIPE CANVAS")
628 | : ((this.minigl = new MiniGl(this.el, null, null, !0)),
629 | requestAnimationFrame(() => {
630 | this.el &&
631 | ((this.computedCanvasStyle = getComputedStyle(this.el)),
632 | this.waitForCssVars());
633 | }));
634 | /*
635 | this.scrollObserver = await s.create(.1, !1),
636 | this.scrollObserver.observe(this.el),
637 | this.scrollObserver.onSeparate(() => {
638 | window.removeEventListener("scroll", this.handleScroll), window.removeEventListener("mousedown", this.handleMouseDown), window.removeEventListener("mouseup", this.handleMouseUp), window.removeEventListener("keydown", this.handleKeyDown), this.isIntersecting = !1, this.conf.playing && this.pause()
639 | }),
640 | this.scrollObserver.onIntersect(() => {
641 | window.addEventListener("scroll", this.handleScroll), window.addEventListener("mousedown", this.handleMouseDown), window.addEventListener("mouseup", this.handleMouseUp), window.addEventListener("keydown", this.handleKeyDown), this.isIntersecting = !0, this.addIsLoadedClass(), this.play()
642 | })*/
643 | }
644 | disconnect() {
645 | this.scrollObserver &&
646 | (window.removeEventListener("scroll", this.handleScroll),
647 | window.removeEventListener("mousedown", this.handleMouseDown),
648 | window.removeEventListener("mouseup", this.handleMouseUp),
649 | window.removeEventListener("keydown", this.handleKeyDown),
650 | this.scrollObserver.disconnect()),
651 | window.removeEventListener("resize", this.resize);
652 | }
653 | initMaterial() {
654 | this.uniforms = {
655 | u_time: new this.minigl.Uniform({
656 | value: 0,
657 | }),
658 | u_shadow_power: new this.minigl.Uniform({
659 | value: 5,
660 | }),
661 | u_darken_top: new this.minigl.Uniform({
662 | value: "" === this.el.dataset.jsDarkenTop ? 1 : 0,
663 | }),
664 | u_active_colors: new this.minigl.Uniform({
665 | value: this.activeColors,
666 | type: "vec4",
667 | }),
668 | u_global: new this.minigl.Uniform({
669 | value: {
670 | noiseFreq: new this.minigl.Uniform({
671 | value: [this.freqX, this.freqY],
672 | type: "vec2",
673 | }),
674 | noiseSpeed: new this.minigl.Uniform({
675 | value: 5e-6,
676 | }),
677 | },
678 | type: "struct",
679 | }),
680 | u_vertDeform: new this.minigl.Uniform({
681 | value: {
682 | incline: new this.minigl.Uniform({
683 | value: Math.sin(this.angle) / Math.cos(this.angle),
684 | }),
685 | offsetTop: new this.minigl.Uniform({
686 | value: -0.5,
687 | }),
688 | offsetBottom: new this.minigl.Uniform({
689 | value: -0.5,
690 | }),
691 | noiseFreq: new this.minigl.Uniform({
692 | value: [3, 4],
693 | type: "vec2",
694 | }),
695 | noiseAmp: new this.minigl.Uniform({
696 | value: this.amp,
697 | }),
698 | noiseSpeed: new this.minigl.Uniform({
699 | value: 10,
700 | }),
701 | noiseFlow: new this.minigl.Uniform({
702 | value: 3,
703 | }),
704 | noiseSeed: new this.minigl.Uniform({
705 | value: this.seed,
706 | }),
707 | },
708 | type: "struct",
709 | excludeFrom: "fragment",
710 | }),
711 | u_baseColor: new this.minigl.Uniform({
712 | value: this.sectionColors[0],
713 | type: "vec3",
714 | excludeFrom: "fragment",
715 | }),
716 | u_waveLayers: new this.minigl.Uniform({
717 | value: [],
718 | excludeFrom: "fragment",
719 | type: "array",
720 | }),
721 | };
722 | for (let e = 1; e < this.sectionColors.length; e += 1)
723 | this.uniforms.u_waveLayers.value.push(
724 | new this.minigl.Uniform({
725 | value: {
726 | color: new this.minigl.Uniform({
727 | value: this.sectionColors[e],
728 | type: "vec3",
729 | }),
730 | noiseFreq: new this.minigl.Uniform({
731 | value: [
732 | 2 + e / this.sectionColors.length,
733 | 3 + e / this.sectionColors.length,
734 | ],
735 | type: "vec2",
736 | }),
737 | noiseSpeed: new this.minigl.Uniform({
738 | value: 11 + 0.3 * e,
739 | }),
740 | noiseFlow: new this.minigl.Uniform({
741 | value: 6.5 + 0.3 * e,
742 | }),
743 | noiseSeed: new this.minigl.Uniform({
744 | value: this.seed + 10 * e,
745 | }),
746 | noiseFloor: new this.minigl.Uniform({
747 | value: 0.1,
748 | }),
749 | noiseCeil: new this.minigl.Uniform({
750 | value: 0.63 + 0.07 * e,
751 | }),
752 | },
753 | type: "struct",
754 | })
755 | );
756 | return (
757 | (this.vertexShader = [
758 | this.shaderFiles.noise,
759 | this.shaderFiles.blend,
760 | this.shaderFiles.vertex,
761 | ].join("\n\n")),
762 | new this.minigl.Material(
763 | this.vertexShader,
764 | this.shaderFiles.fragment,
765 | this.uniforms
766 | )
767 | );
768 | }
769 | initMesh() {
770 | (this.material = this.initMaterial()),
771 | (this.geometry = new this.minigl.PlaneGeometry()),
772 | (this.mesh = new this.minigl.Mesh(this.geometry, this.material));
773 | }
774 | shouldSkipFrame(e) {
775 | return (
776 | !!window.document.hidden ||
777 | !this.conf.playing ||
778 | parseInt(e, 10) % 2 == 0 ||
779 | void 0
780 | );
781 | }
782 | updateFrequency(e) {
783 | (this.freqX += e), (this.freqY += e);
784 | }
785 | toggleColor(index) {
786 | this.activeColors[index] = 0 === this.activeColors[index] ? 1 : 0;
787 | }
788 | showGradientLegend() {
789 | this.width > this.minWidth &&
790 | ((this.isGradientLegendVisible = !0),
791 | document.body.classList.add("isGradientLegendVisible"));
792 | }
793 | hideGradientLegend() {
794 | (this.isGradientLegendVisible = !1),
795 | document.body.classList.remove("isGradientLegendVisible");
796 | }
797 | init() {
798 | this.initGradientColors(),
799 | this.initMesh(),
800 | this.resize(),
801 | requestAnimationFrame(this.animate),
802 | window.addEventListener("resize", this.resize);
803 | }
804 | /*
805 | * Waiting for the css variables to become available, usually on page load before we can continue.
806 | * Using default colors assigned below if no variables have been found after maxCssVarRetries
807 | */
808 | waitForCssVars() {
809 | if (
810 | this.computedCanvasStyle &&
811 | -1 !==
812 | this.computedCanvasStyle
813 | .getPropertyValue("--gradient-color-1")
814 | .indexOf("#")
815 | )
816 | this.init(), this.addIsLoadedClass();
817 | else {
818 | if (
819 | ((this.cssVarRetries += 1), this.cssVarRetries > this.maxCssVarRetries)
820 | ) {
821 | return (
822 | (this.sectionColors = [16711680, 16711680, 16711935, 65280, 255]),
823 | void this.init()
824 | );
825 | }
826 | requestAnimationFrame(() => this.waitForCssVars());
827 | }
828 | }
829 | /*
830 | * Initializes the four section colors by retrieving them from css variables.
831 | */
832 | initGradientColors() {
833 | this.sectionColors = [
834 | "--gradient-color-1",
835 | "--gradient-color-2",
836 | "--gradient-color-3",
837 | "--gradient-color-4",
838 | ]
839 | .map((cssPropertyName) => {
840 | let hex = this.computedCanvasStyle
841 | .getPropertyValue(cssPropertyName)
842 | .trim();
843 | //Check if shorthand hex value was used and double the length so the conversion in normalizeColor will work.
844 | if (4 === hex.length) {
845 | const hexTemp = hex
846 | .substr(1)
847 | .split("")
848 | .map((hexTemp) => hexTemp + hexTemp)
849 | .join("");
850 | hex = `#${hexTemp}`;
851 | }
852 | return hex && `0x${hex.substr(1)}`;
853 | })
854 | .filter(Boolean)
855 | .map(normalizeColor);
856 | }
857 | }
858 |
859 | /*
860 | *Finally initializing the Gradient class, assigning a canvas to it and calling Gradient.connect() which initializes everything,
861 | * Use Gradient.pause() and Gradient.play() for controls.
862 | *
863 | * Here are some default property values you can change anytime:
864 | * Amplitude: Gradient.amp = 0
865 | * Colors: Gradient.sectionColors (if you change colors, use normalizeColor(#hexValue)) before you assign it.
866 | *
867 | *
868 | * Useful functions
869 | * Gradient.toggleColor(index)
870 | * Gradient.updateFrequency(freq)
871 | */
872 | // var gradient = new Gradient();
873 | // gradient.initGradient("#gradient-canvas");
874 |
875 | export { Gradient };
876 |
--------------------------------------------------------------------------------
/lib/Gradient.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Stripe WebGl Gradient Animation
3 | * All Credits to Stripe.com
4 | * ScrollObserver functionality to disable animation when not scrolled into view has been disabled and
5 | * commented out for now.
6 | * https://kevinhufnagl.com
7 | */
8 |
9 | //Converting colors to proper format
10 | function normalizeColor(hexCode) {
11 | return [
12 | ((hexCode >> 16) & 255) / 255,
13 | ((hexCode >> 8) & 255) / 255,
14 | (255 & hexCode) / 255,
15 | ];
16 | }
17 | ["SCREEN", "LINEAR_LIGHT"].reduce(
18 | (hexCode, t, n) =>
19 | Object.assign(hexCode, {
20 | [t]: n,
21 | }),
22 | {}
23 | );
24 |
25 | //Essential functionality of WebGl
26 | //t = width
27 | //n = height
28 | class MiniGl {
29 | constructor(canvas, width, height, debug = false) {
30 | const _miniGl = this,
31 | debug_output =
32 | -1 !== document.location.search.toLowerCase().indexOf("debug=webgl");
33 | (_miniGl.canvas = canvas),
34 | (_miniGl.gl = _miniGl.canvas.getContext("webgl", {
35 | antialias: true,
36 | })),
37 | (_miniGl.meshes = []);
38 | const context = _miniGl.gl;
39 | width && height && this.setSize(width, height),
40 | _miniGl.lastDebugMsg,
41 | (_miniGl.debug =
42 | debug && debug_output
43 | ? function (e) {
44 | const t = new Date();
45 | t - _miniGl.lastDebugMsg > 1e3 && console.log("---"),
46 | console.log(
47 | t.toLocaleTimeString() +
48 | Array(Math.max(0, 32 - e.length)).join(" ") +
49 | e +
50 | ": ",
51 | ...Array.from(arguments).slice(1)
52 | ),
53 | (_miniGl.lastDebugMsg = t);
54 | }
55 | : () => {}),
56 | Object.defineProperties(_miniGl, {
57 | Material: {
58 | enumerable: false,
59 | value: class {
60 | constructor(vertexShaders, fragments, uniforms = {}) {
61 | const material = this;
62 | function getShaderByType(type, source) {
63 | const shader = context.createShader(type);
64 | return (
65 | context.shaderSource(shader, source),
66 | context.compileShader(shader),
67 | context.getShaderParameter(shader, context.COMPILE_STATUS) ||
68 | console.error(context.getShaderInfoLog(shader)),
69 | _miniGl.debug("Material.compileShaderSource", {
70 | source: source,
71 | }),
72 | shader
73 | );
74 | }
75 | function getUniformVariableDeclarations(uniforms, type) {
76 | return Object.entries(uniforms)
77 | .map(([uniform, value]) =>
78 | value.getDeclaration(uniform, type)
79 | )
80 | .join("\n");
81 | }
82 | (material.uniforms = uniforms), (material.uniformInstances = []);
83 |
84 | const prefix =
85 | "\n precision highp float;\n ";
86 | (material.vertexSource = `\n ${prefix}\n attribute vec4 position;\n attribute vec2 uv;\n attribute vec2 uvNorm;\n ${getUniformVariableDeclarations(
87 | _miniGl.commonUniforms,
88 | "vertex"
89 | )}\n ${getUniformVariableDeclarations(
90 | uniforms,
91 | "vertex"
92 | )}\n ${vertexShaders}\n `),
93 | (material.Source = `\n ${prefix}\n ${getUniformVariableDeclarations(
94 | _miniGl.commonUniforms,
95 | "fragment"
96 | )}\n ${getUniformVariableDeclarations(
97 | uniforms,
98 | "fragment"
99 | )}\n ${fragments}\n `),
100 | (material.vertexShader = getShaderByType(
101 | context.VERTEX_SHADER,
102 | material.vertexSource
103 | )),
104 | (material.fragmentShader = getShaderByType(
105 | context.FRAGMENT_SHADER,
106 | material.Source
107 | )),
108 | (material.program = context.createProgram()),
109 | context.attachShader(material.program, material.vertexShader),
110 | context.attachShader(material.program, material.fragmentShader),
111 | context.linkProgram(material.program),
112 | context.getProgramParameter(
113 | material.program,
114 | context.LINK_STATUS
115 | ) || console.error(context.getProgramInfoLog(material.program)),
116 | context.useProgram(material.program),
117 | material.attachUniforms(void 0, _miniGl.commonUniforms),
118 | material.attachUniforms(void 0, material.uniforms);
119 | }
120 | //t = uniform
121 | attachUniforms(name, uniforms) {
122 | //n = material
123 | const material = this;
124 | void 0 === name
125 | ? Object.entries(uniforms).forEach(([name, uniform]) => {
126 | material.attachUniforms(name, uniform);
127 | })
128 | : "array" == uniforms.type
129 | ? uniforms.value.forEach((uniform, i) =>
130 | material.attachUniforms(`${name}[${i}]`, uniform)
131 | )
132 | : "struct" == uniforms.type
133 | ? Object.entries(uniforms.value).forEach(([uniform, i]) =>
134 | material.attachUniforms(`${name}.${uniform}`, i)
135 | )
136 | : (_miniGl.debug("Material.attachUniforms", {
137 | name: name,
138 | uniform: uniforms,
139 | }),
140 | material.uniformInstances.push({
141 | uniform: uniforms,
142 | location: context.getUniformLocation(
143 | material.program,
144 | name
145 | ),
146 | }));
147 | }
148 | },
149 | },
150 | Uniform: {
151 | enumerable: !1,
152 | value: class {
153 | constructor(e) {
154 | (this.type = "float"), Object.assign(this, e);
155 | (this.typeFn =
156 | {
157 | float: "1f",
158 | int: "1i",
159 | vec2: "2fv",
160 | vec3: "3fv",
161 | vec4: "4fv",
162 | mat4: "Matrix4fv",
163 | }[this.type] || "1f"),
164 | this.update();
165 | }
166 | update(value) {
167 | void 0 !== this.value &&
168 | context[`uniform${this.typeFn}`](
169 | value,
170 | 0 === this.typeFn.indexOf("Matrix")
171 | ? this.transpose
172 | : this.value,
173 | 0 === this.typeFn.indexOf("Matrix") ? this.value : null
174 | );
175 | }
176 | //e - name
177 | //t - type
178 | //n - length
179 | getDeclaration(name, type, length) {
180 | const uniform = this;
181 | if (uniform.excludeFrom !== type) {
182 | if ("array" === uniform.type)
183 | return (
184 | uniform.value[0].getDeclaration(
185 | name,
186 | type,
187 | uniform.value.length
188 | ) + `\nconst int ${name}_length = ${uniform.value.length};`
189 | );
190 | if ("struct" === uniform.type) {
191 | let name_no_prefix = name.replace("u_", "");
192 | return (
193 | (name_no_prefix =
194 | name_no_prefix.charAt(0).toUpperCase() +
195 | name_no_prefix.slice(1)),
196 | `uniform struct ${name_no_prefix}
197 | {\n` +
198 | Object.entries(uniform.value)
199 | .map(([name, uniform]) =>
200 | uniform
201 | .getDeclaration(name, type)
202 | .replace(/^uniform/, "")
203 | )
204 | .join("") +
205 | `\n} ${name}${length > 0 ? `[${length}]` : ""};`
206 | );
207 | }
208 | return `uniform ${uniform.type} ${name}${
209 | length > 0 ? `[${length}]` : ""
210 | };`;
211 | }
212 | }
213 | },
214 | },
215 | PlaneGeometry: {
216 | enumerable: !1,
217 | value: class {
218 | constructor(width, height, n, i, orientation) {
219 | context.createBuffer(),
220 | (this.attributes = {
221 | position: new _miniGl.Attribute({
222 | target: context.ARRAY_BUFFER,
223 | size: 3,
224 | }),
225 | uv: new _miniGl.Attribute({
226 | target: context.ARRAY_BUFFER,
227 | size: 2,
228 | }),
229 | uvNorm: new _miniGl.Attribute({
230 | target: context.ARRAY_BUFFER,
231 | size: 2,
232 | }),
233 | index: new _miniGl.Attribute({
234 | target: context.ELEMENT_ARRAY_BUFFER,
235 | size: 3,
236 | type: context.UNSIGNED_SHORT,
237 | }),
238 | }),
239 | this.setTopology(n, i),
240 | this.setSize(width, height, orientation);
241 | }
242 | setTopology(e = 1, t = 1) {
243 | const n = this;
244 | (n.xSegCount = e),
245 | (n.ySegCount = t),
246 | (n.vertexCount = (n.xSegCount + 1) * (n.ySegCount + 1)),
247 | (n.quadCount = n.xSegCount * n.ySegCount * 2),
248 | (n.attributes.uv.values = new Float32Array(2 * n.vertexCount)),
249 | (n.attributes.uvNorm.values = new Float32Array(
250 | 2 * n.vertexCount
251 | )),
252 | (n.attributes.index.values = new Uint16Array(3 * n.quadCount));
253 | for (let e = 0; e <= n.ySegCount; e++)
254 | for (let t = 0; t <= n.xSegCount; t++) {
255 | const i = e * (n.xSegCount + 1) + t;
256 | if (
257 | ((n.attributes.uv.values[2 * i] = t / n.xSegCount),
258 | (n.attributes.uv.values[2 * i + 1] = 1 - e / n.ySegCount),
259 | (n.attributes.uvNorm.values[2 * i] =
260 | (t / n.xSegCount) * 2 - 1),
261 | (n.attributes.uvNorm.values[2 * i + 1] =
262 | 1 - (e / n.ySegCount) * 2),
263 | t < n.xSegCount && e < n.ySegCount)
264 | ) {
265 | const s = e * n.xSegCount + t;
266 | (n.attributes.index.values[6 * s] = i),
267 | (n.attributes.index.values[6 * s + 1] =
268 | i + 1 + n.xSegCount),
269 | (n.attributes.index.values[6 * s + 2] = i + 1),
270 | (n.attributes.index.values[6 * s + 3] = i + 1),
271 | (n.attributes.index.values[6 * s + 4] =
272 | i + 1 + n.xSegCount),
273 | (n.attributes.index.values[6 * s + 5] =
274 | i + 2 + n.xSegCount);
275 | }
276 | }
277 | n.attributes.uv.update(),
278 | n.attributes.uvNorm.update(),
279 | n.attributes.index.update(),
280 | _miniGl.debug("Geometry.setTopology", {
281 | uv: n.attributes.uv,
282 | uvNorm: n.attributes.uvNorm,
283 | index: n.attributes.index,
284 | });
285 | }
286 | setSize(width = 1, height = 1, orientation = "xz") {
287 | const geometry = this;
288 | (geometry.width = width),
289 | (geometry.height = height),
290 | (geometry.orientation = orientation),
291 | (geometry.attributes.position.values &&
292 | geometry.attributes.position.values.length ===
293 | 3 * geometry.vertexCount) ||
294 | (geometry.attributes.position.values = new Float32Array(
295 | 3 * geometry.vertexCount
296 | ));
297 | const o = width / -2,
298 | r = height / -2,
299 | segment_width = width / geometry.xSegCount,
300 | segment_height = height / geometry.ySegCount;
301 | for (let yIndex = 0; yIndex <= geometry.ySegCount; yIndex++) {
302 | const t = r + yIndex * segment_height;
303 | for (let xIndex = 0; xIndex <= geometry.xSegCount; xIndex++) {
304 | const r = o + xIndex * segment_width,
305 | l = yIndex * (geometry.xSegCount + 1) + xIndex;
306 | (geometry.attributes.position.values[
307 | 3 * l + "xyz".indexOf(orientation[0])
308 | ] = r),
309 | (geometry.attributes.position.values[
310 | 3 * l + "xyz".indexOf(orientation[1])
311 | ] = -t);
312 | }
313 | }
314 | geometry.attributes.position.update(),
315 | _miniGl.debug("Geometry.setSize", {
316 | position: geometry.attributes.position,
317 | });
318 | }
319 | },
320 | },
321 | Mesh: {
322 | enumerable: !1,
323 | value: class {
324 | constructor(geometry, material) {
325 | const mesh = this;
326 | (mesh.geometry = geometry),
327 | (mesh.material = material),
328 | (mesh.wireframe = !1),
329 | (mesh.attributeInstances = []),
330 | Object.entries(mesh.geometry.attributes).forEach(
331 | ([e, attribute]) => {
332 | mesh.attributeInstances.push({
333 | attribute: attribute,
334 | location: attribute.attach(e, mesh.material.program),
335 | });
336 | }
337 | ),
338 | _miniGl.meshes.push(mesh),
339 | _miniGl.debug("Mesh.constructor", {
340 | mesh: mesh,
341 | });
342 | }
343 | draw() {
344 | context.useProgram(this.material.program),
345 | this.material.uniformInstances.forEach(
346 | ({ uniform: e, location: t }) => e.update(t)
347 | ),
348 | this.attributeInstances.forEach(
349 | ({ attribute: e, location: t }) => e.use(t)
350 | ),
351 | context.drawElements(
352 | this.wireframe ? context.LINES : context.TRIANGLES,
353 | this.geometry.attributes.index.values.length,
354 | context.UNSIGNED_SHORT,
355 | 0
356 | );
357 | }
358 | remove() {
359 | _miniGl.meshes = _miniGl.meshes.filter((e) => e != this);
360 | }
361 | },
362 | },
363 | Attribute: {
364 | enumerable: !1,
365 | value: class {
366 | constructor(e) {
367 | (this.type = context.FLOAT),
368 | (this.normalized = !1),
369 | (this.buffer = context.createBuffer()),
370 | Object.assign(this, e),
371 | this.update();
372 | }
373 | update() {
374 | void 0 !== this.values &&
375 | (context.bindBuffer(this.target, this.buffer),
376 | context.bufferData(
377 | this.target,
378 | this.values,
379 | context.STATIC_DRAW
380 | ));
381 | }
382 | attach(e, t) {
383 | const n = context.getAttribLocation(t, e);
384 | return (
385 | this.target === context.ARRAY_BUFFER &&
386 | (context.enableVertexAttribArray(n),
387 | context.vertexAttribPointer(
388 | n,
389 | this.size,
390 | this.type,
391 | this.normalized,
392 | 0,
393 | 0
394 | )),
395 | n
396 | );
397 | }
398 | use(e) {
399 | context.bindBuffer(this.target, this.buffer),
400 | this.target === context.ARRAY_BUFFER &&
401 | (context.enableVertexAttribArray(e),
402 | context.vertexAttribPointer(
403 | e,
404 | this.size,
405 | this.type,
406 | this.normalized,
407 | 0,
408 | 0
409 | ));
410 | }
411 | },
412 | },
413 | });
414 | const a = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
415 | _miniGl.commonUniforms = {
416 | projectionMatrix: new _miniGl.Uniform({
417 | type: "mat4",
418 | value: a,
419 | }),
420 | modelViewMatrix: new _miniGl.Uniform({
421 | type: "mat4",
422 | value: a,
423 | }),
424 | resolution: new _miniGl.Uniform({
425 | type: "vec2",
426 | value: [1, 1],
427 | }),
428 | aspectRatio: new _miniGl.Uniform({
429 | type: "float",
430 | value: 1,
431 | }),
432 | };
433 | }
434 | setSize(e = 640, t = 480) {
435 | (this.width = e),
436 | (this.height = t),
437 | (this.canvas.width = e),
438 | (this.canvas.height = t),
439 | this.gl.viewport(0, 0, e, t),
440 | (this.commonUniforms.resolution.value = [e, t]),
441 | (this.commonUniforms.aspectRatio.value = e / t),
442 | this.debug("MiniGL.setSize", {
443 | width: e,
444 | height: t,
445 | });
446 | }
447 | //left, right, top, bottom, near, far
448 | setOrthographicCamera(e = 0, t = 0, n = 0, i = -2e3, s = 2e3) {
449 | (this.commonUniforms.projectionMatrix.value = [
450 | 2 / this.width,
451 | 0,
452 | 0,
453 | 0,
454 | 0,
455 | 2 / this.height,
456 | 0,
457 | 0,
458 | 0,
459 | 0,
460 | 2 / (i - s),
461 | 0,
462 | e,
463 | t,
464 | n,
465 | 1,
466 | ]),
467 | this.debug(
468 | "setOrthographicCamera",
469 | this.commonUniforms.projectionMatrix.value
470 | );
471 | }
472 | render() {
473 | this.gl.clearColor(0, 0, 0, 0),
474 | this.gl.clearDepth(1),
475 | this.meshes.forEach((e) => e.draw());
476 | }
477 | }
478 |
479 | //Sets initial properties
480 | function e(object, propertyName, val) {
481 | return (
482 | propertyName in object
483 | ? Object.defineProperty(object, propertyName, {
484 | value: val,
485 | enumerable: !0,
486 | configurable: !0,
487 | writable: !0,
488 | })
489 | : (object[propertyName] = val),
490 | object
491 | );
492 | }
493 |
494 | //Gradient object
495 | class Gradient {
496 | constructor(...t) {
497 | e(this, "el", void 0),
498 | e(this, "cssVarRetries", 0),
499 | e(this, "maxCssVarRetries", 200),
500 | e(this, "angle", 0),
501 | e(this, "isLoadedClass", !1),
502 | e(this, "isScrolling", !1),
503 | /*e(this, "isStatic", o.disableAmbientAnimations()),*/ e(
504 | this,
505 | "scrollingTimeout",
506 | void 0
507 | ),
508 | e(this, "scrollingRefreshDelay", 200),
509 | e(this, "isIntersecting", !1),
510 | e(this, "shaderFiles", void 0),
511 | e(this, "vertexShader", void 0),
512 | e(this, "sectionColors", void 0),
513 | e(this, "computedCanvasStyle", void 0),
514 | e(this, "conf", void 0),
515 | e(this, "uniforms", void 0),
516 | e(this, "t", 1253106),
517 | e(this, "last", 0),
518 | e(this, "width", void 0),
519 | e(this, "minWidth", 1111),
520 | e(this, "height", 600),
521 | e(this, "xSegCount", void 0),
522 | e(this, "ySegCount", void 0),
523 | e(this, "mesh", void 0),
524 | e(this, "material", void 0),
525 | e(this, "geometry", void 0),
526 | e(this, "minigl", void 0),
527 | e(this, "scrollObserver", void 0),
528 | e(this, "amp", 320),
529 | e(this, "seed", 5),
530 | e(this, "freqX", 14e-5),
531 | e(this, "freqY", 29e-5),
532 | e(this, "freqDelta", 1e-5),
533 | e(this, "activeColors", [1, 1, 1, 1]),
534 | e(this, "isMetaKey", !1),
535 | e(this, "isGradientLegendVisible", !1),
536 | e(this, "isMouseDown", !1),
537 | e(this, "handleScroll", () => {
538 | clearTimeout(this.scrollingTimeout),
539 | (this.scrollingTimeout = setTimeout(
540 | this.handleScrollEnd,
541 | this.scrollingRefreshDelay
542 | )),
543 | this.isGradientLegendVisible && this.hideGradientLegend(),
544 | this.conf.playing && ((this.isScrolling = !0), this.pause());
545 | }),
546 | e(this, "handleScrollEnd", () => {
547 | (this.isScrolling = !1), this.isIntersecting && this.play();
548 | }),
549 | e(this, "resize", () => {
550 | (this.width = window.innerWidth),
551 | this.minigl.setSize(this.width, this.height),
552 | this.minigl.setOrthographicCamera(),
553 | (this.xSegCount = Math.ceil(this.width * this.conf.density[0])),
554 | (this.ySegCount = Math.ceil(this.height * this.conf.density[1])),
555 | this.mesh.geometry.setTopology(this.xSegCount, this.ySegCount),
556 | this.mesh.geometry.setSize(this.width, this.height),
557 | (this.mesh.material.uniforms.u_shadow_power.value =
558 | this.width < 600 ? 5 : 6);
559 | }),
560 | e(this, "handleMouseDown", (e) => {
561 | this.isGradientLegendVisible &&
562 | ((this.isMetaKey = e.metaKey),
563 | (this.isMouseDown = !0),
564 | !1 === this.conf.playing && requestAnimationFrame(this.animate));
565 | }),
566 | e(this, "handleMouseUp", () => {
567 | this.isMouseDown = !1;
568 | }),
569 | e(this, "animate", (e) => {
570 | if (!this.shouldSkipFrame(e) || this.isMouseDown) {
571 | if (
572 | ((this.t += Math.min(e - this.last, 1e3 / 15)),
573 | (this.last = e),
574 | this.isMouseDown)
575 | ) {
576 | let e = 160;
577 | this.isMetaKey && (e = -160), (this.t += e);
578 | }
579 | (this.mesh.material.uniforms.u_time.value = this.t),
580 | this.minigl.render();
581 | }
582 | if (0 !== this.last && this.isStatic)
583 | return this.minigl.render(), void this.disconnect();
584 | /*this.isIntersecting && */ (this.conf.playing || this.isMouseDown) &&
585 | requestAnimationFrame(this.animate);
586 | }),
587 | e(this, "addIsLoadedClass", () => {
588 | /*this.isIntersecting && */ !this.isLoadedClass &&
589 | ((this.isLoadedClass = !0),
590 | this.el.classList.add("isLoaded"),
591 | setTimeout(() => {
592 | this.el.parentElement.classList.add("isLoaded");
593 | }, 3e3));
594 | }),
595 | e(this, "pause", () => {
596 | this.conf.playing = false;
597 | }),
598 | e(this, "play", () => {
599 | requestAnimationFrame(this.animate), (this.conf.playing = true);
600 | }),
601 | e(this, "initGradient", (selector) => {
602 | this.el = document.querySelector(selector);
603 | this.connect();
604 | return this;
605 | });
606 | }
607 | async connect() {
608 | (this.shaderFiles = {
609 | vertex:
610 | "varying vec3 v_color;\n\nvoid main() {\n float time = u_time * u_global.noiseSpeed;\n\n vec2 noiseCoord = resolution * uvNorm * u_global.noiseFreq;\n\n vec2 st = 1. - uvNorm.xy;\n\n //\n // Tilting the plane\n //\n\n // Front-to-back tilt\n float tilt = resolution.y / 2.0 * uvNorm.y;\n\n // Left-to-right angle\n float incline = resolution.x * uvNorm.x / 2.0 * u_vertDeform.incline;\n\n // Up-down shift to offset incline\n float offset = resolution.x / 2.0 * u_vertDeform.incline * mix(u_vertDeform.offsetBottom, u_vertDeform.offsetTop, uv.y);\n\n //\n // Vertex noise\n //\n\n float noise = snoise(vec3(\n noiseCoord.x * u_vertDeform.noiseFreq.x + time * u_vertDeform.noiseFlow,\n noiseCoord.y * u_vertDeform.noiseFreq.y,\n time * u_vertDeform.noiseSpeed + u_vertDeform.noiseSeed\n )) * u_vertDeform.noiseAmp;\n\n // Fade noise to zero at edges\n noise *= 1.0 - pow(abs(uvNorm.y), 2.0);\n\n // Clamp to 0\n noise = max(0.0, noise);\n\n vec3 pos = vec3(\n position.x,\n position.y + tilt + incline + noise - offset,\n position.z\n );\n\n //\n // Vertex color, to be passed to fragment shader\n //\n\n if (u_active_colors[0] == 1.) {\n v_color = u_baseColor;\n }\n\n for (int i = 0; i < u_waveLayers_length; i++) {\n if (u_active_colors[i + 1] == 1.) {\n WaveLayers layer = u_waveLayers[i];\n\n float noise = smoothstep(\n layer.noiseFloor,\n layer.noiseCeil,\n snoise(vec3(\n noiseCoord.x * layer.noiseFreq.x + time * layer.noiseFlow,\n noiseCoord.y * layer.noiseFreq.y,\n time * layer.noiseSpeed + layer.noiseSeed\n )) / 2.0 + 0.5\n );\n\n v_color = blendNormal(v_color, layer.color, pow(noise, 4.));\n }\n }\n\n //\n // Finish\n //\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);\n}",
611 | noise:
612 | "//\n// Description : Array and textureless GLSL 2D/3D/4D simplex\n// noise functions.\n// Author : Ian McEwan, Ashima Arts.\n// Maintainer : stegu\n// Lastmod : 20110822 (ijm)\n// License : Copyright (C) 2011 Ashima Arts. All rights reserved.\n// Distributed under the MIT License. See LICENSE file.\n// https://github.com/ashima/webgl-noise\n// https://github.com/stegu/webgl-noise\n//\n\nvec3 mod289(vec3 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 mod289(vec4 x) {\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\n\nvec4 permute(vec4 x) {\n return mod289(((x*34.0)+1.0)*x);\n}\n\nvec4 taylorInvSqrt(vec4 r)\n{\n return 1.79284291400159 - 0.85373472095314 * r;\n}\n\nfloat snoise(vec3 v)\n{\n const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n\n// First corner\n vec3 i = floor(v + dot(v, C.yyy) );\n vec3 x0 = v - i + dot(i, C.xxx) ;\n\n// Other corners\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min( g.xyz, l.zxy );\n vec3 i2 = max( g.xyz, l.zxy );\n\n // x0 = x0 - 0.0 + 0.0 * C.xxx;\n // x1 = x0 - i1 + 1.0 * C.xxx;\n // x2 = x0 - i2 + 2.0 * C.xxx;\n // x3 = x0 - 1.0 + 3.0 * C.xxx;\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y\n vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y\n\n// Permutations\n i = mod289(i);\n vec4 p = permute( permute( permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\n\n// Gradients: 7x7 points over a square, mapped onto an octahedron.\n// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\n float n_ = 0.142857142857; // 1.0/7.0\n vec3 ns = n_ * D.wyz - D.xzx;\n\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)\n\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)\n\n vec4 x = x_ *ns.x + ns.yyyy;\n vec4 y = y_ *ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n\n vec4 b0 = vec4( x.xy, y.xy );\n vec4 b1 = vec4( x.zw, y.zw );\n\n //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\n //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\n vec4 s0 = floor(b0)*2.0 + 1.0;\n vec4 s1 = floor(b1)*2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n\n vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\n vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\n\n vec3 p0 = vec3(a0.xy,h.x);\n vec3 p1 = vec3(a0.zw,h.y);\n vec3 p2 = vec3(a1.xy,h.z);\n vec3 p3 = vec3(a1.zw,h.w);\n\n//Normalise gradients\n vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n\n// Mix final noise value\n vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\n m = m * m;\n return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),\n dot(p2,x2), dot(p3,x3) ) );\n}",
613 | blend:
614 | "//\n// https://github.com/jamieowen/glsl-blend\n//\n\n// Normal\n\nvec3 blendNormal(vec3 base, vec3 blend) {\n\treturn blend;\n}\n\nvec3 blendNormal(vec3 base, vec3 blend, float opacity) {\n\treturn (blendNormal(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Screen\n\nfloat blendScreen(float base, float blend) {\n\treturn 1.0-((1.0-base)*(1.0-blend));\n}\n\nvec3 blendScreen(vec3 base, vec3 blend) {\n\treturn vec3(blendScreen(base.r,blend.r),blendScreen(base.g,blend.g),blendScreen(base.b,blend.b));\n}\n\nvec3 blendScreen(vec3 base, vec3 blend, float opacity) {\n\treturn (blendScreen(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Multiply\n\nvec3 blendMultiply(vec3 base, vec3 blend) {\n\treturn base*blend;\n}\n\nvec3 blendMultiply(vec3 base, vec3 blend, float opacity) {\n\treturn (blendMultiply(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Overlay\n\nfloat blendOverlay(float base, float blend) {\n\treturn base<0.5?(2.0*base*blend):(1.0-2.0*(1.0-base)*(1.0-blend));\n}\n\nvec3 blendOverlay(vec3 base, vec3 blend) {\n\treturn vec3(blendOverlay(base.r,blend.r),blendOverlay(base.g,blend.g),blendOverlay(base.b,blend.b));\n}\n\nvec3 blendOverlay(vec3 base, vec3 blend, float opacity) {\n\treturn (blendOverlay(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Hard light\n\nvec3 blendHardLight(vec3 base, vec3 blend) {\n\treturn blendOverlay(blend,base);\n}\n\nvec3 blendHardLight(vec3 base, vec3 blend, float opacity) {\n\treturn (blendHardLight(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Soft light\n\nfloat blendSoftLight(float base, float blend) {\n\treturn (blend<0.5)?(2.0*base*blend+base*base*(1.0-2.0*blend)):(sqrt(base)*(2.0*blend-1.0)+2.0*base*(1.0-blend));\n}\n\nvec3 blendSoftLight(vec3 base, vec3 blend) {\n\treturn vec3(blendSoftLight(base.r,blend.r),blendSoftLight(base.g,blend.g),blendSoftLight(base.b,blend.b));\n}\n\nvec3 blendSoftLight(vec3 base, vec3 blend, float opacity) {\n\treturn (blendSoftLight(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Color dodge\n\nfloat blendColorDodge(float base, float blend) {\n\treturn (blend==1.0)?blend:min(base/(1.0-blend),1.0);\n}\n\nvec3 blendColorDodge(vec3 base, vec3 blend) {\n\treturn vec3(blendColorDodge(base.r,blend.r),blendColorDodge(base.g,blend.g),blendColorDodge(base.b,blend.b));\n}\n\nvec3 blendColorDodge(vec3 base, vec3 blend, float opacity) {\n\treturn (blendColorDodge(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Color burn\n\nfloat blendColorBurn(float base, float blend) {\n\treturn (blend==0.0)?blend:max((1.0-((1.0-base)/blend)),0.0);\n}\n\nvec3 blendColorBurn(vec3 base, vec3 blend) {\n\treturn vec3(blendColorBurn(base.r,blend.r),blendColorBurn(base.g,blend.g),blendColorBurn(base.b,blend.b));\n}\n\nvec3 blendColorBurn(vec3 base, vec3 blend, float opacity) {\n\treturn (blendColorBurn(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Vivid Light\n\nfloat blendVividLight(float base, float blend) {\n\treturn (blend<0.5)?blendColorBurn(base,(2.0*blend)):blendColorDodge(base,(2.0*(blend-0.5)));\n}\n\nvec3 blendVividLight(vec3 base, vec3 blend) {\n\treturn vec3(blendVividLight(base.r,blend.r),blendVividLight(base.g,blend.g),blendVividLight(base.b,blend.b));\n}\n\nvec3 blendVividLight(vec3 base, vec3 blend, float opacity) {\n\treturn (blendVividLight(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Lighten\n\nfloat blendLighten(float base, float blend) {\n\treturn max(blend,base);\n}\n\nvec3 blendLighten(vec3 base, vec3 blend) {\n\treturn vec3(blendLighten(base.r,blend.r),blendLighten(base.g,blend.g),blendLighten(base.b,blend.b));\n}\n\nvec3 blendLighten(vec3 base, vec3 blend, float opacity) {\n\treturn (blendLighten(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Linear burn\n\nfloat blendLinearBurn(float base, float blend) {\n\t// Note : Same implementation as BlendSubtractf\n\treturn max(base+blend-1.0,0.0);\n}\n\nvec3 blendLinearBurn(vec3 base, vec3 blend) {\n\t// Note : Same implementation as BlendSubtract\n\treturn max(base+blend-vec3(1.0),vec3(0.0));\n}\n\nvec3 blendLinearBurn(vec3 base, vec3 blend, float opacity) {\n\treturn (blendLinearBurn(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Linear dodge\n\nfloat blendLinearDodge(float base, float blend) {\n\t// Note : Same implementation as BlendAddf\n\treturn min(base+blend,1.0);\n}\n\nvec3 blendLinearDodge(vec3 base, vec3 blend) {\n\t// Note : Same implementation as BlendAdd\n\treturn min(base+blend,vec3(1.0));\n}\n\nvec3 blendLinearDodge(vec3 base, vec3 blend, float opacity) {\n\treturn (blendLinearDodge(base, blend) * opacity + base * (1.0 - opacity));\n}\n\n// Linear light\n\nfloat blendLinearLight(float base, float blend) {\n\treturn blend<0.5?blendLinearBurn(base,(2.0*blend)):blendLinearDodge(base,(2.0*(blend-0.5)));\n}\n\nvec3 blendLinearLight(vec3 base, vec3 blend) {\n\treturn vec3(blendLinearLight(base.r,blend.r),blendLinearLight(base.g,blend.g),blendLinearLight(base.b,blend.b));\n}\n\nvec3 blendLinearLight(vec3 base, vec3 blend, float opacity) {\n\treturn (blendLinearLight(base, blend) * opacity + base * (1.0 - opacity));\n}",
615 | fragment:
616 | "varying vec3 v_color;\n\nvoid main() {\n vec3 color = v_color;\n if (u_darken_top == 1.0) {\n vec2 st = gl_FragCoord.xy/resolution.xy;\n color.g -= pow(st.y + sin(-12.0) * st.x, u_shadow_power) * 0.4;\n }\n gl_FragColor = vec4(color, 1.0);\n}",
617 | }),
618 | (this.conf = {
619 | presetName: "",
620 | wireframe: false,
621 | density: [0.06, 0.16],
622 | zoom: 1,
623 | rotation: 0,
624 | playing: true,
625 | }),
626 | document.querySelectorAll("canvas").length < 1
627 | ? console.log("DID NOT LOAD HERO STRIPE CANVAS")
628 | : ((this.minigl = new MiniGl(this.el, null, null, !0)),
629 | requestAnimationFrame(() => {
630 | this.el &&
631 | ((this.computedCanvasStyle = getComputedStyle(this.el)),
632 | this.waitForCssVars());
633 | }));
634 | /*
635 | this.scrollObserver = await s.create(.1, !1),
636 | this.scrollObserver.observe(this.el),
637 | this.scrollObserver.onSeparate(() => {
638 | window.removeEventListener("scroll", this.handleScroll), window.removeEventListener("mousedown", this.handleMouseDown), window.removeEventListener("mouseup", this.handleMouseUp), window.removeEventListener("keydown", this.handleKeyDown), this.isIntersecting = !1, this.conf.playing && this.pause()
639 | }),
640 | this.scrollObserver.onIntersect(() => {
641 | window.addEventListener("scroll", this.handleScroll), window.addEventListener("mousedown", this.handleMouseDown), window.addEventListener("mouseup", this.handleMouseUp), window.addEventListener("keydown", this.handleKeyDown), this.isIntersecting = !0, this.addIsLoadedClass(), this.play()
642 | })*/
643 | }
644 | disconnect() {
645 | this.scrollObserver &&
646 | (window.removeEventListener("scroll", this.handleScroll),
647 | window.removeEventListener("mousedown", this.handleMouseDown),
648 | window.removeEventListener("mouseup", this.handleMouseUp),
649 | window.removeEventListener("keydown", this.handleKeyDown),
650 | this.scrollObserver.disconnect()),
651 | window.removeEventListener("resize", this.resize);
652 | }
653 | initMaterial() {
654 | this.uniforms = {
655 | u_time: new this.minigl.Uniform({
656 | value: 0,
657 | }),
658 | u_shadow_power: new this.minigl.Uniform({
659 | value: 5,
660 | }),
661 | u_darken_top: new this.minigl.Uniform({
662 | value: "" === this.el.dataset.jsDarkenTop ? 1 : 0,
663 | }),
664 | u_active_colors: new this.minigl.Uniform({
665 | value: this.activeColors,
666 | type: "vec4",
667 | }),
668 | u_global: new this.minigl.Uniform({
669 | value: {
670 | noiseFreq: new this.minigl.Uniform({
671 | value: [this.freqX, this.freqY],
672 | type: "vec2",
673 | }),
674 | noiseSpeed: new this.minigl.Uniform({
675 | value: 5e-6,
676 | }),
677 | },
678 | type: "struct",
679 | }),
680 | u_vertDeform: new this.minigl.Uniform({
681 | value: {
682 | incline: new this.minigl.Uniform({
683 | value: Math.sin(this.angle) / Math.cos(this.angle),
684 | }),
685 | offsetTop: new this.minigl.Uniform({
686 | value: -0.5,
687 | }),
688 | offsetBottom: new this.minigl.Uniform({
689 | value: -0.5,
690 | }),
691 | noiseFreq: new this.minigl.Uniform({
692 | value: [3, 4],
693 | type: "vec2",
694 | }),
695 | noiseAmp: new this.minigl.Uniform({
696 | value: this.amp,
697 | }),
698 | noiseSpeed: new this.minigl.Uniform({
699 | value: 10,
700 | }),
701 | noiseFlow: new this.minigl.Uniform({
702 | value: 3,
703 | }),
704 | noiseSeed: new this.minigl.Uniform({
705 | value: this.seed,
706 | }),
707 | },
708 | type: "struct",
709 | excludeFrom: "fragment",
710 | }),
711 | u_baseColor: new this.minigl.Uniform({
712 | value: this.sectionColors[0],
713 | type: "vec3",
714 | excludeFrom: "fragment",
715 | }),
716 | u_waveLayers: new this.minigl.Uniform({
717 | value: [],
718 | excludeFrom: "fragment",
719 | type: "array",
720 | }),
721 | };
722 | for (let e = 1; e < this.sectionColors.length; e += 1)
723 | this.uniforms.u_waveLayers.value.push(
724 | new this.minigl.Uniform({
725 | value: {
726 | color: new this.minigl.Uniform({
727 | value: this.sectionColors[e],
728 | type: "vec3",
729 | }),
730 | noiseFreq: new this.minigl.Uniform({
731 | value: [
732 | 2 + e / this.sectionColors.length,
733 | 3 + e / this.sectionColors.length,
734 | ],
735 | type: "vec2",
736 | }),
737 | noiseSpeed: new this.minigl.Uniform({
738 | value: 11 + 0.3 * e,
739 | }),
740 | noiseFlow: new this.minigl.Uniform({
741 | value: 6.5 + 0.3 * e,
742 | }),
743 | noiseSeed: new this.minigl.Uniform({
744 | value: this.seed + 10 * e,
745 | }),
746 | noiseFloor: new this.minigl.Uniform({
747 | value: 0.1,
748 | }),
749 | noiseCeil: new this.minigl.Uniform({
750 | value: 0.63 + 0.07 * e,
751 | }),
752 | },
753 | type: "struct",
754 | })
755 | );
756 | return (
757 | (this.vertexShader = [
758 | this.shaderFiles.noise,
759 | this.shaderFiles.blend,
760 | this.shaderFiles.vertex,
761 | ].join("\n\n")),
762 | new this.minigl.Material(
763 | this.vertexShader,
764 | this.shaderFiles.fragment,
765 | this.uniforms
766 | )
767 | );
768 | }
769 | initMesh() {
770 | (this.material = this.initMaterial()),
771 | (this.geometry = new this.minigl.PlaneGeometry()),
772 | (this.mesh = new this.minigl.Mesh(this.geometry, this.material));
773 | }
774 | shouldSkipFrame(e) {
775 | return (
776 | !!window.document.hidden ||
777 | !this.conf.playing ||
778 | parseInt(e, 10) % 2 == 0 ||
779 | void 0
780 | );
781 | }
782 | updateFrequency(e) {
783 | (this.freqX += e), (this.freqY += e);
784 | }
785 | toggleColor(index) {
786 | this.activeColors[index] = 0 === this.activeColors[index] ? 1 : 0;
787 | }
788 | showGradientLegend() {
789 | this.width > this.minWidth &&
790 | ((this.isGradientLegendVisible = !0),
791 | document.body.classList.add("isGradientLegendVisible"));
792 | }
793 | hideGradientLegend() {
794 | (this.isGradientLegendVisible = !1),
795 | document.body.classList.remove("isGradientLegendVisible");
796 | }
797 | init() {
798 | this.initGradientColors(),
799 | this.initMesh(),
800 | this.resize(),
801 | requestAnimationFrame(this.animate),
802 | window.addEventListener("resize", this.resize);
803 | }
804 | /*
805 | * Waiting for the css variables to become available, usually on page load before we can continue.
806 | * Using default colors assigned below if no variables have been found after maxCssVarRetries
807 | */
808 | waitForCssVars() {
809 | if (
810 | this.computedCanvasStyle &&
811 | -1 !==
812 | this.computedCanvasStyle
813 | .getPropertyValue("--gradient-color-1")
814 | .indexOf("#")
815 | )
816 | this.init(), this.addIsLoadedClass();
817 | else {
818 | if (
819 | ((this.cssVarRetries += 1), this.cssVarRetries > this.maxCssVarRetries)
820 | ) {
821 | return (
822 | (this.sectionColors = [16711680, 16711680, 16711935, 65280, 255]),
823 | void this.init()
824 | );
825 | }
826 | requestAnimationFrame(() => this.waitForCssVars());
827 | }
828 | }
829 | /*
830 | * Initializes the four section colors by retrieving them from css variables.
831 | */
832 | initGradientColors() {
833 | this.sectionColors = [
834 | "--gradient-color-1",
835 | "--gradient-color-2",
836 | "--gradient-color-3",
837 | "--gradient-color-4",
838 | ]
839 | .map((cssPropertyName) => {
840 | let hex = this.computedCanvasStyle
841 | .getPropertyValue(cssPropertyName)
842 | .trim();
843 | //Check if shorthand hex value was used and double the length so the conversion in normalizeColor will work.
844 | if (4 === hex.length) {
845 | const hexTemp = hex
846 | .substr(1)
847 | .split("")
848 | .map((hexTemp) => hexTemp + hexTemp)
849 | .join("");
850 | hex = `#${hexTemp}`;
851 | }
852 | return hex && `0x${hex.substr(1)}`;
853 | })
854 | .filter(Boolean)
855 | .map(normalizeColor);
856 | }
857 | }
858 |
859 | /*
860 | *Finally initializing the Gradient class, assigning a canvas to it and calling Gradient.connect() which initializes everything,
861 | * Use Gradient.pause() and Gradient.play() for controls.
862 | *
863 | * Here are some default property values you can change anytime:
864 | * Amplitude: Gradient.amp = 0
865 | * Colors: Gradient.sectionColors (if you change colors, use normalizeColor(#hexValue)) before you assign it.
866 | *
867 | *
868 | * Useful functions
869 | * Gradient.toggleColor(index)
870 | * Gradient.updateFrequency(freq)
871 | */
872 | // var gradient = new Gradient();
873 | // gradient.initGradient("#gradient-canvas");
874 |
875 | export { Gradient };
876 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/helper-validator-identifier@^7.14.9":
6 | version "7.14.9"
7 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48"
8 | integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==
9 |
10 | "@babel/parser@^7.15.0", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6":
11 | version "7.15.6"
12 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.6.tgz#043b9aa3c303c0722e5377fef9197f4cf1796549"
13 | integrity sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==
14 |
15 | "@babel/types@^7.15.0", "@babel/types@^7.6.1", "@babel/types@^7.9.6":
16 | version "7.15.6"
17 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f"
18 | integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==
19 | dependencies:
20 | "@babel/helper-validator-identifier" "^7.14.9"
21 | to-fast-properties "^2.0.0"
22 |
23 | "@emmetio/abbreviation@^2.2.2":
24 | version "2.2.2"
25 | resolved "https://registry.yarnpkg.com/@emmetio/abbreviation/-/abbreviation-2.2.2.tgz#746762fd9e7a8c2ea604f580c62e3cfe250e6989"
26 | integrity sha512-TtE/dBnkTCct8+LntkqVrwqQao6EnPAs1YN3cUgxOxTaBlesBCY37ROUAVZrRlG64GNnVShdl/b70RfAI3w5lw==
27 | dependencies:
28 | "@emmetio/scanner" "^1.0.0"
29 |
30 | "@emmetio/css-abbreviation@^2.1.4":
31 | version "2.1.4"
32 | resolved "https://registry.yarnpkg.com/@emmetio/css-abbreviation/-/css-abbreviation-2.1.4.tgz#90362e8a1122ce3b76f6c3157907d30182f53f54"
33 | integrity sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==
34 | dependencies:
35 | "@emmetio/scanner" "^1.0.0"
36 |
37 | "@emmetio/scanner@^1.0.0":
38 | version "1.0.0"
39 | resolved "https://registry.yarnpkg.com/@emmetio/scanner/-/scanner-1.0.0.tgz#065b2af6233fe7474d44823e3deb89724af42b5f"
40 | integrity sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==
41 |
42 | "@types/estree@^0.0.48":
43 | version "0.0.48"
44 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74"
45 | integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==
46 |
47 | "@vitejs/plugin-vue@^1.6.1":
48 | version "1.6.2"
49 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.6.2.tgz#40dfe314cff610d4dd027a0b4ea2a93a257f3fc9"
50 | integrity sha512-Pf+dqkT4pWPfziPm51VtDXsPwE74CEGRiK6Vgm5EDBewHw1EgcxG7V2ZI/Yqj5gcDy5nVtjgx0AbsTL+F3gddg==
51 |
52 | "@volar/code-gen@^0.27.14":
53 | version "0.27.14"
54 | resolved "https://registry.yarnpkg.com/@volar/code-gen/-/code-gen-0.27.14.tgz#fea4bde0c05b81f22e16185e01ecb6fedd842e05"
55 | integrity sha512-RVu9CNuaiJxBWKU8J7xJogrSlEjOnJS/hVP0zhSYRcOXmnpb0EI/zf111bV2Ng9fj7kP/MQCmCVRikIAJf/wAw==
56 | dependencies:
57 | "@volar/shared" "^0.27.14"
58 | "@volar/source-map" "^0.27.14"
59 |
60 | "@volar/html2pug@^0.27.13":
61 | version "0.27.13"
62 | resolved "https://registry.yarnpkg.com/@volar/html2pug/-/html2pug-0.27.13.tgz#48dfa73ecf1ef1955a02a046d0c88845950fac85"
63 | integrity sha512-3NYgNA5F3PDsKbbpOrVdGy2S7ZYmZIbFmbp1A/27DDzjj/uIC9Pj7HXVvbYOzi8HcOxUPt0BMrh4TVzBUaCFww==
64 | dependencies:
65 | domelementtype "^2.2.0"
66 | domhandler "^4.2.0"
67 | htmlparser2 "^6.1.0"
68 | pug "^3.0.2"
69 |
70 | "@volar/shared@^0.27.14":
71 | version "0.27.14"
72 | resolved "https://registry.yarnpkg.com/@volar/shared/-/shared-0.27.14.tgz#d98f2b0b890e315cc20b4edb5e1ffbe8aad2297a"
73 | integrity sha512-yIz0ak2oQ3w1wWmMq2nuDlAjoW51tqNTJl8xMrhI04to/ebg8fnq8Y4jvvSjTZrFm4I4a4E0PfyTTXf3gdX8Zg==
74 | dependencies:
75 | upath "^2.0.1"
76 | vscode-jsonrpc "^8.0.0-next.2"
77 | vscode-uri "^3.0.2"
78 |
79 | "@volar/source-map@^0.27.14":
80 | version "0.27.14"
81 | resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-0.27.14.tgz#0b5656f74b5a85887efec97ea112caad9cc52a97"
82 | integrity sha512-NNNj6ltDRhHN7AYvka3JbJyeNUpAbIUitvaElTIYph6XM+JRYFDpDu72dmJ0ZlIQ7MwcvcxRkwGpli9udiqtig==
83 | dependencies:
84 | "@volar/shared" "^0.27.14"
85 |
86 | "@volar/transforms@^0.27.14":
87 | version "0.27.14"
88 | resolved "https://registry.yarnpkg.com/@volar/transforms/-/transforms-0.27.14.tgz#b796ddb844b6f9f5301f5941092f9ed95a2db12d"
89 | integrity sha512-sKUGlfIwtG/ZHy/cUs03O+enXgwFPsec00XvbxTH0+Bje3NMFUmzT2s+Uvyq88bxH2HDcGB2kkXiPz5MpUJqfg==
90 | dependencies:
91 | "@volar/shared" "^0.27.14"
92 | vscode-languageserver "^8.0.0-next.2"
93 |
94 | "@vscode/emmet-helper@^2.7.0":
95 | version "2.7.0"
96 | resolved "https://registry.yarnpkg.com/@vscode/emmet-helper/-/emmet-helper-2.7.0.tgz#3db485f6a650196ff8bbd38ba1b9e468ec8d22f8"
97 | integrity sha512-LL7MoKNLUQASacQROO7hBdx5IAxsEnA0UdJFd9xXyf3sBQgz8NE3QEfo3IezE7uin8W2fkG2+EXMst3oqK6+KQ==
98 | dependencies:
99 | emmet "^2.3.0"
100 | jsonc-parser "^2.3.0"
101 | vscode-languageserver-textdocument "^1.0.1"
102 | vscode-languageserver-types "^3.15.1"
103 | vscode-nls "^5.0.0"
104 | vscode-uri "^2.1.2"
105 |
106 | "@vue/compiler-core@3.2.11":
107 | version "3.2.11"
108 | resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.11.tgz#10af3777dba303ee7aae668029f131cb90391bee"
109 | integrity sha512-bcbsLx5XyQg8WDDEGwmpX0BfEfv82wIs9fWFelpyVhNRGMaABvUTalYINyfhVT+jOqNaD4JBhJiVKd/8TmsHWg==
110 | dependencies:
111 | "@babel/parser" "^7.15.0"
112 | "@babel/types" "^7.15.0"
113 | "@vue/shared" "3.2.11"
114 | estree-walker "^2.0.2"
115 | source-map "^0.6.1"
116 |
117 | "@vue/compiler-dom@3.2.11", "@vue/compiler-dom@^3.2.6":
118 | version "3.2.11"
119 | resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.11.tgz#d066f8e1f1812b4e881593819ade0fe6d654c776"
120 | integrity sha512-DNvhUHI/1Hn0/+ZYDYGAuDGasUm+XHKC3FE4GqkNCTO/fcLaJMRg/7eT1m1lkc7jPffUwwfh1rZru5mwzOjrNw==
121 | dependencies:
122 | "@vue/compiler-core" "3.2.11"
123 | "@vue/shared" "3.2.11"
124 |
125 | "@vue/compiler-sfc@^3.2.6":
126 | version "3.2.11"
127 | resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.11.tgz#628fa12238760d9b9b339ac2e125a759224fadbf"
128 | integrity sha512-cUIaS8mgJrQ6yucj2AupWAwBRITK3W/a8wCOn9g5fJGtOl8h4APY8vN3lzP8HIJDyEeRF3I8SfRhL+oX97kSnw==
129 | dependencies:
130 | "@babel/parser" "^7.15.0"
131 | "@babel/types" "^7.15.0"
132 | "@types/estree" "^0.0.48"
133 | "@vue/compiler-core" "3.2.11"
134 | "@vue/compiler-dom" "3.2.11"
135 | "@vue/compiler-ssr" "3.2.11"
136 | "@vue/ref-transform" "3.2.11"
137 | "@vue/shared" "3.2.11"
138 | consolidate "^0.16.0"
139 | estree-walker "^2.0.2"
140 | hash-sum "^2.0.0"
141 | lru-cache "^5.1.1"
142 | magic-string "^0.25.7"
143 | merge-source-map "^1.1.0"
144 | postcss "^8.1.10"
145 | postcss-modules "^4.0.0"
146 | postcss-selector-parser "^6.0.4"
147 | source-map "^0.6.1"
148 |
149 | "@vue/compiler-ssr@3.2.11":
150 | version "3.2.11"
151 | resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.11.tgz#702cef3429651645bdbe09fe5962803b5a621abb"
152 | integrity sha512-+ptAdUlFDij+Z0VGCbRRkxQlNev5LkbZAntvkxrFjc08CTMhZmiV4Js48n2hAmuSXaKNEpmGkDGU26c/vf1+xw==
153 | dependencies:
154 | "@vue/compiler-dom" "3.2.11"
155 | "@vue/shared" "3.2.11"
156 |
157 | "@vue/reactivity@3.2.11", "@vue/reactivity@^3.2.6":
158 | version "3.2.11"
159 | resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.11.tgz#ec04d33acaf2b92cca2960535bec81b26cc5772b"
160 | integrity sha512-hEQstxPQbgGZq5qApzrvbDmRdK1KP96O/j4XrwT8fVkT1ytkFs4fH2xNEh9QKwXfybbQkLs77W7OfXCv5o6qbA==
161 | dependencies:
162 | "@vue/shared" "3.2.11"
163 |
164 | "@vue/ref-transform@3.2.11":
165 | version "3.2.11"
166 | resolved "https://registry.yarnpkg.com/@vue/ref-transform/-/ref-transform-3.2.11.tgz#4d282b9570d1485a73e7bf5d57cce27b4a7aa690"
167 | integrity sha512-7rX0YsfYb7+1PeKPME1tQyUQcQgt0sIXRRnPD1Vw8Zs2KIo90YLy9CrvwalcRCxGw0ScsjBEhVjJtWIT79TElg==
168 | dependencies:
169 | "@babel/parser" "^7.15.0"
170 | "@vue/compiler-core" "3.2.11"
171 | "@vue/shared" "3.2.11"
172 | estree-walker "^2.0.2"
173 | magic-string "^0.25.7"
174 |
175 | "@vue/runtime-core@3.2.11":
176 | version "3.2.11"
177 | resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.11.tgz#0dbe801be4bd0bfde253226797e7d304c8fdda30"
178 | integrity sha512-horlxjWwSvModC87WdsWswzzHE5IexmKkQA65S5vFgP5hLUBW+HRyScDeuB/RRcFmqnf+ozacNCfap0kqcpODw==
179 | dependencies:
180 | "@vue/reactivity" "3.2.11"
181 | "@vue/shared" "3.2.11"
182 |
183 | "@vue/runtime-dom@3.2.11":
184 | version "3.2.11"
185 | resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.11.tgz#04f9054a9e64bdf156c2fc22cad67cfaa8b84616"
186 | integrity sha512-cOK1g0INdiCbds2xrrJKrrN+pDHuLz6esUs/crdEiupDuX7IeiMbdqrAQCkYHp5P1KLWcbGlkmwfVD7HQGii0Q==
187 | dependencies:
188 | "@vue/runtime-core" "3.2.11"
189 | "@vue/shared" "3.2.11"
190 | csstype "^2.6.8"
191 |
192 | "@vue/shared@3.2.11", "@vue/shared@^3.2.6":
193 | version "3.2.11"
194 | resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.11.tgz#01899f54949caf1ac241de397bd17069632574de"
195 | integrity sha512-ovfXAsSsCvV9JVceWjkqC/7OF5HbgLOtCWjCIosmPGG8lxbPuavhIxRH1dTx4Dg9xLgRTNLvI3pVxG4ItQZekg==
196 |
197 | acorn@^7.1.1:
198 | version "7.4.1"
199 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
200 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
201 |
202 | anymatch@~3.1.2:
203 | version "3.1.2"
204 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
205 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
206 | dependencies:
207 | normalize-path "^3.0.0"
208 | picomatch "^2.0.4"
209 |
210 | asap@~2.0.3:
211 | version "2.0.6"
212 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
213 | integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
214 |
215 | assert-never@^1.2.1:
216 | version "1.2.1"
217 | resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe"
218 | integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==
219 |
220 | babel-walk@3.0.0-canary-5:
221 | version "3.0.0-canary-5"
222 | resolved "https://registry.yarnpkg.com/babel-walk/-/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11"
223 | integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==
224 | dependencies:
225 | "@babel/types" "^7.9.6"
226 |
227 | big.js@^5.2.2:
228 | version "5.2.2"
229 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
230 | integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
231 |
232 | binary-extensions@^2.0.0:
233 | version "2.2.0"
234 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
235 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
236 |
237 | bluebird@^3.7.2:
238 | version "3.7.2"
239 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
240 | integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
241 |
242 | braces@~3.0.2:
243 | version "3.0.2"
244 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
245 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
246 | dependencies:
247 | fill-range "^7.0.1"
248 |
249 | call-bind@^1.0.2:
250 | version "1.0.2"
251 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
252 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
253 | dependencies:
254 | function-bind "^1.1.1"
255 | get-intrinsic "^1.0.2"
256 |
257 | character-parser@^2.2.0:
258 | version "2.2.0"
259 | resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0"
260 | integrity sha1-x84o821LzZdE5f/CxfzeHHMmH8A=
261 | dependencies:
262 | is-regex "^1.0.3"
263 |
264 | "chokidar@>=3.0.0 <4.0.0":
265 | version "3.5.2"
266 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
267 | integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==
268 | dependencies:
269 | anymatch "~3.1.2"
270 | braces "~3.0.2"
271 | glob-parent "~5.1.2"
272 | is-binary-path "~2.1.0"
273 | is-glob "~4.0.1"
274 | normalize-path "~3.0.0"
275 | readdirp "~3.6.0"
276 | optionalDependencies:
277 | fsevents "~2.3.2"
278 |
279 | clipboard@^2.0.6:
280 | version "2.0.8"
281 | resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.8.tgz#ffc6c103dd2967a83005f3f61976aa4655a4cdba"
282 | integrity sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==
283 | dependencies:
284 | good-listener "^1.2.2"
285 | select "^1.1.2"
286 | tiny-emitter "^2.0.0"
287 |
288 | color-schemes-generator@^1.0.1:
289 | version "1.0.1"
290 | resolved "https://registry.yarnpkg.com/color-schemes-generator/-/color-schemes-generator-1.0.1.tgz#10823c9605bb4ce1687666617844a4a091d8b9f2"
291 | integrity sha512-pmXbEO84zprScjQR2C2wJ980VX0uk2FjUYvjOox91YnX5xgzeNvnCEhANgC7q3RLQE8GnKdJTAzpmbkJsa3LRg==
292 |
293 | colorette@^1.2.2:
294 | version "1.4.0"
295 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40"
296 | integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==
297 |
298 | consolidate@^0.16.0:
299 | version "0.16.0"
300 | resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.16.0.tgz#a11864768930f2f19431660a65906668f5fbdc16"
301 | integrity sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==
302 | dependencies:
303 | bluebird "^3.7.2"
304 |
305 | constantinople@^4.0.1:
306 | version "4.0.1"
307 | resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-4.0.1.tgz#0def113fa0e4dc8de83331a5cf79c8b325213151"
308 | integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==
309 | dependencies:
310 | "@babel/parser" "^7.6.0"
311 | "@babel/types" "^7.6.1"
312 |
313 | cssesc@^3.0.0:
314 | version "3.0.0"
315 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
316 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
317 |
318 | csstype@^2.6.8:
319 | version "2.6.17"
320 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.17.tgz#4cf30eb87e1d1a005d8b6510f95292413f6a1c0e"
321 | integrity sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==
322 |
323 | delegate@^3.1.2:
324 | version "3.2.0"
325 | resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
326 | integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
327 |
328 | doctypes@^1.1.0:
329 | version "1.1.0"
330 | resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9"
331 | integrity sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=
332 |
333 | dom-serializer@^1.0.1:
334 | version "1.3.2"
335 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91"
336 | integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==
337 | dependencies:
338 | domelementtype "^2.0.1"
339 | domhandler "^4.2.0"
340 | entities "^2.0.0"
341 |
342 | domelementtype@^2.0.1, domelementtype@^2.2.0:
343 | version "2.2.0"
344 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
345 | integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
346 |
347 | domhandler@^4.0.0, domhandler@^4.2.0:
348 | version "4.2.2"
349 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz#e825d721d19a86b8c201a35264e226c678ee755f"
350 | integrity sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==
351 | dependencies:
352 | domelementtype "^2.2.0"
353 |
354 | domutils@^2.5.2:
355 | version "2.8.0"
356 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
357 | integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
358 | dependencies:
359 | dom-serializer "^1.0.1"
360 | domelementtype "^2.2.0"
361 | domhandler "^4.2.0"
362 |
363 | emmet@^2.3.0:
364 | version "2.3.4"
365 | resolved "https://registry.yarnpkg.com/emmet/-/emmet-2.3.4.tgz#5ba0d7a5569a68c7697dfa890c772e4f3179d123"
366 | integrity sha512-3IqSwmO+N2ZGeuhDyhV/TIOJFUbkChi53bcasSNRE7Yd+4eorbbYz4e53TpMECt38NtYkZNupQCZRlwdAYA42A==
367 | dependencies:
368 | "@emmetio/abbreviation" "^2.2.2"
369 | "@emmetio/css-abbreviation" "^2.1.4"
370 |
371 | emojis-list@^3.0.0:
372 | version "3.0.0"
373 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
374 | integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
375 |
376 | entities@^2.0.0:
377 | version "2.2.0"
378 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
379 | integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
380 |
381 | esbuild@^0.12.17:
382 | version "0.12.26"
383 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.26.tgz#35f2d58ac3fa4629df24aa4d6fd72feb5522e94b"
384 | integrity sha512-YmTkhPKjvTJ+G5e96NyhGf69bP+hzO0DscqaVJTi5GM34uaD4Ecj7omu5lJO+NrxCUBRhy2chONLK1h/2LwoXA==
385 |
386 | estree-walker@^2.0.2:
387 | version "2.0.2"
388 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
389 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
390 |
391 | fill-range@^7.0.1:
392 | version "7.0.1"
393 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
394 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
395 | dependencies:
396 | to-regex-range "^5.0.1"
397 |
398 | fsevents@~2.3.2:
399 | version "2.3.2"
400 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
401 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
402 |
403 | function-bind@^1.1.1:
404 | version "1.1.1"
405 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
406 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
407 |
408 | generic-names@^2.0.1:
409 | version "2.0.1"
410 | resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872"
411 | integrity sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==
412 | dependencies:
413 | loader-utils "^1.1.0"
414 |
415 | get-intrinsic@^1.0.2:
416 | version "1.1.1"
417 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
418 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
419 | dependencies:
420 | function-bind "^1.1.1"
421 | has "^1.0.3"
422 | has-symbols "^1.0.1"
423 |
424 | glob-parent@~5.1.2:
425 | version "5.1.2"
426 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
427 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
428 | dependencies:
429 | is-glob "^4.0.1"
430 |
431 | good-listener@^1.2.2:
432 | version "1.2.2"
433 | resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
434 | integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=
435 | dependencies:
436 | delegate "^3.1.2"
437 |
438 | has-symbols@^1.0.1, has-symbols@^1.0.2:
439 | version "1.0.2"
440 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
441 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
442 |
443 | has-tostringtag@^1.0.0:
444 | version "1.0.0"
445 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
446 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
447 | dependencies:
448 | has-symbols "^1.0.2"
449 |
450 | has@^1.0.3:
451 | version "1.0.3"
452 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
453 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
454 | dependencies:
455 | function-bind "^1.1.1"
456 |
457 | hash-sum@^2.0.0:
458 | version "2.0.0"
459 | resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"
460 | integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==
461 |
462 | htmlparser2@^6.1.0:
463 | version "6.1.0"
464 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
465 | integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==
466 | dependencies:
467 | domelementtype "^2.0.1"
468 | domhandler "^4.0.0"
469 | domutils "^2.5.2"
470 | entities "^2.0.0"
471 |
472 | icss-replace-symbols@^1.1.0:
473 | version "1.1.0"
474 | resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
475 | integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
476 |
477 | icss-utils@^5.0.0:
478 | version "5.1.0"
479 | resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
480 | integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
481 |
482 | is-binary-path@~2.1.0:
483 | version "2.1.0"
484 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
485 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
486 | dependencies:
487 | binary-extensions "^2.0.0"
488 |
489 | is-core-module@^2.2.0:
490 | version "2.6.0"
491 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.6.0.tgz#d7553b2526fe59b92ba3e40c8df757ec8a709e19"
492 | integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==
493 | dependencies:
494 | has "^1.0.3"
495 |
496 | is-expression@^4.0.0:
497 | version "4.0.0"
498 | resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-4.0.0.tgz#c33155962abf21d0afd2552514d67d2ec16fd2ab"
499 | integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==
500 | dependencies:
501 | acorn "^7.1.1"
502 | object-assign "^4.1.1"
503 |
504 | is-extglob@^2.1.1:
505 | version "2.1.1"
506 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
507 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
508 |
509 | is-glob@^4.0.1, is-glob@~4.0.1:
510 | version "4.0.1"
511 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
512 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
513 | dependencies:
514 | is-extglob "^2.1.1"
515 |
516 | is-number@^7.0.0:
517 | version "7.0.0"
518 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
519 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
520 |
521 | is-promise@^2.0.0:
522 | version "2.2.2"
523 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
524 | integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
525 |
526 | is-regex@^1.0.3:
527 | version "1.1.4"
528 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
529 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
530 | dependencies:
531 | call-bind "^1.0.2"
532 | has-tostringtag "^1.0.0"
533 |
534 | js-stringify@^1.0.2:
535 | version "1.0.2"
536 | resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db"
537 | integrity sha1-Fzb939lyTyijaCrcYjCufk6Weds=
538 |
539 | json5@^1.0.1:
540 | version "1.0.1"
541 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
542 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
543 | dependencies:
544 | minimist "^1.2.0"
545 |
546 | jsonc-parser@^2.3.0:
547 | version "2.3.1"
548 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342"
549 | integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==
550 |
551 | jsonc-parser@^3.0.0:
552 | version "3.0.0"
553 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22"
554 | integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==
555 |
556 | jstransformer@1.0.0:
557 | version "1.0.0"
558 | resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3"
559 | integrity sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=
560 | dependencies:
561 | is-promise "^2.0.0"
562 | promise "^7.0.1"
563 |
564 | loader-utils@^1.1.0:
565 | version "1.4.0"
566 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
567 | integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
568 | dependencies:
569 | big.js "^5.2.2"
570 | emojis-list "^3.0.0"
571 | json5 "^1.0.1"
572 |
573 | lodash.camelcase@^4.3.0:
574 | version "4.3.0"
575 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
576 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
577 |
578 | lru-cache@^5.1.1:
579 | version "5.1.1"
580 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
581 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
582 | dependencies:
583 | yallist "^3.0.2"
584 |
585 | lru-cache@^6.0.0:
586 | version "6.0.0"
587 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
588 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
589 | dependencies:
590 | yallist "^4.0.0"
591 |
592 | magic-string@^0.25.7:
593 | version "0.25.7"
594 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
595 | integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
596 | dependencies:
597 | sourcemap-codec "^1.4.4"
598 |
599 | merge-source-map@^1.1.0:
600 | version "1.1.0"
601 | resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
602 | integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
603 | dependencies:
604 | source-map "^0.6.1"
605 |
606 | minimist@^1.2.0:
607 | version "1.2.5"
608 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
609 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
610 |
611 | nanoid@^3.1.23:
612 | version "3.1.25"
613 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152"
614 | integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==
615 |
616 | normalize-path@^3.0.0, normalize-path@~3.0.0:
617 | version "3.0.0"
618 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
619 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
620 |
621 | object-assign@^4.1.1:
622 | version "4.1.1"
623 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
624 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
625 |
626 | path-parse@^1.0.6:
627 | version "1.0.7"
628 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
629 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
630 |
631 | picomatch@^2.0.4, picomatch@^2.2.1:
632 | version "2.3.0"
633 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
634 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
635 |
636 | postcss-modules-extract-imports@^3.0.0:
637 | version "3.0.0"
638 | resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
639 | integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
640 |
641 | postcss-modules-local-by-default@^4.0.0:
642 | version "4.0.0"
643 | resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c"
644 | integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==
645 | dependencies:
646 | icss-utils "^5.0.0"
647 | postcss-selector-parser "^6.0.2"
648 | postcss-value-parser "^4.1.0"
649 |
650 | postcss-modules-scope@^3.0.0:
651 | version "3.0.0"
652 | resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06"
653 | integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==
654 | dependencies:
655 | postcss-selector-parser "^6.0.4"
656 |
657 | postcss-modules-values@^4.0.0:
658 | version "4.0.0"
659 | resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
660 | integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
661 | dependencies:
662 | icss-utils "^5.0.0"
663 |
664 | postcss-modules@^4.0.0:
665 | version "4.2.2"
666 | resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-4.2.2.tgz#5e7777c5a8964ea176919d90b2e54ef891321ce5"
667 | integrity sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==
668 | dependencies:
669 | generic-names "^2.0.1"
670 | icss-replace-symbols "^1.1.0"
671 | lodash.camelcase "^4.3.0"
672 | postcss-modules-extract-imports "^3.0.0"
673 | postcss-modules-local-by-default "^4.0.0"
674 | postcss-modules-scope "^3.0.0"
675 | postcss-modules-values "^4.0.0"
676 | string-hash "^1.1.1"
677 |
678 | postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
679 | version "6.0.6"
680 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea"
681 | integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==
682 | dependencies:
683 | cssesc "^3.0.0"
684 | util-deprecate "^1.0.2"
685 |
686 | postcss-value-parser@^4.1.0:
687 | version "4.1.0"
688 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
689 | integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
690 |
691 | postcss@^8.1.10, postcss@^8.3.6:
692 | version "8.3.6"
693 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea"
694 | integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==
695 | dependencies:
696 | colorette "^1.2.2"
697 | nanoid "^3.1.23"
698 | source-map-js "^0.6.2"
699 |
700 | promise@^7.0.1:
701 | version "7.3.1"
702 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
703 | integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
704 | dependencies:
705 | asap "~2.0.3"
706 |
707 | pug-attrs@^3.0.0:
708 | version "3.0.0"
709 | resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41"
710 | integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==
711 | dependencies:
712 | constantinople "^4.0.1"
713 | js-stringify "^1.0.2"
714 | pug-runtime "^3.0.0"
715 |
716 | pug-code-gen@^3.0.2:
717 | version "3.0.2"
718 | resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.2.tgz#ad190f4943133bf186b60b80de483100e132e2ce"
719 | integrity sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==
720 | dependencies:
721 | constantinople "^4.0.1"
722 | doctypes "^1.1.0"
723 | js-stringify "^1.0.2"
724 | pug-attrs "^3.0.0"
725 | pug-error "^2.0.0"
726 | pug-runtime "^3.0.0"
727 | void-elements "^3.1.0"
728 | with "^7.0.0"
729 |
730 | pug-error@^2.0.0:
731 | version "2.0.0"
732 | resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.0.0.tgz#5c62173cb09c34de2a2ce04f17b8adfec74d8ca5"
733 | integrity sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==
734 |
735 | pug-filters@^4.0.0:
736 | version "4.0.0"
737 | resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e"
738 | integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==
739 | dependencies:
740 | constantinople "^4.0.1"
741 | jstransformer "1.0.0"
742 | pug-error "^2.0.0"
743 | pug-walk "^2.0.0"
744 | resolve "^1.15.1"
745 |
746 | pug-lexer@^5.0.1:
747 | version "5.0.1"
748 | resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5"
749 | integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==
750 | dependencies:
751 | character-parser "^2.2.0"
752 | is-expression "^4.0.0"
753 | pug-error "^2.0.0"
754 |
755 | pug-linker@^4.0.0:
756 | version "4.0.0"
757 | resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-4.0.0.tgz#12cbc0594fc5a3e06b9fc59e6f93c146962a7708"
758 | integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==
759 | dependencies:
760 | pug-error "^2.0.0"
761 | pug-walk "^2.0.0"
762 |
763 | pug-load@^3.0.0:
764 | version "3.0.0"
765 | resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-3.0.0.tgz#9fd9cda52202b08adb11d25681fb9f34bd41b662"
766 | integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==
767 | dependencies:
768 | object-assign "^4.1.1"
769 | pug-walk "^2.0.0"
770 |
771 | pug-parser@^6.0.0:
772 | version "6.0.0"
773 | resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-6.0.0.tgz#a8fdc035863a95b2c1dc5ebf4ecf80b4e76a1260"
774 | integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==
775 | dependencies:
776 | pug-error "^2.0.0"
777 | token-stream "1.0.0"
778 |
779 | pug-runtime@^3.0.0, pug-runtime@^3.0.1:
780 | version "3.0.1"
781 | resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-3.0.1.tgz#f636976204723f35a8c5f6fad6acda2a191b83d7"
782 | integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==
783 |
784 | pug-strip-comments@^2.0.0:
785 | version "2.0.0"
786 | resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz#f94b07fd6b495523330f490a7f554b4ff876303e"
787 | integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==
788 | dependencies:
789 | pug-error "^2.0.0"
790 |
791 | pug-walk@^2.0.0:
792 | version "2.0.0"
793 | resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe"
794 | integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==
795 |
796 | pug@^3.0.2:
797 | version "3.0.2"
798 | resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.2.tgz#f35c7107343454e43bc27ae0ff76c731b78ea535"
799 | integrity sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==
800 | dependencies:
801 | pug-code-gen "^3.0.2"
802 | pug-filters "^4.0.0"
803 | pug-lexer "^5.0.1"
804 | pug-linker "^4.0.0"
805 | pug-load "^3.0.0"
806 | pug-parser "^6.0.0"
807 | pug-runtime "^3.0.1"
808 | pug-strip-comments "^2.0.0"
809 |
810 | readdirp@~3.6.0:
811 | version "3.6.0"
812 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
813 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
814 | dependencies:
815 | picomatch "^2.2.1"
816 |
817 | request-light@^0.5.4:
818 | version "0.5.4"
819 | resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.5.4.tgz#497a98c6d8ae49536417a5e2d7f383b934f3e38c"
820 | integrity sha512-t3566CMweOFlUk7Y1DJMu5OrtpoZEb6aSTsLQVT3wtrIEJ5NhcY9G/Oqxvjllzl4a15zXfFlcr9q40LbLVQJqw==
821 |
822 | resolve@^1.15.1, resolve@^1.20.0:
823 | version "1.20.0"
824 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
825 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
826 | dependencies:
827 | is-core-module "^2.2.0"
828 | path-parse "^1.0.6"
829 |
830 | rollup@^2.38.5:
831 | version "2.56.3"
832 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.56.3.tgz#b63edadd9851b0d618a6d0e6af8201955a77aeff"
833 | integrity sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg==
834 | optionalDependencies:
835 | fsevents "~2.3.2"
836 |
837 | sass@^1.39.2:
838 | version "1.39.2"
839 | resolved "https://registry.yarnpkg.com/sass/-/sass-1.39.2.tgz#1681964378f58d76fc64a6a502619bd5ac99f660"
840 | integrity sha512-4/6Vn2RPc+qNwSclUSKvssh7dqK1Ih3FfHBW16I/GfH47b3scbYeOw65UIrYG7PkweFiKbpJjgkf5CV8EMmvzw==
841 | dependencies:
842 | chokidar ">=3.0.0 <4.0.0"
843 |
844 | select@^1.1.2:
845 | version "1.1.2"
846 | resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
847 | integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
848 |
849 | semver@^7.3.5:
850 | version "7.3.5"
851 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
852 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
853 | dependencies:
854 | lru-cache "^6.0.0"
855 |
856 | source-map-js@^0.6.2:
857 | version "0.6.2"
858 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e"
859 | integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==
860 |
861 | source-map@^0.6.1:
862 | version "0.6.1"
863 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
864 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
865 |
866 | sourcemap-codec@^1.4.4:
867 | version "1.4.8"
868 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
869 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
870 |
871 | string-hash@^1.1.1:
872 | version "1.1.3"
873 | resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
874 | integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=
875 |
876 | tiny-emitter@^2.0.0:
877 | version "2.1.0"
878 | resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
879 | integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
880 |
881 | to-fast-properties@^2.0.0:
882 | version "2.0.0"
883 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
884 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
885 |
886 | to-regex-range@^5.0.1:
887 | version "5.0.1"
888 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
889 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
890 | dependencies:
891 | is-number "^7.0.0"
892 |
893 | token-stream@1.0.0:
894 | version "1.0.0"
895 | resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4"
896 | integrity sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=
897 |
898 | typescript@^4.3.2:
899 | version "4.4.3"
900 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324"
901 | integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==
902 |
903 | upath@^2.0.1:
904 | version "2.0.1"
905 | resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b"
906 | integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==
907 |
908 | util-deprecate@^1.0.2:
909 | version "1.0.2"
910 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
911 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
912 |
913 | vite@^2.5.4:
914 | version "2.5.6"
915 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.5.6.tgz#51431bb5b99b041289595300ba15947bad0f89aa"
916 | integrity sha512-P++qzXuOPhTql8iDamsatlJfD7/yGi8NCNwzyqkB2p0jrNJC567WEdXiKn3hQ+ZV8amQmB2dTH6svo3Z2tJ6MQ==
917 | dependencies:
918 | esbuild "^0.12.17"
919 | postcss "^8.3.6"
920 | resolve "^1.20.0"
921 | rollup "^2.38.5"
922 | optionalDependencies:
923 | fsevents "~2.3.2"
924 |
925 | void-elements@^3.1.0:
926 | version "3.1.0"
927 | resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09"
928 | integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=
929 |
930 | vscode-css-languageservice@^5.1.4:
931 | version "5.1.5"
932 | resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.1.5.tgz#400b2f63a4f73c60f5b0afc48c478c1b326b27c6"
933 | integrity sha512-c1hhsbnZ7bBvj10vMDLmkOk/n9r0rXQYDj4kbBi59bZaaEZ3e81zURx76/618NZM5NytlZmGfvmxQtB7mb03Ow==
934 | dependencies:
935 | vscode-languageserver-textdocument "^1.0.1"
936 | vscode-languageserver-types "^3.16.0"
937 | vscode-nls "^5.0.0"
938 | vscode-uri "^3.0.2"
939 |
940 | vscode-html-languageservice@^4.0.7:
941 | version "4.0.8"
942 | resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-4.0.8.tgz#9429bacce3244dcfcb3a7172903f33b6f418db3b"
943 | integrity sha512-VJ4boG3uOD5Ls0pCvml7ZkHY+f1uDuxr+wR39XrerPr7qQFAu91DRTBuOzBsp6lV3x5Vz2S835AS2ZzLNmezbg==
944 | dependencies:
945 | vscode-languageserver-textdocument "^1.0.1"
946 | vscode-languageserver-types "^3.16.0"
947 | vscode-nls "^5.0.0"
948 | vscode-uri "^3.0.2"
949 |
950 | vscode-json-languageservice@^4.1.7:
951 | version "4.1.7"
952 | resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.1.7.tgz#18244d62b115a5818c7526ef4339438b7175dfaa"
953 | integrity sha512-cwG5TwZyHYthsk2aS3W1dVgVP6Vwn3o+zscwN58uMgZt/nKuyxd9vdEB1F58Ix+S5kSKAnkUCP6hvulcoImQQQ==
954 | dependencies:
955 | jsonc-parser "^3.0.0"
956 | vscode-languageserver-textdocument "^1.0.1"
957 | vscode-languageserver-types "^3.16.0"
958 | vscode-nls "^5.0.0"
959 | vscode-uri "^3.0.2"
960 |
961 | vscode-jsonrpc@8.0.0-next.2, vscode-jsonrpc@^8.0.0-next.2:
962 | version "8.0.0-next.2"
963 | resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.2.tgz#285fc294be586e4768acd67e5a42efc738a5cac0"
964 | integrity sha512-gxUyTBAjmwGkiHW/UaRScre2s4i98P8M7gnc3VB4DrVQUm3vQ0idi2cN9nbkfcjATx+uEt8C22j+MLN/8UzsJA==
965 |
966 | vscode-languageserver-protocol@3.17.0-next.8:
967 | version "3.17.0-next.8"
968 | resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.8.tgz#ef2eb7423b474cccd11384239de24488e7fe818c"
969 | integrity sha512-P89vSuJ+FA5JzFmcOoZN13Ig1yd6LsiPOig0O5m5BSGuO/rplQegCd9J0wKpaTy7trf/SYHRoypnbUBdzy14sg==
970 | dependencies:
971 | vscode-jsonrpc "8.0.0-next.2"
972 | vscode-languageserver-types "3.17.0-next.3"
973 |
974 | vscode-languageserver-textdocument@^1.0.1:
975 | version "1.0.1"
976 | resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz#178168e87efad6171b372add1dea34f53e5d330f"
977 | integrity sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==
978 |
979 | vscode-languageserver-types@3.17.0-next.3:
980 | version "3.17.0-next.3"
981 | resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.3.tgz#e1f4311e08ea3193e81126154b6a342fc1c3dba3"
982 | integrity sha512-VQcXnhKYxUW6OiRMhG++SzmZYMJwusXknJGd+FfdOnS1yHAo734OHyR0e2eEHDlv0/oWc8RZPgx/VKSKyondVg==
983 |
984 | vscode-languageserver-types@^3.15.1, vscode-languageserver-types@^3.16.0:
985 | version "3.16.0"
986 | resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247"
987 | integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==
988 |
989 | vscode-languageserver@^8.0.0-next.2:
990 | version "8.0.0-next.2"
991 | resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.0.0-next.2.tgz#3a3daf79ff10350ea9cec5c73b5302901a955117"
992 | integrity sha512-7qCEXTeGZKkI8BGvlKh0JPXTY7BaWoiwQYKCcGaUgnMs34wt6F/yaKcxoC3XIouBBVyRxiI6Ml/JdztM3XYEaA==
993 | dependencies:
994 | vscode-languageserver-protocol "3.17.0-next.8"
995 |
996 | vscode-nls@^5.0.0:
997 | version "5.0.0"
998 | resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840"
999 | integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==
1000 |
1001 | vscode-pug-languageservice@^0.27.14:
1002 | version "0.27.14"
1003 | resolved "https://registry.yarnpkg.com/vscode-pug-languageservice/-/vscode-pug-languageservice-0.27.14.tgz#3426f05a178264f22191d5fdd9fea80889ead464"
1004 | integrity sha512-nRy0wybs7s7aQB951szo9THPDoIDv4bdTsuAyFkQMpiKsRk2/C6LtPAQYVzCBOqgBM9RVagBirbLWOAEdkMc2w==
1005 | dependencies:
1006 | "@volar/code-gen" "^0.27.14"
1007 | "@volar/shared" "^0.27.14"
1008 | "@volar/source-map" "^0.27.14"
1009 | "@volar/transforms" "^0.27.14"
1010 | pug-lexer "^5.0.1"
1011 | pug-parser "^6.0.0"
1012 | vscode-languageserver "^8.0.0-next.2"
1013 |
1014 | vscode-typescript-languageservice@^0.27.18:
1015 | version "0.27.18"
1016 | resolved "https://registry.yarnpkg.com/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.27.18.tgz#a4a1b63a41706ae7ece1300f3402a4732ba7c588"
1017 | integrity sha512-JyrxQk4FNKDvL6hkpqLQhyZovGhMvXM076TV3vHEYACOhTumnowpFZeNMkCsp8tkP83lrFzy1B3fAnDDa9HfrQ==
1018 | dependencies:
1019 | "@volar/shared" "^0.27.14"
1020 | semver "^7.3.5"
1021 | upath "^2.0.1"
1022 | vscode-languageserver "^8.0.0-next.2"
1023 | vscode-languageserver-textdocument "^1.0.1"
1024 |
1025 | vscode-uri@^2.1.2:
1026 | version "2.1.2"
1027 | resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c"
1028 | integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==
1029 |
1030 | vscode-uri@^3.0.2:
1031 | version "3.0.2"
1032 | resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.2.tgz#ecfd1d066cb8ef4c3a208decdbab9a8c23d055d0"
1033 | integrity sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA==
1034 |
1035 | vscode-vue-languageservice@^0.27.0:
1036 | version "0.27.18"
1037 | resolved "https://registry.yarnpkg.com/vscode-vue-languageservice/-/vscode-vue-languageservice-0.27.18.tgz#96b45611b1d9a34b6006df10a6669e929268ec02"
1038 | integrity sha512-yvuqPGbZgGCdY1b3MWEKJR6ptDnIFHOcgsO3bJKhCIUMhR5ZJ2FUwTpwrz5T9iEasOPgfN+e1gfbkZ+BYUAXbg==
1039 | dependencies:
1040 | "@volar/code-gen" "^0.27.14"
1041 | "@volar/html2pug" "^0.27.13"
1042 | "@volar/shared" "^0.27.14"
1043 | "@volar/source-map" "^0.27.14"
1044 | "@volar/transforms" "^0.27.14"
1045 | "@vscode/emmet-helper" "^2.7.0"
1046 | "@vue/compiler-dom" "^3.2.6"
1047 | "@vue/reactivity" "^3.2.6"
1048 | "@vue/shared" "^3.2.6"
1049 | request-light "^0.5.4"
1050 | upath "^2.0.1"
1051 | vscode-css-languageservice "^5.1.4"
1052 | vscode-html-languageservice "^4.0.7"
1053 | vscode-json-languageservice "^4.1.7"
1054 | vscode-languageserver "^8.0.0-next.2"
1055 | vscode-languageserver-textdocument "^1.0.1"
1056 | vscode-pug-languageservice "^0.27.14"
1057 | vscode-typescript-languageservice "^0.27.18"
1058 |
1059 | vue-tsc@^0.2.2:
1060 | version "0.2.3"
1061 | resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-0.2.3.tgz#12bf48e3c9b1e553d31aad0c641722d5d15841d8"
1062 | integrity sha512-0ahxAnQolmv6EOnv5zxeMi4vCpM4PkhjU70i/EI44OzMWq4OErjLZhEh8EXOLtMx6FBRuuqS5fiBXcuqLpoL7Q==
1063 | dependencies:
1064 | vscode-vue-languageservice "^0.27.0"
1065 |
1066 | vue3-clipboard@^1.0.0:
1067 | version "1.0.0"
1068 | resolved "https://registry.yarnpkg.com/vue3-clipboard/-/vue3-clipboard-1.0.0.tgz#f7d17a00bce6579ba866df825541563b272610f2"
1069 | integrity sha512-GUqKh1oO79xDpq0z+cCv/NDVTpcJGNDzeNgT3PmTdTp/WJh3gcTrDqIYKycKhzMFOtIFJ7hO/+usgyWtT+fNhA==
1070 | dependencies:
1071 | clipboard "^2.0.6"
1072 |
1073 | vue@^3.2.6:
1074 | version "3.2.11"
1075 | resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.11.tgz#6b92295048df705ddac558fd3e3ed553e55e57c8"
1076 | integrity sha512-JkI3/eIgfk4E0f/p319TD3EZgOwBQfftgnkRsXlT7OrRyyiyoyUXn6embPGZXSBxD3LoZ9SWhJoxLhFh5AleeA==
1077 | dependencies:
1078 | "@vue/compiler-dom" "3.2.11"
1079 | "@vue/runtime-dom" "3.2.11"
1080 | "@vue/shared" "3.2.11"
1081 |
1082 | with@^7.0.0:
1083 | version "7.0.2"
1084 | resolved "https://registry.yarnpkg.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac"
1085 | integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==
1086 | dependencies:
1087 | "@babel/parser" "^7.9.6"
1088 | "@babel/types" "^7.9.6"
1089 | assert-never "^1.2.1"
1090 | babel-walk "3.0.0-canary-5"
1091 |
1092 | yallist@^3.0.2:
1093 | version "3.1.1"
1094 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
1095 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
1096 |
1097 | yallist@^4.0.0:
1098 | version "4.0.0"
1099 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
1100 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
1101 |
--------------------------------------------------------------------------------