zkapp-cli
Version:
CLI to create zkApps (zero-knowledge apps) for Mina Protocol
147 lines (118 loc) • 3.1 kB
JavaScript
export default `
<script>
import { onMount } from 'svelte'
/**
* @typedef {Object} Props
* @property {import('svelte').Snippet} [children]
*/
/** @type {Props} */
let { children } = $props();
let ctx
let pixels = []
let canvas
let animationFrameId
function Color(h, s, l, a) {
this.h = h
this.s = s
this.l = l
this.a = a
this.dir = Math.random() > 0.5 ? -1 : 1
this.toString = function () {
return (
'hsla(' + this.h + ', ' + this.s + '%, ' + this.l + '%, ' + this.a + ')'
)
}
}
function Pixel(x, y, w, h, color) {
this.x = {
c: x,
min: 0,
max: canvas.width,
dir: Math.random() > 0.5 ? -1 : 1,
}
this.y = {
c: y,
min: 0,
max: canvas.height,
dir: Math.random() > 0.5 ? -1 : 1,
}
this.w = {
c: w,
min: 2,
max: canvas.width,
dir: Math.random() > 0.5 ? -1 : 1,
}
this.h = {
c: h,
min: 2,
max: canvas.height,
dir: Math.random() > 0.5 ? -1 : 1,
}
this.color = color
this.direction = Math.random() > 0.1 ? -1 : 1
this.velocity = (Math.random() * 100 + 100) * 0.01 * this.direction
}
function updatePixel(pixel) {
if (pixel.x.c <= pixel.x.min || pixel.x.c >= pixel.x.max) {
pixel.x.dir *= -1
}
if (pixel.y.c <= pixel.y.min || pixel.y.c >= pixel.y.max) {
pixel.y.dir *= -1
}
if (pixel.w.c <= pixel.w.min || pixel.w.c >= pixel.w.max) {
pixel.w.dir *= -1
}
if (pixel.h.c <= pixel.h.min || pixel.h.c >= pixel.h.max) {
pixel.h.dir *= -1
}
if (pixel.color.a <= 0 || pixel.color.a >= 0.75) {
pixel.color.dir *= -1
}
pixel.x.c += 0.005 * pixel.x.dir
pixel.y.c += 0.005 * pixel.y.dir
pixel.w.c += 0.005 * pixel.w.dir
pixel.h.c += 0.005 * pixel.h.dir
}
function renderPixel(pixel) {
ctx.restore()
ctx.fillStyle = pixel.color.toString()
ctx.fillRect(pixel.x.c, pixel.y.c, pixel.w.c, pixel.h.c)
}
function paint() {
if (canvas) {
ctx.clearRect(0, 0, canvas.width, canvas.height)
for (let i = 0; i < pixels.length; i++) {
updatePixel(pixels[i])
renderPixel(pixels[i])
}
}
}
function animate() {
paint()
animationFrameId = window.requestAnimationFrame(animate)
}
onMount(() => {
canvas = document.querySelector('.background-gradients')
ctx = canvas.getContext('2d')
ctx.save()
pixels = [
new Pixel(1, 1, 3, 4, new Color(252, 70, 67, 0.8)),
new Pixel(0, 0, 1, 1, new Color(0, 0, 98, 1)),
new Pixel(0, 3, 2, 2, new Color(11, 100, 62, 0.8)),
new Pixel(4, 0, 4, 3, new Color(190, 94, 75, 0.8)),
new Pixel(3, 1, 1, 2, new Color(324, 98, 50, 0.1)),
]
animate()
return () => window.cancelAnimationFrame(animationFrameId)
})
</script>
<style>
@import '../styles/Home.module.css';
</style>
<div class="background">
<canvas class="background-gradients" width="6" height="6"></canvas>
</div>
<div class="container">
{@render children?.()}
</div>
`;