Portfolio/front/Tabs/Project.ts

39 lines
2.3 KiB
TypeScript
Raw Permalink Normal View History

import { link } from "ansi-escapes";
import { newLine } from "..";
2025-03-18 10:41:31 +01:00
import generateQRCode from "../../wrapers/qr-code-wraper";
interface ProjectProps {
title: string;
description: string;
technologies: string[];
learnMoreLink: string;
}
2025-03-18 10:41:31 +01:00
const Project = async ({ title, description, technologies, learnMoreLink }: ProjectProps) => {
return (
` ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓${newLine}` +
`\x1b[33m${title.padEnd(80 - 4)}\x1b[0m ┃${newLine}` +
` ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫${newLine}` +
description
.split(newLine)
.map((line) => `${line.padEnd(80 - 4)}${newLine}`)
.join("") +
` ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫${newLine}` +
` ┃ Technologies: \x1b[34m${technologies.join(", ").padEnd(80 - 18)}\x1b[0m ┃${newLine}` +
` ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫${newLine}` +
`${link(
" \x1b[32mLearn more\x1b[0m ",
learnMoreLink
)}${newLine}` +
2025-03-18 10:41:31 +01:00
(await generateQRCode(learnMoreLink))
.split(newLine)
.map((line) => `${line.padEnd(57 - 4).padStart(80 - 4)}${newLine}`)
.join("") +
` ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛${newLine}`
);
};
export default Project;
export type { ProjectProps };