--- import type { InferEntrySchema } from "astro:content"; import { Image } from "astro:assets"; import { blog, utils } from "@/config"; import Balloon from "./Balloon.astro"; interface Props { id: string; data: InferEntrySchema<"blog">; layer: number; } const { id, data, layer } = Astro.props; const image = await (async () => { if (!data.image) return; const img = data.image.match(/.*(?=\.png)/gm); if (img === null) return; return await import(`../../content/posts/assets/${img[0]}.png`).then( (x) => x.default, ); })(); const date = (() => { const year = data.date.getFullYear() + ""; const month = data.date.getMonth() + 1 + ""; const date = data.date.getDate() + ""; return { year: "0".repeat(4 - year.length) + year, month: "0".repeat(2 - month.length) + month, date: "0".repeat(2 - date.length) + date, }; })(); const positions: [number, number] = [Math.random(), Math.random()]; const offsets: [number, number][] = [ [0, 0], [ Math.random() * blog.post.drift[0] - blog.post.drift[0] / 2, Math.random() * 0.5 * blog.post.drift[1] - blog.post.drift[1] / 2, ], [ Math.random() * blog.post.drift[0] - blog.post.drift[0] / 2, Math.random() * 0.5 * blog.post.drift[1] - blog.post.drift[1] / 2, ], [ Math.random() * blog.post.drift[0] - blog.post.drift[0] / 2, Math.random() * 0.5 * blog.post.drift[1] - blog.post.drift[1] / 2, ], ]; ---
`--x-offset-${i}: calc((100svw - ${blog.post.width + 2 * blog.post.xPadding}px) * ${positions[0] + x[0]} + ${blog.post.xPadding}px); --y-offset-${i}: ${blog.post.yLeeway * 2 * (positions[1] + x[1]) - blog.post.yLeeway}px;`, ) .join("\n")} --timing: ${ blog.post.timing[0] + Math.random() * (blog.post.timing[1] - blog.post.timing[0]) }s; /* config */ --width: ${blog.post.width}px; --y-gap: ${blog.post.yGap}px; `} > { // new Array(Math.floor(utils.getRandom(blog.balloons.numBalloons))) // .fill(0) // .map((_, i) => ) (() => { const len = Math.round(utils.getRandom(blog.balloons.numBalloons)); const arr = new Array(len).fill(0); return arr.map((_, i) => ); })() }
({id}) {data.title}