Add Grain project on index, add bannerSettings.quality for grain banner

This commit is contained in:
Xevion
2023-02-25 18:53:49 -06:00
parent 8f13bd60e7
commit f47f9b482d
4 changed files with 25 additions and 3 deletions

BIN
public/grain.jpeg Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

View File

@@ -10,6 +10,7 @@ import {type LinkIcon, LinkIcons} from "../utils/types";
type ItemCardProps = { type ItemCardProps = {
banner: string; banner: string;
bannerSettings?: { quality: number};
bannerBlur: string; bannerBlur: string;
title: string; title: string;
description: string; description: string;
@@ -17,7 +18,7 @@ type ItemCardProps = {
location: string; location: string;
} }
const ItemCard = ({banner, bannerBlur, title, description, links, location}: ItemCardProps) => { const ItemCard = ({banner, bannerBlur, title, description, links, location, bannerSettings}: ItemCardProps) => {
const itemRef = useRef<HTMLDivElement>(null); const itemRef = useRef<HTMLDivElement>(null);
const mobileButtonRef = useRef<HTMLAnchorElement>(null); const mobileButtonRef = useRef<HTMLAnchorElement>(null);
const [active, toggleActive, setActive] = useToggle() const [active, toggleActive, setActive] = useToggle()
@@ -41,7 +42,9 @@ const ItemCard = ({banner, bannerBlur, title, description, links, location}: Ite
<div ref={itemRef} <div ref={itemRef}
className={classNames("item [&:not(:first-child)]:mt-3", active ? "active" : null)} className={classNames("item [&:not(:first-child)]:mt-3", active ? "active" : null)}
onClick={navigate}> onClick={navigate}>
<DependentImage fill src={banner} blurDataURL={bannerBlur} <DependentImage fill src={banner}
quality={bannerSettings?.quality ?? 75}
blurDataURL={bannerBlur}
className={(loaded) => classNames("object-cover", loaded ? null : "blur-xl")} className={(loaded) => classNames("object-cover", loaded ? null : "blur-xl")}
placeholder="blur" placeholder="blur"
alt={`Banner for ${title}`} alt={`Banner for ${title}`}

View File

@@ -63,6 +63,24 @@ export async function getStaticProps() {
location: "https://github.com/Xevion/Paths", location: "https://github.com/Xevion/Paths",
} }
] ]
},
{
title: "Grain",
banner: "/grain.jpeg",
bannerSettings: {quality: 100},
location: "/grain",
shortDescription: "An experimental React app to generate beautiful backgrounds with noise filters.",
longDescription: "Quickly generate beautiful backgrounds with noise filters. Built with React, hosted on Vercel, and rendered using simple SVG noise filters (just HTML & CSS).",
links: [
{
icon: 'external',
location: "https://grain.xevion.dev"
},
{
icon: "github",
location: "https://github.com/Xevion/grain"
}
]
} }
]; ];

View File

@@ -1,10 +1,11 @@
import {IconType} from "react-icons"; import type {IconType} from "react-icons";
import {AiFillGithub, AiOutlineLink} from "react-icons/ai"; import {AiFillGithub, AiOutlineLink} from "react-icons/ai";
import {RxOpenInNewWindow} from "react-icons/rx"; import {RxOpenInNewWindow} from "react-icons/rx";
export type Project = { export type Project = {
title: string; title: string;
banner: string; banner: string;
bannerSettings?: {quality: number;}
longDescription: string; longDescription: string;
shortDescription: string; shortDescription: string;
links?: LinkIcon[]; links?: LinkIcon[];