generated from nhcarrigan/template
feat: cleanup
This commit is contained in:
parent
4e3068b898
commit
d3f795608c
@ -1,50 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import { NextResponse } from "next/server";
|
|
||||||
import { getCodebergActivty } from "../../../lib/codeberg";
|
|
||||||
import { getGithubData } from "../../../lib/github";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GET route handler for the activity API.
|
|
||||||
* Loads recent activity from Codeberg and GitHub.
|
|
||||||
* @returns The formatted data.
|
|
||||||
*/
|
|
||||||
export async function GET(): Promise<NextResponse> {
|
|
||||||
const codeberg = await getCodebergActivty();
|
|
||||||
const github = await getGithubData();
|
|
||||||
|
|
||||||
const normalised: Array<{
|
|
||||||
type: string;
|
|
||||||
date: Date;
|
|
||||||
repo: string;
|
|
||||||
repoName: string;
|
|
||||||
}> = [
|
|
||||||
...codeberg.map((index) => {
|
|
||||||
return {
|
|
||||||
date: new Date(index.created),
|
|
||||||
repo: index.repo.html_url,
|
|
||||||
repoName: index.repo.full_name,
|
|
||||||
type: index.op_type,
|
|
||||||
};
|
|
||||||
}),
|
|
||||||
...github.map((index) => {
|
|
||||||
return {
|
|
||||||
date: new Date(index.created_at),
|
|
||||||
repo: index.repo.url.replace("api.github.com/repos", "github.com"),
|
|
||||||
repoName: index.repo.name,
|
|
||||||
type: index.type,
|
|
||||||
};
|
|
||||||
}),
|
|
||||||
];
|
|
||||||
|
|
||||||
return NextResponse.json(
|
|
||||||
normalised.
|
|
||||||
toSorted((a, b) => {
|
|
||||||
return new Date(b.date).getTime() - new Date(a.date).getTime();
|
|
||||||
}).
|
|
||||||
slice(0, 100),
|
|
||||||
);
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import { NextResponse } from "next/server";
|
|
||||||
import { getCodebergIssues } from "../../../lib/codeberg";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GET route handler for the activity API.
|
|
||||||
* Loads recent activity from Codeberg and GitHub.
|
|
||||||
* @returns The formatted data.
|
|
||||||
*/
|
|
||||||
export async function GET(): Promise<NextResponse> {
|
|
||||||
const issues = await getCodebergIssues();
|
|
||||||
const normalised = issues.map((issue) => {
|
|
||||||
return {
|
|
||||||
body: issue.body,
|
|
||||||
labels: issue.labels.map((label) => {
|
|
||||||
return label.name;
|
|
||||||
}),
|
|
||||||
number: issue.number,
|
|
||||||
title: issue.title,
|
|
||||||
url: issue.html_url,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
return NextResponse.json(normalised);
|
|
||||||
}
|
|
@ -1,48 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
"use client";
|
|
||||||
import Script from "next/script";
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the /polycule page.
|
|
||||||
* @returns A React Component.
|
|
||||||
*/
|
|
||||||
const Sales = (): JSX.Element => {
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<main className="w-4/5 text-center
|
|
||||||
max-w-4xl m-auto mt-16 mb-1 rounded-lg">
|
|
||||||
<h1 className="text-5xl">{`Appeal a Sanction`}</h1>
|
|
||||||
<p>{`This form allows you to appeal a moderation action taken against you on one of our platforms.`}</p>
|
|
||||||
</main>
|
|
||||||
<style>
|
|
||||||
{`.hbspt-form {
|
|
||||||
max-width: 750px;
|
|
||||||
margin: auto;
|
|
||||||
background-color: #04624f;
|
|
||||||
border-radius: 1rem;
|
|
||||||
padding: 1rem;
|
|
||||||
margin-bottom: 100px;
|
|
||||||
font-family: "Fira Code", monospace;
|
|
||||||
}`}
|
|
||||||
</style>
|
|
||||||
<Script
|
|
||||||
src="//js.hsforms.net/forms/embed/v2.js"
|
|
||||||
strategy="beforeInteractive"
|
|
||||||
type="text/javascript"
|
|
||||||
></Script>
|
|
||||||
<Script strategy="afterInteractive">
|
|
||||||
{`hbspt.forms.create({
|
|
||||||
portalId: "47086586",
|
|
||||||
formId: "2db4284c-86a1-47d2-a019-c460ef809402",
|
|
||||||
});`}
|
|
||||||
</Script>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Sales;
|
|
@ -1,48 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
"use client";
|
|
||||||
import Script from "next/script";
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the /apply page.
|
|
||||||
* @returns A React Component.
|
|
||||||
*/
|
|
||||||
const Apply = (): JSX.Element => {
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<main className="w-4/5 text-center
|
|
||||||
max-w-4xl m-auto mt-16 mb-1 rounded-lg">
|
|
||||||
<h1 className="text-5xl">{`Staff Application`}</h1>
|
|
||||||
<p>{`This form allows you to apply to join NHCarrigan's volunteer staff team.`}</p>
|
|
||||||
</main>
|
|
||||||
<style>
|
|
||||||
{`.hbspt-form {
|
|
||||||
max-width: 750px;
|
|
||||||
margin: auto;
|
|
||||||
background-color: #04624f;
|
|
||||||
border-radius: 1rem;
|
|
||||||
padding: 1rem;
|
|
||||||
margin-bottom: 100px;
|
|
||||||
font-family: "Fira Code", monospace;
|
|
||||||
}`}
|
|
||||||
</style>
|
|
||||||
<Script
|
|
||||||
src="//js.hsforms.net/forms/embed/v2.js"
|
|
||||||
strategy="beforeInteractive"
|
|
||||||
type="text/javascript"
|
|
||||||
></Script>
|
|
||||||
<Script strategy="afterInteractive">
|
|
||||||
{`hbspt.forms.create({
|
|
||||||
portalId: "47086586",
|
|
||||||
formId: "833ff1c0-6c24-4c26-9af0-331c1f7ce6d4",
|
|
||||||
});`}
|
|
||||||
</Script>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Apply;
|
|
@ -1,214 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
"use client";
|
|
||||||
import { useEffect, useState, type ChangeEvent, type JSX } from "react";
|
|
||||||
import { Rule } from "../../components/rule";
|
|
||||||
|
|
||||||
type Category = "question" | "compliment" | "confess" | "never";
|
|
||||||
|
|
||||||
const ColourMap: Record<Category, { background: string; foreground: string }>
|
|
||||||
= {
|
|
||||||
compliment: {
|
|
||||||
background: "#a6f1c6",
|
|
||||||
foreground: "#0f9d58",
|
|
||||||
},
|
|
||||||
confess: {
|
|
||||||
background: "#f7c6d2",
|
|
||||||
foreground: "#b03060",
|
|
||||||
},
|
|
||||||
never: {
|
|
||||||
background: "#f7e6c6",
|
|
||||||
foreground: "#b8860b",
|
|
||||||
},
|
|
||||||
question: {
|
|
||||||
background: "#a6e6fc",
|
|
||||||
foreground: "#03779e",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const TitleMap: Record<Category, string> = {
|
|
||||||
compliment: "Pay Naomi a Compliment",
|
|
||||||
confess: "Confess Your Sins to Naomi",
|
|
||||||
never: "Never Have I Ever?",
|
|
||||||
question: "Ask Naomi a Question",
|
|
||||||
};
|
|
||||||
|
|
||||||
const DescriptionMap: Record<Category, string> = {
|
|
||||||
compliment:
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
"Have you wanted to tell Naomi she's cute, but you've been too shy? Here's your chance!",
|
|
||||||
confess:
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
"Is there something weighing on your mind that you can't tell anyone else? Confess it here!",
|
|
||||||
never:
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
"What do you think Naomi has done that you haven't? Let's play a game of Never Have I Ever!",
|
|
||||||
question: "Do you have a question for Naomi? Ask it here!",
|
|
||||||
};
|
|
||||||
|
|
||||||
interface DataRecord {
|
|
||||||
category: Category;
|
|
||||||
question: string;
|
|
||||||
answer: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the /ask page.
|
|
||||||
* @returns A React Component.
|
|
||||||
*/
|
|
||||||
const Ask = (): JSX.Element => {
|
|
||||||
const [ category, setCategory ] = useState<Category>("question");
|
|
||||||
const [ question, setQuestion ] = useState<string>("");
|
|
||||||
const [ submitted, setSubmitted ] = useState<boolean>(false);
|
|
||||||
const [ errored, setErrored ] = useState<boolean>(false);
|
|
||||||
const [ history, setHistory ] = useState<Array<DataRecord>>([]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
fetch("https://anon.nhcarrigan.com/recent").then(async(response) => {
|
|
||||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
||||||
const result = await response.json() as Array<DataRecord>;
|
|
||||||
setHistory(result);
|
|
||||||
}).
|
|
||||||
catch((error: unknown) => {
|
|
||||||
// eslint-disable-next-line no-console
|
|
||||||
console.error(error);
|
|
||||||
setHistory([]);
|
|
||||||
});
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const handleCategoryChange = (
|
|
||||||
event: ChangeEvent<HTMLSelectElement>,
|
|
||||||
): void => {
|
|
||||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
||||||
setCategory(event.target.value as Category);
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleQuestionUpdate = (
|
|
||||||
event: ChangeEvent<HTMLTextAreaElement>,
|
|
||||||
): void => {
|
|
||||||
setQuestion(event.target.value);
|
|
||||||
};
|
|
||||||
|
|
||||||
const submitForm = (): void => {
|
|
||||||
fetch("https://anon.nhcarrigan.com/api", {
|
|
||||||
body: JSON.stringify({
|
|
||||||
category,
|
|
||||||
question,
|
|
||||||
}),
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
method: "POST",
|
|
||||||
}).
|
|
||||||
then((response) => {
|
|
||||||
if (response.ok) {
|
|
||||||
setSubmitted(true);
|
|
||||||
} else {
|
|
||||||
setErrored(true);
|
|
||||||
}
|
|
||||||
}).
|
|
||||||
catch(() => {
|
|
||||||
setErrored(true);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
return (
|
|
||||||
<main className="w-4/5 text-center max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
|
||||||
<h1 className="text-5xl">{`Ask Me Anything!`}</h1>
|
|
||||||
<p>
|
|
||||||
{`This page allows you to anonymously ask any question you might wish! Once approved and answered, your question and our response will be visible in our `}
|
|
||||||
<a
|
|
||||||
className="underline"
|
|
||||||
href="https://chat.nhcarrigan.com"
|
|
||||||
>{`Discord`}</a>
|
|
||||||
{`!`}
|
|
||||||
</p>
|
|
||||||
<Rule />
|
|
||||||
{!submitted && !errored
|
|
||||||
&& <section>
|
|
||||||
<h2 className="text-3xl">{TitleMap[category]}</h2>
|
|
||||||
<p className="mb-2">{DescriptionMap[category]}</p>
|
|
||||||
<form>
|
|
||||||
<select
|
|
||||||
className="text-center border-2 rounded-lg p-0.5 mb-0.5"
|
|
||||||
// eslint-disable-next-line react/jsx-no-bind
|
|
||||||
onChange={handleCategoryChange}
|
|
||||||
style={{
|
|
||||||
backgroundColor: ColourMap[category].background,
|
|
||||||
borderColor: ColourMap[category].foreground,
|
|
||||||
color: ColourMap[category].foreground,
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<option value="question">{`Question`}</option>
|
|
||||||
<option value="compliment">{`Compliment`}</option>
|
|
||||||
<option value="confess">{`Confession`}</option>
|
|
||||||
<option value="never">{`Never Have I Ever?`}</option>
|
|
||||||
</select>
|
|
||||||
<textarea
|
|
||||||
className={`w-full h-48 p-2 border-2`}
|
|
||||||
// eslint-disable-next-line react/jsx-no-bind
|
|
||||||
onChange={handleQuestionUpdate}
|
|
||||||
placeholder="Type your question here..."
|
|
||||||
style={{
|
|
||||||
backgroundColor: ColourMap[category].background,
|
|
||||||
borderColor: ColourMap[category].foreground,
|
|
||||||
color: ColourMap[category].foreground,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<button
|
|
||||||
className="font-bold py-2 px-4 rounded mt-2"
|
|
||||||
// eslint-disable-next-line react/jsx-no-bind
|
|
||||||
onClick={submitForm}
|
|
||||||
style={{
|
|
||||||
backgroundColor: ColourMap[category].background,
|
|
||||||
borderColor: ColourMap[category].foreground,
|
|
||||||
color: ColourMap[category].foreground,
|
|
||||||
}}
|
|
||||||
type="button"
|
|
||||||
>
|
|
||||||
{`Submit`}
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</section>
|
|
||||||
}
|
|
||||||
{submitted
|
|
||||||
? <section>
|
|
||||||
<h2 className="text-3xl">{`Question Submitted!`}</h2>
|
|
||||||
<p>{`Your question has been submitted! Please wait for approval and response.`}</p>
|
|
||||||
</section>
|
|
||||||
: null}
|
|
||||||
{errored
|
|
||||||
? <section>
|
|
||||||
<h2 className="text-3xl">{`Submission Error`}</h2>
|
|
||||||
<p>{`An error occurred while submitting your question. Please try again later.`}</p>
|
|
||||||
</section>
|
|
||||||
: null}
|
|
||||||
<Rule />
|
|
||||||
<h2 className="text-3xl">{`Prior Questions`}</h2>
|
|
||||||
<p>{`Here are the most recently answered questions - if you want to see the full history, join our Discord!`}</p>
|
|
||||||
{history.length > 0
|
|
||||||
? history.map((record) => {
|
|
||||||
return (
|
|
||||||
<section
|
|
||||||
className="border-2 rounded-lg p-2 mt-2"
|
|
||||||
key={record.question}
|
|
||||||
style={{
|
|
||||||
backgroundColor: ColourMap[record.category].background,
|
|
||||||
borderColor: ColourMap[record.category].foreground,
|
|
||||||
color: ColourMap[record.category].foreground,
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<h3 className="text-2xl">{record.question}</h3>
|
|
||||||
<p>{record.answer}</p>
|
|
||||||
</section>
|
|
||||||
);
|
|
||||||
})
|
|
||||||
: <p>{`No questions have been answered yet!`}</p>
|
|
||||||
}
|
|
||||||
</main>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Ask;
|
|
@ -1,108 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import Script from "next/script";
|
|
||||||
import { Rule } from "../../components/rule";
|
|
||||||
import { Social } from "../../components/social";
|
|
||||||
import { Donate, HireMe, Socials } from "../../config/Socials";
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the /contact page.
|
|
||||||
* @returns A React Component.
|
|
||||||
*/
|
|
||||||
const Contact = (): JSX.Element => {
|
|
||||||
return (
|
|
||||||
<main className="w-4/5 text-center max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
|
||||||
<style>
|
|
||||||
{`.hbspt-form {
|
|
||||||
max-width: 750px;
|
|
||||||
margin: auto;
|
|
||||||
background-color: #04624f;
|
|
||||||
border-radius: 1rem;
|
|
||||||
padding: 1rem;
|
|
||||||
margin-bottom: 100px;
|
|
||||||
font-family: "Fira Code", monospace;
|
|
||||||
}`}
|
|
||||||
</style>
|
|
||||||
<h1 className="text-5xl">{`Contact Us`}</h1>
|
|
||||||
<p>
|
|
||||||
{`We offer many different ways to get in touch with us. This page lists
|
|
||||||
all of our available social media accounts. Use the buttons below to
|
|
||||||
choose your preferred method.`}
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
{`Note that the items are sorted alphabetically, not by order of
|
|
||||||
response times. Monitoring levels and activity may vary by platform.`}
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
{`With ${Socials.length.toLocaleString("en-GB")} choices, you shouldn't have any complaints!
|
|
||||||
:3`}
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
{`But if none of these work for you at all, there's a direct contact form at the bottom of this list!`}
|
|
||||||
</p>
|
|
||||||
<Rule />
|
|
||||||
<section>
|
|
||||||
<p>A quick note that we have explicitly deactivated our accounts on the following platforms. If you see an account on these platforms using our branding (either as NaomiLGBT OR NHCarrigan), it is an impersonation and should be reported.</p>
|
|
||||||
<ul>
|
|
||||||
<li>Twitch</li>
|
|
||||||
<li>Twitter</li>
|
|
||||||
<li>Instagram</li>
|
|
||||||
<li>Threads</li>
|
|
||||||
<li>WhatsApp</li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
<Rule />
|
|
||||||
<section>
|
|
||||||
<div>
|
|
||||||
{[ HireMe, Donate ].map(
|
|
||||||
({ link, label, alt, icon, color, background }) => {
|
|
||||||
return <Social
|
|
||||||
alt={alt}
|
|
||||||
background={background}
|
|
||||||
color={color}
|
|
||||||
icon={icon}
|
|
||||||
key={label}
|
|
||||||
label={label}
|
|
||||||
link={link}
|
|
||||||
/>;
|
|
||||||
}
|
|
||||||
,
|
|
||||||
)}
|
|
||||||
{Socials.toSorted((a, b) => {
|
|
||||||
return a.label.localeCompare(b.label);
|
|
||||||
}).map(
|
|
||||||
({ link, label, alt, icon, color, background }) => {
|
|
||||||
return <Social
|
|
||||||
alt={alt}
|
|
||||||
background={background}
|
|
||||||
color={color}
|
|
||||||
icon={icon}
|
|
||||||
key={label}
|
|
||||||
label={label}
|
|
||||||
link={link}
|
|
||||||
/>;
|
|
||||||
}
|
|
||||||
,
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<Script
|
|
||||||
src="//js.hsforms.net/forms/embed/v2.js"
|
|
||||||
strategy="beforeInteractive"
|
|
||||||
type="text/javascript"
|
|
||||||
></Script>
|
|
||||||
<Script strategy="afterInteractive">
|
|
||||||
{`hbspt.forms.create({
|
|
||||||
portalId: "47086586",
|
|
||||||
formId: "4db250c8-a1a7-4a62-94d7-82592fa83a58",
|
|
||||||
});`}
|
|
||||||
</Script>
|
|
||||||
</main>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Contact;
|
|
@ -1,86 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
"use client";
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the /contribute page.
|
|
||||||
* @returns A React Component.
|
|
||||||
*/
|
|
||||||
const ContributeComponent = (): JSX.Element => {
|
|
||||||
return (
|
|
||||||
<main className="w-[95%] text-center
|
|
||||||
max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
|
||||||
<h1 className="text-5xl">{`Open for Contribution~!`}</h1>
|
|
||||||
<section>
|
|
||||||
<p className="mb-2">{`Our issue tracker is currently unavailable while we work with the Codeberg team to address rate limit issues.`}</p>
|
|
||||||
</section>
|
|
||||||
</main>
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
*To be restored when rate-limit is lifted.
|
|
||||||
*const [ issues, setIssues ] = useState<
|
|
||||||
*Array<{
|
|
||||||
* labels: Array<string>;
|
|
||||||
* number: number;
|
|
||||||
* title: string;
|
|
||||||
* url: string;
|
|
||||||
* body: string;
|
|
||||||
*}>
|
|
||||||
*>([]);
|
|
||||||
*
|
|
||||||
*useEffect(() => {
|
|
||||||
*void fetch("/api/contribute").
|
|
||||||
* then(async(data) => {
|
|
||||||
* // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
||||||
* return (await data.json()) as Array<{
|
|
||||||
* labels: Array<string>;
|
|
||||||
* number: number;
|
|
||||||
* title: string;
|
|
||||||
* url: string;
|
|
||||||
* body: string;
|
|
||||||
* }>;
|
|
||||||
* }).
|
|
||||||
* then((data) => {
|
|
||||||
* setIssues(data);
|
|
||||||
* });
|
|
||||||
*}, []);
|
|
||||||
*
|
|
||||||
*if (issues.length === 0) {
|
|
||||||
*return (
|
|
||||||
* <main className="w-[95%] text-center
|
|
||||||
* max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
|
||||||
* <h1 className="text-5xl">{`Open for Contribution~!`}</h1>
|
|
||||||
* <section>
|
|
||||||
* <p className="text-3xl">{`Loading...`}</p>
|
|
||||||
* </section>
|
|
||||||
* </main>
|
|
||||||
*);
|
|
||||||
*}
|
|
||||||
*
|
|
||||||
*return (
|
|
||||||
* <main className="w-[95%] text-center
|
|
||||||
* max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
|
||||||
* <h1 className="text-5xl">{`Open for Contribution~!`}</h1>
|
|
||||||
* <section>
|
|
||||||
* <p className="mb-2">{`Heya! This page lists issues across all of our projects that are currently open for contribution.
|
|
||||||
* We'd love to have you work on one!`}</p>
|
|
||||||
* <Rule />
|
|
||||||
* <ol className="relative border-s border-[--primary] w-4/5 m-auto">
|
|
||||||
* {issues.map((act) => {
|
|
||||||
* return (
|
|
||||||
* <Issue key={act.url} {...act} />
|
|
||||||
* );
|
|
||||||
* })}
|
|
||||||
* </ol>
|
|
||||||
* </section>
|
|
||||||
* </main>
|
|
||||||
*);
|
|
||||||
*/
|
|
||||||
};
|
|
||||||
|
|
||||||
export default ContributeComponent;
|
|
@ -1,48 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
"use client";
|
|
||||||
import Script from "next/script";
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the /polycule page.
|
|
||||||
* @returns A React Component.
|
|
||||||
*/
|
|
||||||
const Newsletter = (): JSX.Element => {
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<main className="w-4/5 text-center
|
|
||||||
max-w-4xl m-auto mt-16 mb-1 rounded-lg">
|
|
||||||
<h1 className="text-5xl">{`Newsletter`}</h1>
|
|
||||||
<p>{`Don't want to join our chat server? Not a fan of our other platforms for announcing product updates? You can subscribe to our newsletter to receive the same information via a regular ol' email.`}</p>
|
|
||||||
</main>
|
|
||||||
<style>
|
|
||||||
{`.hbspt-form {
|
|
||||||
max-width: 750px;
|
|
||||||
margin: auto;
|
|
||||||
background-color: #04624f;
|
|
||||||
border-radius: 1rem;
|
|
||||||
padding: 1rem;
|
|
||||||
margin-bottom: 100px;
|
|
||||||
font-family: "Fira Code", monospace;
|
|
||||||
}`}
|
|
||||||
</style>
|
|
||||||
<Script
|
|
||||||
src="//js.hsforms.net/forms/embed/v2.js"
|
|
||||||
strategy="beforeInteractive"
|
|
||||||
type="text/javascript"
|
|
||||||
></Script>
|
|
||||||
<Script strategy="afterInteractive">
|
|
||||||
{`hbspt.forms.create({
|
|
||||||
portalId: "47086586",
|
|
||||||
formId: "1ed1ea33-a8f4-4956-8ccd-f72f44765ad9",
|
|
||||||
});`}
|
|
||||||
</Script>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Newsletter;
|
|
@ -1,42 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import { Partner } from "../../components/partner";
|
|
||||||
import { Rule } from "../../components/rule";
|
|
||||||
import { Partners } from "../../config/Partners";
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the /polycule page.
|
|
||||||
* @returns A React Component.
|
|
||||||
*/
|
|
||||||
const Polycule = (): JSX.Element => {
|
|
||||||
return (
|
|
||||||
<main className="w-[95%] text-center
|
|
||||||
max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
|
||||||
<h1 className="text-5xl">{`Naomi's Polycule`}</h1>
|
|
||||||
<section>
|
|
||||||
<p className="mb-2">
|
|
||||||
{`Meet the people who love and support Naomi to the ends of the earth.`}
|
|
||||||
</p>
|
|
||||||
<Rule />
|
|
||||||
<div className="w-full">
|
|
||||||
{Partners.map((member) => {
|
|
||||||
return <Partner
|
|
||||||
anniversary={member.anniversary}
|
|
||||||
avatar={member.avatar}
|
|
||||||
key={member.name}
|
|
||||||
name={member.name}
|
|
||||||
relationship={member.relationship}
|
|
||||||
url={member.url}
|
|
||||||
/>;
|
|
||||||
})}
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</main>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Polycule;
|
|
@ -1,48 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
"use client";
|
|
||||||
import Script from "next/script";
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the /polycule page.
|
|
||||||
* @returns A React Component.
|
|
||||||
*/
|
|
||||||
const Sales = (): JSX.Element => {
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<main className="w-4/5 text-center
|
|
||||||
max-w-4xl m-auto mt-16 mb-1 rounded-lg">
|
|
||||||
<h1 className="text-5xl">{`Sales Inquiry`}</h1>
|
|
||||||
<p>{`This form allows you to send a general sales inquiry to our team. Upon submission, you will be taken to our consultation booking page. Note that general inquiries are low priority - if you need an urgent response, you should use the booking page to schedule a paid consultation.`}</p>
|
|
||||||
</main>
|
|
||||||
<style>
|
|
||||||
{`.hbspt-form {
|
|
||||||
max-width: 750px;
|
|
||||||
margin: auto;
|
|
||||||
background-color: #04624f;
|
|
||||||
border-radius: 1rem;
|
|
||||||
padding: 1rem;
|
|
||||||
margin-bottom: 100px;
|
|
||||||
font-family: "Fira Code", monospace;
|
|
||||||
}`}
|
|
||||||
</style>
|
|
||||||
<Script
|
|
||||||
src="//js.hsforms.net/forms/embed/v2.js"
|
|
||||||
strategy="beforeInteractive"
|
|
||||||
type="text/javascript"
|
|
||||||
></Script>
|
|
||||||
<Script strategy="afterInteractive">
|
|
||||||
{`hbspt.forms.create({
|
|
||||||
portalId: "47086586",
|
|
||||||
formId: "fa90d8cb-40e2-4f36-b7a8-2bda6ac1d0cb",
|
|
||||||
});`}
|
|
||||||
</Script>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Sales;
|
|
@ -1,42 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import { Member } from "../../components/member";
|
|
||||||
import { Rule } from "../../components/rule";
|
|
||||||
import { TeamMembers } from "../../config/TeamMembers";
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the /team page.
|
|
||||||
* @returns A React Component.
|
|
||||||
*/
|
|
||||||
const Team = (): JSX.Element => {
|
|
||||||
return (
|
|
||||||
<main className="w-[95%] text-center
|
|
||||||
max-w-4xl m-auto mt-16 mb-16 rounded-lg">
|
|
||||||
<h1 className="text-5xl">{`Our Team`}</h1>
|
|
||||||
<section>
|
|
||||||
<p className="mb-2">
|
|
||||||
{`Meet the people behind nhcarrigan's success!`}
|
|
||||||
</p>
|
|
||||||
<Rule />
|
|
||||||
<div className="w-full">
|
|
||||||
{TeamMembers.map((member) => {
|
|
||||||
return <Member
|
|
||||||
avatar={member.avatar}
|
|
||||||
joinDate={member.joinDate}
|
|
||||||
key={member.name}
|
|
||||||
name={member.name}
|
|
||||||
role={member.role}
|
|
||||||
url={member.url}
|
|
||||||
/>;
|
|
||||||
})}
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</main>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Team;
|
|
@ -21,7 +21,7 @@ const Work = (): JSX.Element => {
|
|||||||
<h1 className="text-5xl">{`Our Work`}</h1>
|
<h1 className="text-5xl">{`Our Work`}</h1>
|
||||||
<p>
|
<p>
|
||||||
{`We run a software engineering and community management firm known as
|
{`We run a software engineering and community management firm known as
|
||||||
nhcarrigan.`}
|
NHCarrigan.`}
|
||||||
</p>
|
</p>
|
||||||
<Rule />
|
<Rule />
|
||||||
<section>
|
<section>
|
||||||
|
@ -1,80 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
interface ActivityProperties {
|
|
||||||
readonly type: string;
|
|
||||||
readonly date: Date;
|
|
||||||
readonly repo: string;
|
|
||||||
readonly repoName: string;
|
|
||||||
readonly heart: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const TypeToString: Record<string, string> = {
|
|
||||||
DeleteEvent: "deleted a branch on",
|
|
||||||
IssueCommentEvent: "commented on",
|
|
||||||
IssuesEvent: "created or updated an issue in",
|
|
||||||
PullRequestEvent: "created or merged a PR in",
|
|
||||||
PullRequestReviewCommentEvent: "commented on a PR in",
|
|
||||||
PullRequestReviewEvent: "reviewed a PR in",
|
|
||||||
PushEvent: "committed to",
|
|
||||||
close_issue: "closed an issue in",
|
|
||||||
commit_repo: "committed to",
|
|
||||||
create_branch: "created a branch in",
|
|
||||||
create_issue: "created an issue in",
|
|
||||||
create_pull_request: "created a PR in",
|
|
||||||
delete_branch: "deleted a branch on",
|
|
||||||
merge_pull_request: "merged a PR in",
|
|
||||||
};
|
|
||||||
|
|
||||||
const getType = (type: string): string => {
|
|
||||||
return TypeToString[type] ?? `performed a ${type}`;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the view for a Github or Codeberg activity.
|
|
||||||
* @param properties - The activity to render.
|
|
||||||
* @returns A JSX element.
|
|
||||||
*/
|
|
||||||
export const Activity = (properties: ActivityProperties): JSX.Element => {
|
|
||||||
const { type, date, repo, repoName, heart } = properties;
|
|
||||||
return (
|
|
||||||
<li className="ms-6">
|
|
||||||
<span
|
|
||||||
className="absolute flex items-center
|
|
||||||
justify-center w-6 h-6 rounded-full -start-3"
|
|
||||||
>
|
|
||||||
{heart}
|
|
||||||
</span>
|
|
||||||
<div
|
|
||||||
className="items-center justify-between
|
|
||||||
p-4 bg-white border border-gray-200 rounded-lg
|
|
||||||
shadow-sm sm:flex dark:bg-gray-700 dark:border-gray-600"
|
|
||||||
>
|
|
||||||
<time
|
|
||||||
className="mb-1 text-xs font-normal
|
|
||||||
text-gray-400 sm:order-last sm:mb-0"
|
|
||||||
>
|
|
||||||
{date.toLocaleString("en-GB")}
|
|
||||||
</time>
|
|
||||||
<div
|
|
||||||
className="text-sm font-normal
|
|
||||||
text-gray-500 lex dark:text-gray-300"
|
|
||||||
>
|
|
||||||
{`Naomi has ${getType(type)} `}
|
|
||||||
<a
|
|
||||||
className="font-semibold text-[#abfcec] hover:underline"
|
|
||||||
href={repo}
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
target="_blank"
|
|
||||||
>
|
|
||||||
{repoName}
|
|
||||||
</a>{" "}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,70 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
interface IssueProperties {
|
|
||||||
labels: Array<string>;
|
|
||||||
number: number;
|
|
||||||
title: string;
|
|
||||||
url: string;
|
|
||||||
body: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the view for a Codeberg issue.
|
|
||||||
* @param properties - The issue to render.
|
|
||||||
* @returns A JSX element.
|
|
||||||
*/
|
|
||||||
export const Issue = (properties: IssueProperties): JSX.Element => {
|
|
||||||
const { labels, number, title, url, body } = properties;
|
|
||||||
return (
|
|
||||||
<div className="p-6 mb-2 bg-[--foreground] text-[--background]
|
|
||||||
border border-gray-200 rounded-lg shadow">
|
|
||||||
<h2 className="mb-2 text-2xl font-bold tracking-tight">{`#${number.toString()} ${title}`}</h2>
|
|
||||||
{labels.map((label) => {
|
|
||||||
return (
|
|
||||||
<span
|
|
||||||
className="inline-flex items-center bg-pink-100
|
|
||||||
text-pink-800 text-xsfont-medium px-2.5 py-0.5
|
|
||||||
rounded-full dark:bg-pink-900 dark:text-pink-300"
|
|
||||||
key={label}
|
|
||||||
>
|
|
||||||
{label}
|
|
||||||
</span>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
<p className="mb-3 font-normal text-gray-700 dark:text-gray-400">
|
|
||||||
{body}
|
|
||||||
</p>
|
|
||||||
<a
|
|
||||||
className="inline-flex items-center px-3 py-2 text-sm
|
|
||||||
font-medium text-center text-[--foreground] bg-[--background]
|
|
||||||
rounded-lg focus:ring-4 focus:outline-none focus:ring-blue-300
|
|
||||||
dark:focus:ring-blue-800"
|
|
||||||
href={url}
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
target="_blank"
|
|
||||||
>
|
|
||||||
{`View Issue`}
|
|
||||||
<svg
|
|
||||||
aria-hidden="true"
|
|
||||||
className="rtl:rotate-180 w-3.5 h-3.5 ms-2"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 14 10"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
d="M1 5h12m0 0L9 1m4 4L9 9"
|
|
||||||
stroke="currentColor"
|
|
||||||
strokeLinecap="round"
|
|
||||||
strokeLinejoin="round"
|
|
||||||
strokeWidth="2"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,60 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import Image from "next/image";
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
interface MemberProperties {
|
|
||||||
readonly name: string;
|
|
||||||
readonly avatar: string;
|
|
||||||
readonly role: string;
|
|
||||||
readonly url: string;
|
|
||||||
readonly joinDate: Date;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the view for a team member.
|
|
||||||
* @param properties - The member to render.
|
|
||||||
* @returns A JSX element.
|
|
||||||
*/
|
|
||||||
export const Member = (properties: MemberProperties): JSX.Element => {
|
|
||||||
const { name, avatar, role, url, joinDate } = properties;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="flex items-start gap-2.5 pb-10 w-full">
|
|
||||||
<Image
|
|
||||||
alt={`${name}'s avatar.`}
|
|
||||||
className="rounded-full"
|
|
||||||
height={75}
|
|
||||||
src={`https://cdn.nhcarrigan.com/avatars/${avatar}`}
|
|
||||||
width={75}
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
className="flex flex-col w-full leading-1.5
|
|
||||||
p-4 border-gray-200 bg-gray-100 rounded-e-xl
|
|
||||||
rounded-es-xl dark:bg-gray-700"
|
|
||||||
>
|
|
||||||
<div>
|
|
||||||
<a
|
|
||||||
className="text-sm font-semibold text-[#abfcec]"
|
|
||||||
href={url}
|
|
||||||
target="noopener noreferrer"
|
|
||||||
>
|
|
||||||
{name}
|
|
||||||
</a>
|
|
||||||
<p className="text-sm font-normal text-gray-500 dark:text-gray-400">
|
|
||||||
{joinDate.toLocaleDateString("en-GB", {
|
|
||||||
month: "long",
|
|
||||||
year: "numeric",
|
|
||||||
})}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<p className="text-sm font-normal py-2.5 text-gray-900 dark:text-white">
|
|
||||||
{role}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,59 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import Image from "next/image";
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
interface PartnerProperties {
|
|
||||||
readonly name: string;
|
|
||||||
readonly avatar: string;
|
|
||||||
readonly relationship: string;
|
|
||||||
readonly url: string;
|
|
||||||
readonly anniversary: Date;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the view for a polycule member.
|
|
||||||
* @param properties - The member to render.
|
|
||||||
* @returns A JSX element.
|
|
||||||
*/
|
|
||||||
export const Partner = (properties: PartnerProperties): JSX.Element => {
|
|
||||||
const { name, avatar, relationship, url, anniversary } = properties;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className="flex items-start gap-2.5 pb-10 w-full">
|
|
||||||
<Image
|
|
||||||
alt={`${name}'s avatar.`}
|
|
||||||
className="rounded-full"
|
|
||||||
height={75}
|
|
||||||
src={`https://cdn.nhcarrigan.com/avatars/${avatar}`}
|
|
||||||
width={75}
|
|
||||||
/>
|
|
||||||
<div className="flex flex-col w-full leading-1.5 p-4
|
|
||||||
border-gray-200 bg-gray-100 rounded-e-xl
|
|
||||||
rounded-es-xl dark:bg-gray-700">
|
|
||||||
<div>
|
|
||||||
<a
|
|
||||||
className="text-sm font-semibold text-[#abfcec]"
|
|
||||||
href={url}
|
|
||||||
target="noopener noreferrer"
|
|
||||||
>
|
|
||||||
{name}
|
|
||||||
</a>
|
|
||||||
<p className="text-sm font-normal text-gray-500 dark:text-gray-400">
|
|
||||||
{anniversary.toLocaleDateString("en-GB", {
|
|
||||||
day: "numeric",
|
|
||||||
month: "long",
|
|
||||||
year: "numeric",
|
|
||||||
})}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<p className="text-sm font-normal py-2.5 text-gray-900 dark:text-white">
|
|
||||||
{relationship}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,45 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
import type { JSX } from "react";
|
|
||||||
|
|
||||||
interface SocialProperties {
|
|
||||||
readonly icon: IconDefinition;
|
|
||||||
readonly link: string;
|
|
||||||
readonly label: string;
|
|
||||||
readonly alt: string;
|
|
||||||
readonly color: string;
|
|
||||||
readonly background: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Renders the view for a social media link.
|
|
||||||
* @param properties - The link to render.
|
|
||||||
* @returns A JSX element.
|
|
||||||
*/
|
|
||||||
export const Social = (properties: SocialProperties): JSX.Element => {
|
|
||||||
const { icon, link, label, alt, background, color } = properties;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<a
|
|
||||||
aria-label={label}
|
|
||||||
className="flex max-w-[300px] w-[95%] m-auto justify-between
|
|
||||||
items-center border-solid border-2 rounded-3xl h-14 p-8 my-4"
|
|
||||||
href={link}
|
|
||||||
rel="noreferrer"
|
|
||||||
style={{
|
|
||||||
background: background,
|
|
||||||
borderColor: color,
|
|
||||||
color: color,
|
|
||||||
}}
|
|
||||||
target="_blank"
|
|
||||||
>
|
|
||||||
<FontAwesomeIcon aria-label={alt} icon={icon} size="3x" />
|
|
||||||
<strong>{label}</strong>
|
|
||||||
</a>
|
|
||||||
);
|
|
||||||
};
|
|
@ -119,4 +119,11 @@ export const Art: Array<{
|
|||||||
name: "Ticket System",
|
name: "Ticket System",
|
||||||
url: "https://picrew.me/en/image_maker/625876",
|
url: "https://picrew.me/en/image_maker/625876",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
alt: "Anime-style portrait of a character with brown hair and blue eyes, wearking a pink top with a mesh chest, against a pink background.",
|
||||||
|
artist: "Picrew",
|
||||||
|
img: "logs.png",
|
||||||
|
name: "Mod Logs",
|
||||||
|
url: " https://picrew.me/en/image_maker/2539784",
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
@ -12,28 +12,21 @@ export const NavItems = [
|
|||||||
{ href: "/about", text: "About Naomi" },
|
{ href: "/about", text: "About Naomi" },
|
||||||
{ href: "/manual", text: "User Manual" },
|
{ href: "/manual", text: "User Manual" },
|
||||||
{ href: "/work", text: "Employment History" },
|
{ href: "/work", text: "Employment History" },
|
||||||
{ href: "/contact", text: "Contact Us" },
|
{ href: "https://contact.nhcarrigan.com", text: "Contact Us" },
|
||||||
{ href: "/certs", text: "Certifications" },
|
{ href: "/certs", text: "Certifications" },
|
||||||
{ href: "/reviews", text: "Reviews" },
|
{ href: "/reviews", text: "Reviews" },
|
||||||
{ href: "/games", text: "Game Screenshots" },
|
{ href: "/games", text: "Game Screenshots" },
|
||||||
{ href: "/team", text: "The NHCarrigan Team" },
|
|
||||||
{ href: "/polycule", text: "Polycule" },
|
|
||||||
{ href: "/art", text: "Art of Naomi" },
|
{ href: "/art", text: "Art of Naomi" },
|
||||||
{ href: "/manifesto", text: "Transfemme Manifesto" },
|
{ href: "/manifesto", text: "Transfemme Manifesto" },
|
||||||
{ href: "/ask", text: "Ask Me Anything!" },
|
|
||||||
{ href: "/tech", text: "Technologies" },
|
{ href: "/tech", text: "Technologies" },
|
||||||
{ href: "/contribute", text: "Contribute to our Projects" },
|
{ href: "https://git.nhcarrigan.com", text: "Contribute to our Projects" },
|
||||||
{ href: "/koikatsu", text: "Koikatsu Scenes" },
|
{ href: "/koikatsu", text: "Koikatsu Scenes" },
|
||||||
{ href: "/ref", text: "Reference Sheet" },
|
{ href: "/ref", text: "Reference Sheet" },
|
||||||
{ href: "/projects", text: "Our Projects" },
|
{ href: "/projects", text: "Our Projects" },
|
||||||
{ href: "/sales", text: "Sales Inquiries" },
|
|
||||||
{ href: "/newsletter", text: "Newsletter" },
|
|
||||||
{ href: "/appeal", text: "Sanction Appeals" },
|
|
||||||
{ href: "https://games.nhcarrigan.com", text: "Game Dev" },
|
{ href: "https://games.nhcarrigan.com", text: "Game Dev" },
|
||||||
{ href: "https://merch.nhcarrigan.link", text: "Merchandise" },
|
{ href: "https://merch.nhcarrigan.link", text: "Merchandise" },
|
||||||
{ href: "https://docs.nhcarrigan.com", text: "Documentation" },
|
{ href: "https://docs.nhcarrigan.com", text: "Documentation" },
|
||||||
{ href: "https://chat.nhcarrigan.com", text: "Support" },
|
{ href: "https://forum.nhcarrigan.com", text: "Support" },
|
||||||
{ href: "/apply", text: "Staff Application" },
|
|
||||||
].sort((a, b) => {
|
].sort((a, b) => {
|
||||||
return a.text.localeCompare(b.text);
|
return a.text.localeCompare(b.text);
|
||||||
});
|
});
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of polycule members to render.
|
|
||||||
*/
|
|
||||||
export const Partners: Array<{
|
|
||||||
name: string;
|
|
||||||
avatar: string;
|
|
||||||
relationship: string;
|
|
||||||
url: string;
|
|
||||||
anniversary: Date;
|
|
||||||
}> = [
|
|
||||||
{
|
|
||||||
anniversary: new Date("January 1, 2023"),
|
|
||||||
avatar: "dashi.png",
|
|
||||||
name: "Sadashi",
|
|
||||||
relationship: "Romantic Partner",
|
|
||||||
url: "https://chat.nhcarrigan.com",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
anniversary: new Date("November 17, 2023"),
|
|
||||||
avatar: "estel.png",
|
|
||||||
name: "Rain",
|
|
||||||
relationship: "Fiancée",
|
|
||||||
url: "https://chat.nhcarrigan.com",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
anniversary: new Date("October 1, 2023"),
|
|
||||||
avatar: "fruit.png",
|
|
||||||
name: "Kaitlyn",
|
|
||||||
relationship: "Queer-Platonic Partner",
|
|
||||||
url: "https://kaitlyn.nhcarrigan.com",
|
|
||||||
},
|
|
||||||
].sort((a, b) => {
|
|
||||||
return a.anniversary.getTime() - b.anniversary.getTime();
|
|
||||||
});
|
|
@ -1,536 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import {
|
|
||||||
faAngellist,
|
|
||||||
faBluesky,
|
|
||||||
faDiscord,
|
|
||||||
faFreeCodeCamp,
|
|
||||||
faGithub,
|
|
||||||
faGooglePlus,
|
|
||||||
faHashnode,
|
|
||||||
faItchIo,
|
|
||||||
faLinkedinIn,
|
|
||||||
faMastodon,
|
|
||||||
faMeetup,
|
|
||||||
faNpm,
|
|
||||||
faPatreon,
|
|
||||||
faPaypal,
|
|
||||||
faProductHunt,
|
|
||||||
faReddit,
|
|
||||||
faSignalMessenger,
|
|
||||||
faSlack,
|
|
||||||
faSteam,
|
|
||||||
faStripe,
|
|
||||||
faTelegramPlane,
|
|
||||||
faTiktok,
|
|
||||||
faTumblr,
|
|
||||||
faWordpress,
|
|
||||||
faYoutube,
|
|
||||||
faSnapchat,
|
|
||||||
} from "@fortawesome/free-brands-svg-icons";
|
|
||||||
import {
|
|
||||||
faAtom,
|
|
||||||
faBriefcase,
|
|
||||||
faChessKnight,
|
|
||||||
faComputer,
|
|
||||||
faEnvelope,
|
|
||||||
faGamepad,
|
|
||||||
faHashtag,
|
|
||||||
faMoneyBill,
|
|
||||||
} from "@fortawesome/free-solid-svg-icons";
|
|
||||||
import { Codeberg } from "../icons/Codeberg";
|
|
||||||
import { Coursera } from "../icons/Coursera";
|
|
||||||
import { Fiverr } from "../icons/Fiverr";
|
|
||||||
import { Gather } from "../icons/Gather";
|
|
||||||
import { Gog } from "../icons/Gog";
|
|
||||||
import { Gumroad } from "../icons/Gumroad";
|
|
||||||
import { Kofi } from "../icons/KoFi";
|
|
||||||
import { Matrix } from "../icons/Matrix";
|
|
||||||
import { Peerlist } from "../icons/Peerlist";
|
|
||||||
import { Pixiv } from "../icons/Pixiv";
|
|
||||||
import { Polywork } from "../icons/Polywork";
|
|
||||||
import { RetroAchievements } from "../icons/RetroAchievements";
|
|
||||||
import { Saylor } from "../icons/Saylor";
|
|
||||||
import { TeeSpring } from "../icons/TeeSpring";
|
|
||||||
import { Throne } from "../icons/Throne";
|
|
||||||
import { Topmate } from "../icons/Topmate";
|
|
||||||
import { TreeNation } from "../icons/TreeNation";
|
|
||||||
import { Udemy } from "../icons/Udemy";
|
|
||||||
import { VRoid } from "../icons/VRoid";
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom button with gradient for hire CTA.
|
|
||||||
*/
|
|
||||||
const HireMe: {
|
|
||||||
icon: IconDefinition;
|
|
||||||
link: string;
|
|
||||||
label: string;
|
|
||||||
alt: string;
|
|
||||||
color: string;
|
|
||||||
background: string;
|
|
||||||
} = {
|
|
||||||
alt: "Briefcase Icon",
|
|
||||||
background: `linear-gradient(
|
|
||||||
90deg,
|
|
||||||
#5bcefa,
|
|
||||||
#f5a9b8,
|
|
||||||
#ffffff,
|
|
||||||
#f5a9b8,
|
|
||||||
#5bcefa
|
|
||||||
)`,
|
|
||||||
color: "#003600",
|
|
||||||
icon: faBriefcase,
|
|
||||||
label: "Hire Us!",
|
|
||||||
link: "https://docs.nhcarrigan.com/about/hire/",
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom button with gradient for Donate CTA.
|
|
||||||
*/
|
|
||||||
const Donate: {
|
|
||||||
icon: IconDefinition;
|
|
||||||
link: string;
|
|
||||||
label: string;
|
|
||||||
alt: string;
|
|
||||||
color: string;
|
|
||||||
background: string;
|
|
||||||
} = {
|
|
||||||
alt: "Money Icon",
|
|
||||||
background: `linear-gradient(
|
|
||||||
90deg,
|
|
||||||
rgba(255, 0, 0, 1) 0%,
|
|
||||||
rgba(251, 7, 217, 1) 10%,
|
|
||||||
rgba(186, 12, 248, 1) 20%,
|
|
||||||
rgba(95, 21, 242, 1) 30%,
|
|
||||||
rgba(28, 127, 238, 1) 40%,
|
|
||||||
rgba(47, 201, 226, 1) 50%,
|
|
||||||
rgba(63, 218, 216, 1) 60%,
|
|
||||||
rgba(79, 220, 74, 1) 70%,
|
|
||||||
rgba(208, 222, 33, 1) 80%,
|
|
||||||
rgba(255, 154, 0, 1) 90%,
|
|
||||||
rgba(255, 0, 0, 1) 100%
|
|
||||||
)`,
|
|
||||||
color: "#003600",
|
|
||||||
icon: faMoneyBill,
|
|
||||||
label: "Donate 💜",
|
|
||||||
link: "https://docs.nhcarrigan.com/about/donate/",
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of social media buttons to render.
|
|
||||||
*/
|
|
||||||
const Socials: Array<{
|
|
||||||
icon: IconDefinition;
|
|
||||||
link: string;
|
|
||||||
label: string;
|
|
||||||
alt: string;
|
|
||||||
color: string;
|
|
||||||
background: string;
|
|
||||||
}> = [
|
|
||||||
{
|
|
||||||
alt: "Codeberg Logo",
|
|
||||||
background: "#0B3049",
|
|
||||||
color: "#B5DDFF",
|
|
||||||
icon: Codeberg,
|
|
||||||
label: "Codeberg",
|
|
||||||
link: "https://codeberg.org/naomi-lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "GitHub Logo",
|
|
||||||
background: "#333333",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faGithub,
|
|
||||||
label: "GitHub",
|
|
||||||
link: "https://github.com/nhcarrigan",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Discord Logo",
|
|
||||||
background: "#7289DA",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faDiscord,
|
|
||||||
label: "Discord",
|
|
||||||
link: "https://chat.naomi.lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Element Logo",
|
|
||||||
background: "#29B6F6",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: Matrix,
|
|
||||||
label: "Matrix",
|
|
||||||
link: "https://matrix.to/#/#naomi:matrix.org",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Octothorpe",
|
|
||||||
background: "#000000",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faHashtag,
|
|
||||||
label: "IRC",
|
|
||||||
link: "https://docs.nhcarrigan.com/about/contact/#33-irc-channels",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Slack Logo",
|
|
||||||
background: "#4A154B",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faSlack,
|
|
||||||
label: "Slack",
|
|
||||||
link: "https://join.slack.com/t/naomi-lgbt/signup",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Reddit Logo",
|
|
||||||
background: "#FF4500",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faReddit,
|
|
||||||
label: "Reddit",
|
|
||||||
link: "https://reddit.com/r/nhcarrigan",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Hashnode Logo",
|
|
||||||
background: "#2962FF",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faHashnode,
|
|
||||||
label: "Blog",
|
|
||||||
link: "https://blog.nhcarrigan.com",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "LinkedIn Logo",
|
|
||||||
background: "#0077B5",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faLinkedinIn,
|
|
||||||
label: "LinkedIn",
|
|
||||||
link: "https://linkedin.com/in/naomi-lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Peerlist Logo",
|
|
||||||
background: "#219653",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: Peerlist,
|
|
||||||
label: "Peerlist",
|
|
||||||
link: "https://resume.nhcarrigan.com",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Polywork Logo",
|
|
||||||
background: "#7C3AED",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: Polywork,
|
|
||||||
label: "Polywork",
|
|
||||||
link: "https://polywork.nhcarrigan.com/",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Fiverr Logo",
|
|
||||||
background: "#1DBF73",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: Fiverr,
|
|
||||||
label: "Fiverr",
|
|
||||||
link: "https://www.fiverr.com/nhcarrigan",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Mastodon Logo",
|
|
||||||
background: "#2B90D9",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faMastodon,
|
|
||||||
label: "Mastodon",
|
|
||||||
link: "https://mastodon.social/@naomi_lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Steam Logo",
|
|
||||||
background: "#1b2838",
|
|
||||||
color: "#c7d5e0",
|
|
||||||
icon: faSteam,
|
|
||||||
label: "Steam",
|
|
||||||
link: "https://steamcommunity.com/id/naomi-lgbt/",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "How Long to Beat Logo",
|
|
||||||
background: "#333333",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faGamepad,
|
|
||||||
label: "HLTB",
|
|
||||||
link: "https://howlongtobeat.com/user/naomi_lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Snapchat Logo",
|
|
||||||
background: "#FFFC00",
|
|
||||||
color: "#000000",
|
|
||||||
icon: faSnapchat,
|
|
||||||
label: "Snapchat",
|
|
||||||
link: "https://www.snapchat.com/add/naomi-lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "GOG Logo",
|
|
||||||
background: "#863A3A",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: Gog,
|
|
||||||
label: "GOG",
|
|
||||||
link: "https://www.gog.com/u/naomi-lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Itch.io Logo",
|
|
||||||
background: "#FA5C5C",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faItchIo,
|
|
||||||
label: "Itch.io",
|
|
||||||
link: "https://nhcarrigan.itch.io/",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Lichess Logo",
|
|
||||||
background: "#000000",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faChessKnight,
|
|
||||||
label: "Lichess",
|
|
||||||
link: "https://lichess.org/../naomi-lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Saylor Academy Logo",
|
|
||||||
background: "#469dcc",
|
|
||||||
color: "#183140",
|
|
||||||
icon: Saylor,
|
|
||||||
label: "Saylor Academy",
|
|
||||||
link: "https://learn.saylor.org/user/profile.php?id=2074619",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Paypal Logo",
|
|
||||||
background: "#003087",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faPaypal,
|
|
||||||
label: "Paypal",
|
|
||||||
link: "https://paypal.me/nhcarrigan",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Ko-Fi Logo",
|
|
||||||
background: "#FF5E5B",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: Kofi,
|
|
||||||
label: "Ko-Fi",
|
|
||||||
link: "https://ko-fi.com/nhcarrigan",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Patreon Logo",
|
|
||||||
background: "#F96854",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faPatreon,
|
|
||||||
label: "Patreon",
|
|
||||||
link: "https://patreon.com/nhcarrigan",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "freeCodeCamp Logo",
|
|
||||||
background: "#0a0a23",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faFreeCodeCamp,
|
|
||||||
label: "freeCodeCamp",
|
|
||||||
link: "https://forum.freecodecamp.org/u/nhcarrigan/summary",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "NPM Logo",
|
|
||||||
background: "#CB3837",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faNpm,
|
|
||||||
label: "NPM",
|
|
||||||
link: "https://www.npmjs.com/~nhcarrigan",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "GatherTown Logo",
|
|
||||||
background: "#7B68EE",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: Gather,
|
|
||||||
label: "GatherTown",
|
|
||||||
link: "https://app.gather.town/invite?token=CiIvbSnrQiW-akXFSPL_",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "VRoid Logo",
|
|
||||||
background: "#ffe100",
|
|
||||||
color: "#000000",
|
|
||||||
icon: VRoid,
|
|
||||||
label: "VRoid",
|
|
||||||
link: "https://hub.vroid.com/en/characters/6033404747153826650/models/3483506204509065121",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Pixiv Logo",
|
|
||||||
background: "#0096FA",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: Pixiv,
|
|
||||||
label: "Pixiv",
|
|
||||||
link: "https://www.pixiv.net/en/users/77818154",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Email Icon",
|
|
||||||
background: "#000000",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faEnvelope,
|
|
||||||
label: "Email",
|
|
||||||
link: "https://docs.nhcarrigan.com/about/contact/#7-email-communication",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Coursera Logo",
|
|
||||||
background: "#0056D2",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: Coursera,
|
|
||||||
label: "Coursera",
|
|
||||||
link: "https://www.coursera.org/learner/naomi-lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Udemy Logo",
|
|
||||||
background: "#EC5252",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: Udemy,
|
|
||||||
label: "Udemy",
|
|
||||||
link: "https://www.udemy.com/user/naomi-carrigan/",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Wordpress Logo",
|
|
||||||
background: "#1E8EDE",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faWordpress,
|
|
||||||
label: "Gravatar",
|
|
||||||
link: "https://gravatar.com/nhcarrigan",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Computer Icon",
|
|
||||||
background: "#000000",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faComputer,
|
|
||||||
label: "PC Part Picker",
|
|
||||||
link: "https://pcpartpicker.com/user/nhcarrigan/",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Throne.me Logo",
|
|
||||||
background: "#000000",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: Throne,
|
|
||||||
label: "Throne",
|
|
||||||
link: "https://throne.com/naomilgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Stripe Logo",
|
|
||||||
background: "#6772E5",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faStripe,
|
|
||||||
label: "Stripe",
|
|
||||||
link: "https://buy.stripe.com/cN24iTfqu1j6b3afZ2",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Signal Logo",
|
|
||||||
background: "#FFFFFF",
|
|
||||||
color: "#3A76F0",
|
|
||||||
icon: faSignalMessenger,
|
|
||||||
label: "Signal",
|
|
||||||
link: "https://signal.me/#eu/YGo6ag7kAwkdfkw863-J4qLK3VyKn8uWLhvyX60Jx5J0qrDZnz1B_aLrjM9yAMe6",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Angellist Logo",
|
|
||||||
background: "#000000",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faAngellist,
|
|
||||||
label: "WellFound",
|
|
||||||
link: "https://wellfound.com/u/naomi-h-carrigan",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "ProtonDB Logo",
|
|
||||||
background: "#000000",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faAtom,
|
|
||||||
label: "ProtonDB",
|
|
||||||
link: "https://www.protondb.com/users/1717755560",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "TeeSpring Logo",
|
|
||||||
background: "#000000",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: TeeSpring,
|
|
||||||
label: "Merch",
|
|
||||||
link: "https://nhcarrigan.creator-spring.com/",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "BlueSky Logo",
|
|
||||||
background: "#1DA1F2",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faBluesky,
|
|
||||||
label: "BlueSky",
|
|
||||||
link: "https://bsky.app/profile/naomi.lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Telegram Logo",
|
|
||||||
background: "#0088cc",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faTelegramPlane,
|
|
||||||
label: "Telegram",
|
|
||||||
link: "https://t.me/naomi_lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Google Chat Logo",
|
|
||||||
background: "#DB4437",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faGooglePlus,
|
|
||||||
label: "Google Chat",
|
|
||||||
link: "https://chat.google.com/room/AAAAK270m3M",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Tree Nation Logo",
|
|
||||||
background: "#FFFFFF",
|
|
||||||
color: "#55C1A8",
|
|
||||||
icon: TreeNation,
|
|
||||||
label: "Tree Nation",
|
|
||||||
link: "https://tree-nation.com/profile/naomi-carrigan",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Meetup Logo",
|
|
||||||
background: "#FF6D00",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faMeetup,
|
|
||||||
label: "Meetup",
|
|
||||||
link: "https://www.meetup.com/members/437962584/",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Tumblr Logo",
|
|
||||||
background: "#36465D",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faTumblr,
|
|
||||||
label: "Tumblr",
|
|
||||||
link: "https://www.tumblr.com/naomi-lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "YouTube Logo",
|
|
||||||
background: "#FF0000",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faYoutube,
|
|
||||||
label: "YouTube",
|
|
||||||
link: "https://www.youtube.com/@naomilgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "RetroAchievements Logo",
|
|
||||||
background: "#1066dd",
|
|
||||||
color: "#cc9a00",
|
|
||||||
icon: RetroAchievements,
|
|
||||||
label: "RetroAchievements",
|
|
||||||
link: "https://retroachievements.org/user/naomilgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "ProductHunt Logo",
|
|
||||||
background: "#da552f",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: faProductHunt,
|
|
||||||
label: "ProductHunt",
|
|
||||||
link: "https://www.producthunt.com/@naomi_lgbt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Topmate Logo",
|
|
||||||
background: "#e44332",
|
|
||||||
color: "#FFFFFF",
|
|
||||||
icon: Topmate,
|
|
||||||
label: "Topmate",
|
|
||||||
link: "https://topmate.io/nhcarrigan",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
alt: "Gumroad Logo",
|
|
||||||
background: "#fe90e7",
|
|
||||||
color: "#000000",
|
|
||||||
icon: Gumroad,
|
|
||||||
label: "Gumroad",
|
|
||||||
link: "https://nhcarrigan.gumroad.com",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
export { HireMe, Donate, Socials };
|
|
@ -1,45 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of nhcarrigan team members to render.
|
|
||||||
*/
|
|
||||||
export const TeamMembers: Array<{
|
|
||||||
name: string;
|
|
||||||
avatar: string;
|
|
||||||
role: string;
|
|
||||||
url: string;
|
|
||||||
joinDate: Date;
|
|
||||||
}> = [
|
|
||||||
{
|
|
||||||
avatar: "naomi.png",
|
|
||||||
joinDate: new Date("April 1, 2020"),
|
|
||||||
name: "Naomi Carrigan",
|
|
||||||
role: "Founder / CEO",
|
|
||||||
url: "https://chat.nhcarrigan.com",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
avatar: "denna.png",
|
|
||||||
joinDate: new Date("April 2, 2020"),
|
|
||||||
name: "Denna",
|
|
||||||
role: "Chief Financial Officer",
|
|
||||||
url: "https://denna.nhcarrigan.com",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
avatar: "tim.png",
|
|
||||||
joinDate: new Date("April 2, 2020"),
|
|
||||||
name: "Tim",
|
|
||||||
role: "Chief Technical Officer",
|
|
||||||
url: "https://chat.nhcarrigan.com",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
avatar: "anna.png",
|
|
||||||
joinDate: new Date("August 29, 2023"),
|
|
||||||
name: "Anna",
|
|
||||||
role: "Software Engineering Intern",
|
|
||||||
url: "https://chat.nhcarrigan.com",
|
|
||||||
},
|
|
||||||
];
|
|
@ -1,73 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Codeberg logo.
|
|
||||||
*/
|
|
||||||
export const Codeberg: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
474,
|
|
||||||
474,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 36.00,373.00
|
|
||||||
C 19.99,344.87 11.56,324.72 5.00,293.00
|
|
||||||
5.00,293.00 2.08,280.00 2.08,280.00
|
|
||||||
2.08,280.00 2.08,271.04 2.08,271.04
|
|
||||||
1.21,265.55 0.02,268.68 0.00,259.00
|
|
||||||
0.00,259.00 0.00,232.00 0.00,232.00
|
|
||||||
0.10,225.30 1.32,226.49 2.08,221.96
|
|
||||||
2.08,221.96 2.08,214.00 2.08,214.00
|
|
||||||
2.08,214.00 4.55,203.00 4.55,203.00
|
|
||||||
8.89,181.33 13.79,163.93 23.75,144.00
|
|
||||||
23.75,144.00 31.87,128.00 31.87,128.00
|
|
||||||
40.56,112.80 56.86,91.48 69.17,79.17
|
|
||||||
69.17,79.17 80.00,69.72 80.00,69.72
|
|
||||||
90.99,60.09 102.48,51.08 115.00,43.46
|
|
||||||
115.00,43.46 132.00,34.75 132.00,34.75
|
|
||||||
194.09,3.71 265.92,2.29 330.00,28.45
|
|
||||||
346.58,35.22 368.94,48.49 383.00,59.51
|
|
||||||
383.00,59.51 397.00,71.72 397.00,71.72
|
|
||||||
418.24,90.34 435.64,113.79 448.25,139.00
|
|
||||||
460.07,162.66 464.56,176.20 469.80,202.00
|
|
||||||
471.25,209.15 473.99,218.02 474.00,225.00
|
|
||||||
474.00,225.00 474.00,270.00 474.00,270.00
|
|
||||||
474.00,270.00 469.42,294.00 469.42,294.00
|
|
||||||
469.42,294.00 465.25,313.00 465.25,313.00
|
|
||||||
465.25,313.00 454.33,343.00 454.33,343.00
|
|
||||||
454.33,343.00 439.00,373.00 439.00,373.00
|
|
||||||
439.00,373.00 437.00,373.00 437.00,373.00
|
|
||||||
437.00,373.00 386.42,307.00 386.42,307.00
|
|
||||||
386.42,307.00 285.87,177.00 285.87,177.00
|
|
||||||
285.87,177.00 250.35,131.00 250.35,131.00
|
|
||||||
247.89,127.81 240.50,116.27 236.17,117.49
|
|
||||||
234.17,118.05 231.85,121.40 230.58,123.00
|
|
||||||
230.58,123.00 221.13,135.00 221.13,135.00
|
|
||||||
221.13,135.00 183.35,184.00 183.35,184.00
|
|
||||||
183.35,184.00 88.88,306.00 88.88,306.00
|
|
||||||
88.88,306.00 55.65,349.00 55.65,349.00
|
|
||||||
50.94,355.09 41.27,368.61 36.00,373.00 Z
|
|
||||||
M 244.00,138.00
|
|
||||||
C 244.00,138.00 272.65,174.00 272.65,174.00
|
|
||||||
272.65,174.00 327.65,245.00 327.65,245.00
|
|
||||||
327.65,245.00 401.88,341.00 401.88,341.00
|
|
||||||
401.88,341.00 433.00,382.00 433.00,382.00
|
|
||||||
433.00,382.00 409.96,410.00 409.96,410.00
|
|
||||||
409.96,410.00 400.00,419.17 400.00,419.17
|
|
||||||
400.00,419.17 389.00,429.68 389.00,429.68
|
|
||||||
389.00,429.68 361.00,449.54 361.00,449.54
|
|
||||||
361.00,449.54 346.00,457.31 346.00,457.31
|
|
||||||
346.00,457.31 331.00,465.00 331.00,465.00
|
|
||||||
331.00,465.00 315.85,409.00 315.85,409.00
|
|
||||||
315.85,409.00 283.85,289.00 283.85,289.00
|
|
||||||
283.85,289.00 257.12,189.00 257.12,189.00
|
|
||||||
257.12,189.00 244.00,138.00 244.00,138.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,126 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Coursera logo.
|
|
||||||
*/
|
|
||||||
export const Coursera: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
825,
|
|
||||||
825,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 397.00,0.23
|
|
||||||
C 397.00,0.23 421.00,0.23 421.00,0.23
|
|
||||||
421.00,0.23 436.00,1.92 436.00,1.92
|
|
||||||
436.00,1.92 445.00,1.92 445.00,1.92
|
|
||||||
464.83,2.24 500.36,9.70 520.00,14.91
|
|
||||||
564.71,26.78 604.32,45.18 642.72,70.91
|
|
||||||
642.72,70.91 666.54,87.59 666.54,87.59
|
|
||||||
679.69,97.87 691.91,109.49 703.71,121.29
|
|
||||||
750.05,167.63 785.48,224.18 804.76,287.00
|
|
||||||
804.76,287.00 816.55,331.00 816.55,331.00
|
|
||||||
816.55,331.00 818.37,344.00 818.37,344.00
|
|
||||||
820.23,353.40 822.89,368.59 823.09,378.00
|
|
||||||
823.09,378.00 823.09,390.00 823.09,390.00
|
|
||||||
823.81,395.27 824.91,394.72 825.00,402.00
|
|
||||||
825.00,402.00 825.00,419.00 825.00,419.00
|
|
||||||
824.99,427.76 823.88,428.69 823.08,436.00
|
|
||||||
823.08,436.00 823.08,446.00 823.08,446.00
|
|
||||||
822.88,455.97 820.17,471.99 818.31,482.00
|
|
||||||
818.31,482.00 816.76,493.00 816.76,493.00
|
|
||||||
813.29,511.46 806.77,533.13 800.72,551.00
|
|
||||||
800.72,551.00 789.17,579.17 789.17,579.17
|
|
||||||
743.04,685.52 649.01,770.68 538.00,804.76
|
|
||||||
514.40,812.01 493.53,817.23 469.00,820.29
|
|
||||||
469.00,820.29 445.00,823.09 445.00,823.09
|
|
||||||
445.00,823.09 435.00,823.09 435.00,823.09
|
|
||||||
427.99,823.92 429.93,824.98 420.00,825.00
|
|
||||||
420.00,825.00 405.00,825.00 405.00,825.00
|
|
||||||
405.00,825.00 389.00,823.08 389.00,823.08
|
|
||||||
389.00,823.08 379.00,823.08 379.00,823.08
|
|
||||||
368.84,822.88 353.18,820.20 343.00,818.31
|
|
||||||
343.00,818.31 332.00,816.76 332.00,816.76
|
|
||||||
308.66,812.37 277.98,802.81 256.00,793.71
|
|
||||||
211.64,775.33 173.47,751.31 137.46,719.58
|
|
||||||
137.46,719.58 121.29,703.71 121.29,703.71
|
|
||||||
74.93,657.35 39.53,600.84 20.24,538.00
|
|
||||||
20.24,538.00 8.24,493.00 8.24,493.00
|
|
||||||
8.24,493.00 6.81,482.00 6.81,482.00
|
|
||||||
6.81,482.00 5.21,475.00 5.21,475.00
|
|
||||||
3.59,463.77 2.02,452.36 2.00,441.00
|
|
||||||
2.00,441.00 0.00,421.00 0.00,421.00
|
|
||||||
0.00,421.00 0.00,405.00 0.00,405.00
|
|
||||||
0.00,405.00 1.92,389.00 1.92,389.00
|
|
||||||
1.92,389.00 1.92,380.00 1.92,380.00
|
|
||||||
2.15,367.31 4.82,354.46 6.86,342.00
|
|
||||||
12.62,306.62 23.37,271.55 38.55,239.00
|
|
||||||
85.92,137.42 175.10,56.39 282.00,21.68
|
|
||||||
301.73,15.28 321.55,10.19 342.00,6.86
|
|
||||||
342.00,6.86 350.00,5.18 350.00,5.18
|
|
||||||
350.00,5.18 378.00,2.00 378.00,2.00
|
|
||||||
387.62,1.89 387.16,2.56 397.00,0.23 Z
|
|
||||||
M 654.00,274.00
|
|
||||||
C 652.59,267.31 647.58,262.01 643.51,256.72
|
|
||||||
635.54,246.34 626.80,236.89 617.43,227.75
|
|
||||||
582.03,193.25 534.25,169.22 486.00,159.22
|
|
||||||
486.00,159.22 475.00,157.75 475.00,157.75
|
|
||||||
475.00,157.75 469.00,156.26 469.00,156.26
|
|
||||||
469.00,156.26 443.00,154.00 443.00,154.00
|
|
||||||
443.00,154.00 419.00,154.00 419.00,154.00
|
|
||||||
419.00,154.00 393.00,156.26 393.00,156.26
|
|
||||||
393.00,156.26 387.00,157.75 387.00,157.75
|
|
||||||
387.00,157.75 376.00,159.22 376.00,159.22
|
|
||||||
359.46,162.64 337.52,169.42 322.09,176.22
|
|
||||||
310.29,181.41 299.65,187.64 288.72,194.38
|
|
||||||
230.27,230.42 189.21,287.07 173.67,354.00
|
|
||||||
173.67,354.00 169.00,376.00 169.00,376.00
|
|
||||||
169.00,376.00 169.00,384.00 169.00,384.00
|
|
||||||
168.19,389.27 167.09,388.72 167.00,396.00
|
|
||||||
167.00,396.00 167.00,427.00 167.00,427.00
|
|
||||||
167.02,437.40 168.03,434.44 169.06,441.00
|
|
||||||
169.06,441.00 169.06,450.00 169.06,450.00
|
|
||||||
171.22,463.47 175.55,480.94 179.94,493.83
|
|
||||||
208.58,578.07 278.08,641.10 364.00,663.24
|
|
||||||
375.88,666.30 405.06,670.98 417.00,671.00
|
|
||||||
417.00,671.00 445.00,671.00 445.00,671.00
|
|
||||||
445.00,671.00 469.00,668.63 469.00,668.63
|
|
||||||
469.00,668.63 475.00,667.19 475.00,667.19
|
|
||||||
475.00,667.19 486.00,665.76 486.00,665.76
|
|
||||||
486.00,665.76 503.00,661.27 503.00,661.27
|
|
||||||
547.18,648.72 587.85,626.54 620.12,593.45
|
|
||||||
631.39,581.89 638.18,574.40 647.68,561.15
|
|
||||||
651.38,556.00 655.09,552.51 656.00,546.00
|
|
||||||
656.00,546.00 622.00,526.15 622.00,526.15
|
|
||||||
622.00,526.15 574.08,498.06 574.08,498.06
|
|
||||||
574.08,498.06 546.00,482.00 546.00,482.00
|
|
||||||
534.75,499.99 523.33,511.09 506.00,523.14
|
|
||||||
494.21,531.34 480.79,536.77 467.09,540.79
|
|
||||||
458.67,543.26 443.67,545.99 435.00,546.00
|
|
||||||
424.27,546.02 411.46,544.96 401.00,542.55
|
|
||||||
357.16,532.46 320.34,499.15 303.73,457.72
|
|
||||||
300.20,448.91 295.05,428.27 295.00,419.00
|
|
||||||
295.00,419.00 295.00,405.00 295.00,405.00
|
|
||||||
295.08,398.63 295.76,399.32 296.68,394.00
|
|
||||||
298.79,381.82 299.55,375.89 304.46,364.00
|
|
||||||
311.29,347.50 322.76,330.34 335.46,317.80
|
|
||||||
352.35,301.13 374.31,288.72 397.17,282.45
|
|
||||||
397.17,282.45 406.00,280.91 406.00,280.91
|
|
||||||
413.70,279.46 411.09,279.01 420.00,279.00
|
|
||||||
420.00,279.00 442.00,279.00 442.00,279.00
|
|
||||||
461.77,279.03 484.13,288.32 501.09,297.97
|
|
||||||
508.30,302.07 525.10,315.12 530.25,321.17
|
|
||||||
532.57,323.88 541.23,335.82 544.15,336.27
|
|
||||||
546.02,336.55 550.51,333.55 552.25,332.55
|
|
||||||
552.25,332.55 574.00,319.99 574.00,319.99
|
|
||||||
574.00,319.99 631.99,286.46 631.99,286.46
|
|
||||||
631.99,286.46 654.00,274.00 654.00,274.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,63 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Fiverr logo.
|
|
||||||
*/
|
|
||||||
export const Fiverr: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
300,
|
|
||||||
300,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 131.00,0.21
|
|
||||||
C 131.00,0.21 161.00,0.21 161.00,0.21
|
|
||||||
175.05,0.02 192.91,4.74 206.00,9.81
|
|
||||||
219.21,14.93 234.03,23.67 245.00,32.61
|
|
||||||
271.56,54.26 290.61,84.25 297.40,118.00
|
|
||||||
298.88,125.38 299.99,130.37 300.00,138.00
|
|
||||||
300.00,138.00 300.00,164.00 300.00,164.00
|
|
||||||
299.71,188.69 285.28,221.51 270.63,241.00
|
|
||||||
257.74,258.14 242.56,270.96 224.00,281.57
|
|
||||||
207.02,291.29 180.65,299.97 161.00,300.00
|
|
||||||
161.00,300.00 137.00,300.00 137.00,300.00
|
|
||||||
126.65,299.88 110.91,295.97 101.00,292.67
|
|
||||||
56.73,277.91 22.19,243.07 7.08,199.00
|
|
||||||
-1.16,174.97 -0.04,162.44 0.00,138.00
|
|
||||||
0.02,124.75 3.92,109.38 8.58,97.00
|
|
||||||
29.12,42.42 74.15,9.01 131.00,0.21 Z
|
|
||||||
M 176.00,58.00
|
|
||||||
C 152.33,58.00 122.24,54.22 107.10,77.00
|
|
||||||
104.97,80.22 103.13,84.29 102.04,88.00
|
|
||||||
100.10,94.62 100.00,104.07 100.00,111.00
|
|
||||||
100.00,111.00 78.00,111.00 78.00,111.00
|
|
||||||
78.00,111.00 78.00,141.00 78.00,141.00
|
|
||||||
95.43,141.00 99.81,138.98 100.00,149.00
|
|
||||||
100.00,149.00 100.00,200.00 100.00,200.00
|
|
||||||
100.00,200.00 100.00,220.00 100.00,220.00
|
|
||||||
100.00,221.94 99.75,225.72 100.99,227.26
|
|
||||||
102.70,229.38 107.50,229.00 110.00,229.00
|
|
||||||
110.00,229.00 138.00,229.00 138.00,229.00
|
|
||||||
138.00,229.00 138.00,163.00 138.00,163.00
|
|
||||||
138.00,158.95 136.99,145.29 139.60,142.74
|
|
||||||
141.71,140.68 146.23,141.00 149.00,141.00
|
|
||||||
149.00,141.00 169.00,141.00 169.00,141.00
|
|
||||||
171.37,141.04 174.58,140.96 176.40,142.74
|
|
||||||
178.34,144.64 177.99,148.47 178.00,151.00
|
|
||||||
178.00,151.00 178.00,229.00 178.00,229.00
|
|
||||||
178.00,229.00 215.00,229.00 215.00,229.00
|
|
||||||
215.00,229.00 215.00,111.00 215.00,111.00
|
|
||||||
215.00,111.00 138.00,111.00 138.00,111.00
|
|
||||||
138.00,106.78 137.73,101.98 139.34,98.01
|
|
||||||
143.35,88.13 153.31,89.00 162.00,89.00
|
|
||||||
162.00,89.00 176.00,89.00 176.00,89.00
|
|
||||||
176.00,89.00 176.00,58.00 176.00,58.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,83 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* GatherTown logo.
|
|
||||||
*/
|
|
||||||
export const Gather: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
38,
|
|
||||||
42,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 5.00,0.00
|
|
||||||
C 5.00,0.00 7.00,0.00 7.00,0.00
|
|
||||||
7.00,0.00 17.00,10.00 17.00,10.00
|
|
||||||
17.00,10.00 10.00,9.00 10.00,9.00
|
|
||||||
10.00,9.00 9.00,15.00 9.00,15.00
|
|
||||||
9.00,15.00 5.00,14.00 5.00,14.00
|
|
||||||
6.50,6.48 5.94,8.12 4.00,1.00
|
|
||||||
4.00,1.00 5.00,0.00 5.00,0.00 Z
|
|
||||||
M 20.00,14.00
|
|
||||||
C 20.11,12.71 20.06,11.37 20.60,10.15
|
|
||||||
24.66,0.89 36.99,13.91 26.89,16.61
|
|
||||||
25.97,16.80 24.94,16.81 24.00,16.61
|
|
||||||
22.18,16.37 21.52,15.79 20.00,15.00
|
|
||||||
19.74,22.50 17.00,24.66 10.00,21.00
|
|
||||||
9.92,23.16 10.07,25.75 8.40,27.40
|
|
||||||
6.21,29.57 1.33,29.29 0.33,24.95
|
|
||||||
-0.95,19.37 3.30,16.65 10.00,21.00
|
|
||||||
10.26,13.53 12.65,11.13 20.00,14.00 Z
|
|
||||||
M 25.00,10.00
|
|
||||||
C 25.00,10.00 26.00,14.00 26.00,14.00
|
|
||||||
26.00,14.00 25.00,10.00 25.00,10.00 Z
|
|
||||||
M 16.00,16.00
|
|
||||||
C 16.00,16.00 14.00,16.00 14.00,16.00
|
|
||||||
14.00,16.00 13.00,17.00 13.00,17.00
|
|
||||||
13.00,17.00 13.00,19.00 13.00,19.00
|
|
||||||
13.00,19.00 14.00,20.00 14.00,20.00
|
|
||||||
14.00,20.00 16.00,20.00 16.00,20.00
|
|
||||||
16.00,20.00 17.00,19.00 17.00,19.00
|
|
||||||
17.00,19.00 17.00,17.00 17.00,17.00
|
|
||||||
17.00,17.00 16.00,16.00 16.00,16.00 Z
|
|
||||||
M 21.00,27.00
|
|
||||||
C 21.08,24.86 20.92,22.37 22.60,20.74
|
|
||||||
25.35,18.08 30.07,19.45 31.16,23.05
|
|
||||||
32.37,27.10 27.72,32.83 20.89,27.00
|
|
||||||
20.89,27.00 20.89,30.96 20.89,30.96
|
|
||||||
20.59,31.90 20.38,32.76 19.83,33.57
|
|
||||||
18.92,34.88 17.56,35.55 15.98,35.55
|
|
||||||
9.23,35.55 9.53,24.34 17.00,25.35
|
|
||||||
18.77,25.59 19.54,26.23 21.00,27.00 Z
|
|
||||||
M 7.00,23.00
|
|
||||||
C 7.00,23.00 4.00,22.00 4.00,22.00
|
|
||||||
4.00,22.00 3.00,25.00 3.00,25.00
|
|
||||||
3.00,25.00 7.00,23.00 7.00,23.00 Z
|
|
||||||
M 28.00,23.00
|
|
||||||
C 28.00,23.00 24.00,25.00 24.00,25.00
|
|
||||||
24.00,25.00 28.00,26.00 28.00,26.00
|
|
||||||
28.00,26.00 28.00,23.00 28.00,23.00 Z
|
|
||||||
M 18.00,30.00
|
|
||||||
C 18.00,30.00 14.00,29.00 14.00,29.00
|
|
||||||
15.59,31.26 15.58,31.39 18.00,30.00 Z
|
|
||||||
M 23.31,33.02
|
|
||||||
C 32.01,29.83 33.13,38.37 28.77,40.97
|
|
||||||
24.19,43.71 18.07,38.68 23.31,33.02 Z
|
|
||||||
M 27.00,35.00
|
|
||||||
C 27.00,35.00 25.00,35.00 25.00,35.00
|
|
||||||
25.00,35.00 24.00,36.00 24.00,36.00
|
|
||||||
24.00,36.00 24.00,38.00 24.00,38.00
|
|
||||||
24.00,38.00 25.00,39.00 25.00,39.00
|
|
||||||
25.00,39.00 27.00,39.00 27.00,39.00
|
|
||||||
27.00,39.00 28.00,38.00 28.00,38.00
|
|
||||||
28.00,38.00 28.00,36.00 28.00,36.00
|
|
||||||
28.00,36.00 27.00,35.00 27.00,35.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,22 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Good Ol' Games logo.
|
|
||||||
*/
|
|
||||||
export const Gog: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
34,
|
|
||||||
31,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M31,31H3a3,3,0,0,1-3-3V3A3,3,0,0,1,3,0H31a3,3,0,0,1,3,3V28A3,3,0,0,1,31,31ZM4,24.5A1.5,1.5,0,0,0,5.5,26H11V24H6.5a.5.5,0,0,1-.5-.5v-3a.5.5,0,0,1,.5-.5H11V18H5.5A1.5,1.5,0,0,0,4,19.5Zm8-18A1.5,1.5,0,0,0,10.5,5h-5A1.5,1.5,0,0,0,4,6.5v5A1.5,1.5,0,0,0,5.5,13H9V11H6.5a.5.5,0,0,1-.5-.5v-3A.5.5,0,0,1,6.5,7h3a.5.5,0,0,1,.5.5v6a.5.5,0,0,1-.5.5H4v2h6.5A1.5,1.5,0,0,0,12,14.5Zm0,13v5A1.5,1.5,0,0,0,13.5,26h5A1.5,1.5,0,0,0,20,24.5v-5A1.5,1.5,0,0,0,18.5,18h-5A1.5,1.5,0,0,0,12,19.5Zm9-13A1.5,1.5,0,0,0,19.5,5h-5A1.5,1.5,0,0,0,13,6.5v5A1.5,1.5,0,0,0,14.5,13h5A1.5,1.5,0,0,0,21,11.5Zm9,0A1.5,1.5,0,0,0,28.5,5h-5A1.5,1.5,0,0,0,22,6.5v5A1.5,1.5,0,0,0,23.5,13H27V11H24.5a.5.5,0,0,1-.5-.5v-3a.5.5,0,0,1,.5-.5h3a.5.5,0,0,1,.5.5v6a.5.5,0,0,1-.5.5H22v2h6.5A1.5,1.5,0,0,0,30,14.5ZM30,18H22.5A1.5,1.5,0,0,0,21,19.5V26h2V20.5a.5.5,0,0,1,.5-.5h1v6h2V20H28v6h2ZM18.5,11h-3a.5.5,0,0,1-.5-.5v-3a.5.5,0,0,1,.5-.5h3a.5.5,0,0,1,.5.5v3A.5.5,0,0,1,18.5,11Zm-4,9h3a.5.5,0,0,1,.5.5v3a.5.5,0,0,1-.5.5h-3a.5.5,0,0,1-.5-.5v-3A.5.5,0,0,1,14.5,20Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,212 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Gumroad logo.
|
|
||||||
*/
|
|
||||||
export const Gumroad: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
806,
|
|
||||||
807,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 364.00,13.21
|
|
||||||
C 364.00,13.21 407.00,13.21 407.00,13.21
|
|
||||||
407.00,13.21 430.00,14.84 430.00,14.84
|
|
||||||
470.27,19.14 502.77,27.65 540.00,43.72
|
|
||||||
576.05,59.28 613.12,82.48 642.00,109.08
|
|
||||||
675.08,139.56 703.05,173.90 723.74,214.00
|
|
||||||
738.19,241.99 750.78,274.21 757.58,305.00
|
|
||||||
784.23,425.71 753.19,550.83 669.83,643.00
|
|
||||||
639.15,676.93 601.80,705.56 561.00,726.24
|
|
||||||
516.61,748.75 475.34,760.23 426.00,765.17
|
|
||||||
426.00,765.17 402.00,767.00 402.00,767.00
|
|
||||||
402.00,767.00 376.00,767.00 376.00,767.00
|
|
||||||
376.00,767.00 366.00,766.09 366.00,766.09
|
|
||||||
330.81,763.68 296.20,757.84 263.00,745.42
|
|
||||||
204.49,723.54 155.94,692.99 113.09,647.00
|
|
||||||
65.89,596.34 30.94,528.28 18.61,460.00
|
|
||||||
15.57,443.12 13.03,422.08 13.00,405.00
|
|
||||||
13.00,405.00 12.02,391.00 12.02,391.00
|
|
||||||
12.02,391.00 13.00,367.00 13.00,367.00
|
|
||||||
13.00,367.00 14.84,347.00 14.84,347.00
|
|
||||||
18.92,308.86 29.28,269.90 45.31,235.00
|
|
||||||
88.37,141.20 166.12,67.87 264.00,33.86
|
|
||||||
287.93,25.55 309.94,20.14 335.00,16.43
|
|
||||||
335.00,16.43 364.00,13.21 364.00,13.21 Z
|
|
||||||
M 487.00,15.00
|
|
||||||
C 487.00,15.00 488.00,15.00 488.00,15.00
|
|
||||||
488.00,15.00 487.00,16.00 487.00,16.00
|
|
||||||
487.00,16.00 487.00,15.00 487.00,15.00 Z
|
|
||||||
M 279.00,16.00
|
|
||||||
C 279.00,16.00 280.00,16.00 280.00,16.00
|
|
||||||
280.00,16.00 279.00,17.00 279.00,17.00
|
|
||||||
279.00,17.00 279.00,16.00 279.00,16.00 Z
|
|
||||||
M 515.00,21.00
|
|
||||||
C 515.00,21.00 516.00,21.00 516.00,21.00
|
|
||||||
516.00,21.00 515.00,22.00 515.00,22.00
|
|
||||||
515.00,22.00 515.00,21.00 515.00,21.00 Z
|
|
||||||
M 259.00,25.00
|
|
||||||
C 259.00,25.00 260.00,25.00 260.00,25.00
|
|
||||||
260.00,25.00 259.00,26.00 259.00,26.00
|
|
||||||
259.00,26.00 259.00,25.00 259.00,25.00 Z
|
|
||||||
M 193.00,53.00
|
|
||||||
C 193.00,53.00 194.00,53.00 194.00,53.00
|
|
||||||
194.00,53.00 193.00,54.00 193.00,54.00
|
|
||||||
193.00,54.00 193.00,53.00 193.00,53.00 Z
|
|
||||||
M 642.00,93.00
|
|
||||||
C 642.00,93.00 643.00,93.00 643.00,93.00
|
|
||||||
643.00,93.00 642.00,94.00 642.00,94.00
|
|
||||||
642.00,94.00 642.00,93.00 642.00,93.00 Z
|
|
||||||
M 682.00,133.00
|
|
||||||
C 682.00,133.00 683.00,133.00 683.00,133.00
|
|
||||||
683.00,133.00 682.00,134.00 682.00,134.00
|
|
||||||
682.00,134.00 682.00,133.00 682.00,133.00 Z
|
|
||||||
M 591.00,314.00
|
|
||||||
C 591.00,314.00 589.71,302.00 589.71,302.00
|
|
||||||
588.99,296.11 587.42,289.73 585.85,284.00
|
|
||||||
578.82,258.31 565.04,234.46 546.91,215.00
|
|
||||||
519.65,185.73 479.11,167.16 440.00,160.59
|
|
||||||
430.57,159.00 419.52,157.05 410.00,157.00
|
|
||||||
410.00,157.00 389.00,156.00 389.00,156.00
|
|
||||||
389.00,156.00 374.00,157.00 374.00,157.00
|
|
||||||
328.27,157.53 280.79,174.27 245.00,202.67
|
|
||||||
204.83,234.54 180.07,285.67 173.29,336.00
|
|
||||||
170.87,353.96 170.79,371.90 171.00,390.00
|
|
||||||
171.10,397.99 173.12,413.92 174.58,422.00
|
|
||||||
182.77,467.44 200.62,508.93 235.00,540.91
|
|
||||||
259.89,564.06 294.39,579.29 328.00,583.71
|
|
||||||
341.20,585.45 354.70,585.15 368.00,585.00
|
|
||||||
395.65,584.67 429.52,572.90 451.00,555.54
|
|
||||||
475.68,535.59 490.57,509.76 500.49,480.00
|
|
||||||
500.49,480.00 505.79,460.00 505.79,460.00
|
|
||||||
505.79,460.00 508.00,449.00 508.00,449.00
|
|
||||||
508.00,449.00 508.00,576.00 508.00,576.00
|
|
||||||
508.00,576.00 603.00,576.00 603.00,576.00
|
|
||||||
603.00,576.00 603.00,366.00 603.00,366.00
|
|
||||||
603.00,366.00 387.00,366.00 387.00,366.00
|
|
||||||
387.00,374.75 386.09,401.28 388.00,408.00
|
|
||||||
388.00,408.00 423.00,407.00 423.00,407.00
|
|
||||||
423.00,407.00 490.00,407.00 490.00,407.00
|
|
||||||
481.72,435.57 476.08,457.30 454.58,479.83
|
|
||||||
425.65,510.14 379.12,514.70 342.00,497.69
|
|
||||||
325.65,490.20 311.69,478.08 300.67,464.00
|
|
||||||
282.46,440.74 273.94,411.05 271.91,382.00
|
|
||||||
271.91,382.00 271.00,370.00 271.00,370.00
|
|
||||||
271.00,370.00 274.46,338.00 274.46,338.00
|
|
||||||
282.81,293.71 310.68,253.08 355.00,239.03
|
|
||||||
401.17,224.39 455.83,241.98 476.27,288.00
|
|
||||||
479.83,296.01 482.60,305.22 483.00,314.00
|
|
||||||
483.00,314.00 591.00,314.00 591.00,314.00 Z
|
|
||||||
M 51.00,201.00
|
|
||||||
C 51.00,201.00 52.00,201.00 52.00,201.00
|
|
||||||
52.00,201.00 51.00,202.00 51.00,202.00
|
|
||||||
51.00,202.00 51.00,201.00 51.00,201.00 Z
|
|
||||||
M 42.00,213.00
|
|
||||||
C 42.00,213.00 43.00,213.00 43.00,213.00
|
|
||||||
43.00,213.00 42.00,214.00 42.00,214.00
|
|
||||||
42.00,214.00 42.00,213.00 42.00,213.00 Z
|
|
||||||
M 39.00,219.00
|
|
||||||
C 39.00,219.00 40.00,219.00 40.00,219.00
|
|
||||||
40.00,219.00 39.00,220.00 39.00,220.00
|
|
||||||
39.00,220.00 39.00,219.00 39.00,219.00 Z
|
|
||||||
M 36.00,225.00
|
|
||||||
C 36.00,225.00 37.00,225.00 37.00,225.00
|
|
||||||
37.00,225.00 36.00,226.00 36.00,226.00
|
|
||||||
36.00,226.00 36.00,225.00 36.00,225.00 Z
|
|
||||||
M 756.00,229.00
|
|
||||||
C 756.00,229.00 757.00,229.00 757.00,229.00
|
|
||||||
757.00,229.00 756.00,230.00 756.00,230.00
|
|
||||||
756.00,230.00 756.00,229.00 756.00,229.00 Z
|
|
||||||
M 771.00,259.00
|
|
||||||
C 771.00,259.00 772.00,259.00 772.00,259.00
|
|
||||||
772.00,259.00 771.00,260.00 771.00,260.00
|
|
||||||
771.00,260.00 771.00,259.00 771.00,259.00 Z
|
|
||||||
M 17.00,283.00
|
|
||||||
C 17.00,283.00 18.00,283.00 18.00,283.00
|
|
||||||
18.00,283.00 17.00,284.00 17.00,284.00
|
|
||||||
17.00,284.00 17.00,283.00 17.00,283.00 Z
|
|
||||||
M 783.00,289.00
|
|
||||||
C 783.00,289.00 784.00,289.00 784.00,289.00
|
|
||||||
784.00,289.00 783.00,290.00 783.00,290.00
|
|
||||||
783.00,290.00 783.00,289.00 783.00,289.00 Z
|
|
||||||
M 2.00,346.00
|
|
||||||
C 2.00,346.00 3.00,346.00 3.00,346.00
|
|
||||||
3.00,346.00 2.00,347.00 2.00,347.00
|
|
||||||
2.00,347.00 2.00,346.00 2.00,346.00 Z
|
|
||||||
M 5.00,454.00
|
|
||||||
C 5.00,454.00 6.00,454.00 6.00,454.00
|
|
||||||
6.00,454.00 5.00,455.00 5.00,455.00
|
|
||||||
5.00,455.00 5.00,454.00 5.00,454.00 Z
|
|
||||||
M 24.00,517.00
|
|
||||||
C 24.00,517.00 25.00,517.00 25.00,517.00
|
|
||||||
25.00,517.00 24.00,518.00 24.00,518.00
|
|
||||||
24.00,518.00 24.00,517.00 24.00,517.00 Z
|
|
||||||
M 689.00,539.00
|
|
||||||
C 689.97,545.46 701.63,554.40 707.00,558.00
|
|
||||||
704.77,551.47 694.61,543.33 689.00,539.00 Z
|
|
||||||
M 33.00,547.00
|
|
||||||
C 33.00,547.00 34.00,547.00 34.00,547.00
|
|
||||||
34.00,547.00 33.00,548.00 33.00,548.00
|
|
||||||
33.00,548.00 33.00,547.00 33.00,547.00 Z
|
|
||||||
M 48.00,577.00
|
|
||||||
C 48.00,577.00 49.00,577.00 49.00,577.00
|
|
||||||
49.00,577.00 48.00,578.00 48.00,578.00
|
|
||||||
48.00,578.00 48.00,577.00 48.00,577.00 Z
|
|
||||||
M 749.00,618.00
|
|
||||||
C 749.00,618.00 750.00,618.00 750.00,618.00
|
|
||||||
750.00,618.00 749.00,619.00 749.00,619.00
|
|
||||||
749.00,619.00 749.00,618.00 749.00,618.00 Z
|
|
||||||
M 79.00,625.00
|
|
||||||
C 79.00,625.00 80.00,625.00 80.00,625.00
|
|
||||||
80.00,625.00 79.00,626.00 79.00,626.00
|
|
||||||
79.00,626.00 79.00,625.00 79.00,625.00 Z
|
|
||||||
M 107.00,658.00
|
|
||||||
C 107.00,658.00 108.00,658.00 108.00,658.00
|
|
||||||
108.00,658.00 107.00,659.00 107.00,659.00
|
|
||||||
107.00,659.00 107.00,658.00 107.00,658.00 Z
|
|
||||||
M 721.00,658.00
|
|
||||||
C 721.00,658.00 722.00,658.00 722.00,658.00
|
|
||||||
722.00,658.00 721.00,659.00 721.00,659.00
|
|
||||||
721.00,659.00 721.00,658.00 721.00,658.00 Z
|
|
||||||
M 113.00,664.00
|
|
||||||
C 113.00,664.00 114.00,664.00 114.00,664.00
|
|
||||||
114.00,664.00 113.00,665.00 113.00,665.00
|
|
||||||
113.00,665.00 113.00,664.00 113.00,664.00 Z
|
|
||||||
M 588.00,766.00
|
|
||||||
C 588.00,766.00 589.00,766.00 589.00,766.00
|
|
||||||
589.00,766.00 588.00,767.00 588.00,767.00
|
|
||||||
588.00,767.00 588.00,766.00 588.00,766.00 Z
|
|
||||||
M 562.00,778.00
|
|
||||||
C 562.00,778.00 563.00,778.00 563.00,778.00
|
|
||||||
563.00,778.00 562.00,779.00 562.00,779.00
|
|
||||||
562.00,779.00 562.00,778.00 562.00,778.00 Z
|
|
||||||
M 559.00,779.00
|
|
||||||
C 559.00,779.00 560.00,779.00 560.00,779.00
|
|
||||||
560.00,779.00 559.00,780.00 559.00,780.00
|
|
||||||
559.00,780.00 559.00,779.00 559.00,779.00 Z
|
|
||||||
M 276.00,781.00
|
|
||||||
C 276.00,781.00 277.00,781.00 277.00,781.00
|
|
||||||
277.00,781.00 276.00,782.00 276.00,782.00
|
|
||||||
276.00,782.00 276.00,781.00 276.00,781.00 Z
|
|
||||||
M 543.00,785.00
|
|
||||||
C 543.00,785.00 544.00,785.00 544.00,785.00
|
|
||||||
544.00,785.00 543.00,786.00 543.00,786.00
|
|
||||||
543.00,786.00 543.00,785.00 543.00,785.00 Z
|
|
||||||
M 344.00,800.00
|
|
||||||
C 344.00,800.00 345.00,800.00 345.00,800.00
|
|
||||||
345.00,800.00 344.00,801.00 344.00,801.00
|
|
||||||
344.00,801.00 344.00,800.00 344.00,800.00 Z
|
|
||||||
M 467.00,803.00
|
|
||||||
C 467.00,803.00 468.00,803.00 468.00,803.00
|
|
||||||
468.00,803.00 467.00,804.00 467.00,804.00
|
|
||||||
467.00,804.00 467.00,803.00 467.00,803.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,77 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Ko-Fi logo.
|
|
||||||
*/
|
|
||||||
export const Kofi: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
245,
|
|
||||||
162,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 180.00,126.00
|
|
||||||
C 177.32,145.89 167.90,160.97 146.00,161.00
|
|
||||||
146.00,161.00 123.00,162.00 123.00,162.00
|
|
||||||
123.00,162.00 36.00,162.00 36.00,162.00
|
|
||||||
11.68,161.96 1.04,147.01 1.00,124.00
|
|
||||||
1.00,124.00 1.00,19.00 1.00,19.00
|
|
||||||
1.07,5.88 7.47,1.02 20.00,1.00
|
|
||||||
20.00,1.00 184.00,1.00 184.00,1.00
|
|
||||||
208.36,1.04 232.17,16.98 240.56,40.00
|
|
||||||
244.19,49.95 244.12,58.64 244.00,69.00
|
|
||||||
243.60,102.66 211.64,125.71 180.00,126.00 Z
|
|
||||||
M 18.31,15.60
|
|
||||||
C 15.32,18.12 16.01,20.28 16.00,24.00
|
|
||||||
16.00,24.00 15.00,42.00 15.00,42.00
|
|
||||||
15.00,42.00 15.00,75.00 15.00,75.00
|
|
||||||
15.00,75.00 16.00,92.00 16.00,92.00
|
|
||||||
16.00,92.00 16.00,125.00 16.00,125.00
|
|
||||||
16.02,140.23 21.27,146.98 37.00,147.00
|
|
||||||
37.00,147.00 132.00,147.00 132.00,147.00
|
|
||||||
132.00,147.00 143.00,146.17 143.00,146.17
|
|
||||||
153.16,145.20 158.48,145.34 163.07,134.00
|
|
||||||
167.02,124.25 162.50,117.54 169.13,113.01
|
|
||||||
173.46,110.04 179.93,111.34 185.00,110.83
|
|
||||||
185.00,110.83 194.00,109.10 194.00,109.10
|
|
||||||
215.15,103.72 228.06,87.48 229.68,66.00
|
|
||||||
229.90,63.01 229.34,60.94 229.07,58.00
|
|
||||||
226.37,28.64 203.62,15.04 176.00,15.00
|
|
||||||
176.00,15.00 70.00,15.00 70.00,15.00
|
|
||||||
70.00,15.00 36.00,15.00 36.00,15.00
|
|
||||||
30.94,15.00 22.97,14.47 18.31,15.60 Z
|
|
||||||
M 171.04,29.65
|
|
||||||
C 182.06,27.33 197.48,28.99 205.83,37.18
|
|
||||||
223.51,54.55 219.29,88.40 194.00,95.96
|
|
||||||
187.88,97.79 172.05,100.22 167.56,94.77
|
|
||||||
164.83,91.47 165.01,86.06 165.00,82.00
|
|
||||||
165.00,82.00 165.00,60.00 165.00,60.00
|
|
||||||
165.00,53.97 164.02,36.80 167.14,32.39
|
|
||||||
168.39,30.61 169.24,30.50 171.04,29.65 Z
|
|
||||||
M 111.00,41.44
|
|
||||||
C 125.13,39.94 137.62,49.59 138.81,64.00
|
|
||||||
140.27,81.55 119.30,98.75 108.00,110.00
|
|
||||||
105.33,112.66 95.11,122.59 92.00,123.26
|
|
||||||
89.18,123.85 87.00,121.74 85.00,120.11
|
|
||||||
79.95,115.98 76.58,112.53 72.00,108.00
|
|
||||||
72.00,108.00 58.00,94.00 58.00,94.00
|
|
||||||
48.82,84.73 43.00,78.85 43.01,65.00
|
|
||||||
43.01,60.36 43.76,56.05 46.22,52.01
|
|
||||||
52.64,41.47 69.42,39.75 80.00,44.09
|
|
||||||
85.80,46.47 88.14,49.98 91.00,49.98
|
|
||||||
93.15,49.99 97.00,46.83 99.00,45.63
|
|
||||||
103.65,42.84 105.80,42.41 111.00,41.44 Z
|
|
||||||
M 180.00,83.00
|
|
||||||
C 186.51,82.86 192.10,81.90 196.79,76.90
|
|
||||||
204.64,68.51 202.92,52.32 192.96,46.23
|
|
||||||
188.79,43.68 184.66,44.00 180.00,44.00
|
|
||||||
180.00,44.00 180.00,83.00 180.00,83.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,70 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Matrix.org logo.
|
|
||||||
*/
|
|
||||||
export const Matrix: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
342,
|
|
||||||
342,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 138.00,0.53
|
|
||||||
C 150.87,-1.59 166.46,0.98 179.00,4.13
|
|
||||||
230.88,17.15 270.41,61.51 279.08,114.00
|
|
||||||
279.08,114.00 281.00,131.00 281.00,131.00
|
|
||||||
281.08,137.92 281.47,143.03 277.20,148.99
|
|
||||||
268.97,160.46 252.22,161.04 243.39,149.98
|
|
||||||
237.90,143.12 239.56,138.59 238.83,131.00
|
|
||||||
238.25,124.97 237.10,118.87 235.63,113.00
|
|
||||||
230.45,92.32 217.03,73.13 200.00,60.48
|
|
||||||
188.68,52.07 173.95,45.62 160.00,43.28
|
|
||||||
149.18,41.47 136.43,43.78 128.21,34.91
|
|
||||||
117.46,23.31 123.25,5.13 138.00,0.53 Z
|
|
||||||
M 126.00,61.42
|
|
||||||
C 132.79,60.60 140.80,60.41 147.00,63.67
|
|
||||||
157.30,69.10 161.07,83.05 155.00,93.00
|
|
||||||
148.91,102.97 142.67,102.25 133.00,103.17
|
|
||||||
133.00,103.17 121.00,104.75 121.00,104.75
|
|
||||||
106.64,107.11 91.56,113.68 80.00,122.50
|
|
||||||
61.64,136.52 50.33,153.71 44.63,176.00
|
|
||||||
43.46,180.57 42.62,185.30 42.17,190.00
|
|
||||||
41.42,197.85 43.18,203.96 37.61,210.99
|
|
||||||
28.88,221.99 10.70,222.28 2.99,210.00
|
|
||||||
-0.87,203.84 -0.08,195.99 0.00,189.00
|
|
||||||
0.10,181.05 1.94,171.72 3.87,164.00
|
|
||||||
14.25,122.51 43.23,89.80 82.00,72.31
|
|
||||||
97.65,65.25 109.47,63.78 126.00,61.42 Z
|
|
||||||
M 315.00,123.64
|
|
||||||
C 330.97,120.43 341.97,128.41 342.00,145.00
|
|
||||||
342.03,164.57 338.91,182.06 330.69,200.00
|
|
||||||
308.91,247.57 260.01,281.64 207.00,281.00
|
|
||||||
183.02,280.71 177.62,255.16 192.04,243.39
|
|
||||||
198.72,237.94 203.50,239.55 211.00,238.83
|
|
||||||
217.03,238.25 223.12,237.09 229.00,235.63
|
|
||||||
249.81,230.42 269.96,216.52 282.28,199.00
|
|
||||||
290.55,187.24 296.09,175.19 298.74,161.00
|
|
||||||
301.56,145.87 296.54,130.60 315.00,123.64 Z
|
|
||||||
M 78.00,184.53
|
|
||||||
C 87.56,183.00 96.80,186.96 101.08,196.00
|
|
||||||
101.08,196.00 105.45,225.00 105.45,225.00
|
|
||||||
108.31,239.01 115.29,252.68 123.90,264.00
|
|
||||||
136.86,281.04 157.21,293.39 178.00,298.11
|
|
||||||
188.70,300.54 202.89,298.40 210.98,304.56
|
|
||||||
222.59,313.38 221.84,332.30 209.00,339.64
|
|
||||||
203.20,342.95 194.60,342.07 188.00,342.00
|
|
||||||
180.39,341.91 168.41,339.51 161.00,337.42
|
|
||||||
119.62,325.74 86.75,295.86 70.60,256.00
|
|
||||||
70.60,256.00 66.29,243.00 66.29,243.00
|
|
||||||
63.87,234.58 62.76,227.67 61.84,219.00
|
|
||||||
60.14,203.20 59.71,189.94 78.00,184.53 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,136 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Peerlist logo.
|
|
||||||
*/
|
|
||||||
export const Peerlist: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
512,
|
|
||||||
512,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 214.00,0.14
|
|
||||||
C 214.00,0.14 243.00,0.14 243.00,0.14
|
|
||||||
243.00,0.14 291.00,0.14 291.00,0.14
|
|
||||||
291.00,0.14 301.00,1.00 301.00,1.00
|
|
||||||
301.00,1.00 311.00,1.00 311.00,1.00
|
|
||||||
311.00,1.00 328.00,2.83 328.00,2.83
|
|
||||||
375.51,7.58 421.85,17.89 457.91,51.42
|
|
||||||
483.50,75.23 497.13,112.43 503.80,146.00
|
|
||||||
507.93,166.77 510.12,187.89 511.04,209.00
|
|
||||||
511.04,209.00 512.00,220.00 512.00,220.00
|
|
||||||
512.59,270.71 513.41,322.24 502.42,372.00
|
|
||||||
495.29,404.31 483.17,434.75 459.72,458.83
|
|
||||||
437.47,481.67 407.37,493.82 377.00,501.37
|
|
||||||
326.73,513.88 274.38,512.08 223.00,512.00
|
|
||||||
223.00,512.00 208.00,511.00 208.00,511.00
|
|
||||||
208.00,511.00 204.00,511.00 204.00,511.00
|
|
||||||
204.00,511.00 166.00,507.13 166.00,507.13
|
|
||||||
125.75,501.54 81.42,488.74 52.28,458.83
|
|
||||||
18.32,423.96 7.84,375.75 2.84,329.00
|
|
||||||
2.84,329.00 0.91,302.00 0.91,302.00
|
|
||||||
0.91,302.00 0.00,290.00 0.00,290.00
|
|
||||||
0.00,290.00 0.00,253.00 0.00,253.00
|
|
||||||
0.00,253.00 0.00,223.00 0.00,223.00
|
|
||||||
0.00,223.00 1.00,205.00 1.00,205.00
|
|
||||||
1.00,205.00 6.59,155.00 6.59,155.00
|
|
||||||
11.95,123.04 22.32,89.63 42.81,64.00
|
|
||||||
74.31,24.60 121.91,10.61 170.00,4.28
|
|
||||||
170.00,4.28 201.00,1.09 201.00,1.09
|
|
||||||
201.00,1.09 214.00,0.14 214.00,0.14 Z
|
|
||||||
M 234.00,18.14
|
|
||||||
C 227.52,19.22 223.42,18.99 217.00,19.00
|
|
||||||
217.00,19.00 205.00,20.04 205.00,20.04
|
|
||||||
205.00,20.04 197.00,20.04 197.00,20.04
|
|
||||||
149.57,24.69 92.98,33.42 60.44,72.00
|
|
||||||
34.70,102.51 25.98,143.28 21.84,182.00
|
|
||||||
21.84,182.00 19.00,224.00 19.00,224.00
|
|
||||||
19.00,224.00 18.00,241.00 18.00,241.00
|
|
||||||
18.00,241.00 18.00,273.00 18.00,273.00
|
|
||||||
18.00,273.00 18.96,283.00 18.96,283.00
|
|
||||||
18.96,283.00 18.96,297.00 18.96,297.00
|
|
||||||
18.96,297.00 19.91,307.00 19.91,307.00
|
|
||||||
19.91,307.00 24.92,353.00 24.92,353.00
|
|
||||||
30.18,384.75 40.74,418.98 63.09,443.00
|
|
||||||
93.04,475.19 139.93,485.66 182.00,490.16
|
|
||||||
182.00,490.16 205.00,492.09 205.00,492.09
|
|
||||||
205.00,492.09 215.00,493.04 215.00,493.04
|
|
||||||
215.00,493.04 229.00,493.04 229.00,493.04
|
|
||||||
229.00,493.04 241.00,494.00 241.00,494.00
|
|
||||||
241.00,494.00 271.00,494.00 271.00,494.00
|
|
||||||
271.00,494.00 283.00,493.04 283.00,493.04
|
|
||||||
283.00,493.04 295.00,493.04 295.00,493.04
|
|
||||||
295.00,493.04 307.00,492.09 307.00,492.09
|
|
||||||
327.86,490.66 348.55,488.59 369.00,483.88
|
|
||||||
398.65,477.06 426.42,466.49 447.96,444.00
|
|
||||||
469.93,421.06 480.00,389.49 486.00,359.00
|
|
||||||
490.02,338.59 492.97,308.77 493.00,288.00
|
|
||||||
493.00,288.00 494.00,271.00 494.00,271.00
|
|
||||||
494.00,271.00 494.00,241.00 494.00,241.00
|
|
||||||
494.00,241.00 493.04,229.00 493.04,229.00
|
|
||||||
493.04,229.00 493.04,217.00 493.04,217.00
|
|
||||||
493.04,217.00 492.09,205.00 492.09,205.00
|
|
||||||
490.82,186.52 489.06,168.22 485.40,150.00
|
|
||||||
478.89,117.63 467.20,84.85 442.00,62.17
|
|
||||||
412.18,35.33 368.80,25.99 330.00,21.84
|
|
||||||
330.00,21.84 307.00,19.91 307.00,19.91
|
|
||||||
307.00,19.91 295.00,18.96 295.00,18.96
|
|
||||||
295.00,18.96 283.00,18.96 283.00,18.96
|
|
||||||
283.00,18.96 271.00,18.14 271.00,18.14
|
|
||||||
271.00,18.14 234.00,18.14 234.00,18.14 Z
|
|
||||||
M 156.00,101.00
|
|
||||||
C 156.00,101.00 231.00,101.00 231.00,101.00
|
|
||||||
231.00,101.00 270.00,101.00 270.00,101.00
|
|
||||||
304.65,101.05 338.60,117.93 361.91,143.00
|
|
||||||
370.38,152.10 378.11,164.62 383.14,176.00
|
|
||||||
398.86,211.57 395.05,254.17 374.58,287.00
|
|
||||||
365.39,301.73 358.75,306.40 347.28,318.17
|
|
||||||
331.52,334.35 322.21,343.76 301.00,353.14
|
|
||||||
279.20,362.77 264.27,364.00 241.00,364.00
|
|
||||||
241.00,364.00 241.00,411.00 241.00,411.00
|
|
||||||
241.00,411.00 223.00,411.00 223.00,411.00
|
|
||||||
223.00,411.00 223.00,429.00 223.00,429.00
|
|
||||||
223.00,429.00 138.00,429.00 138.00,429.00
|
|
||||||
138.00,429.00 138.00,119.00 138.00,119.00
|
|
||||||
138.00,119.00 156.00,119.00 156.00,119.00
|
|
||||||
156.00,119.00 156.00,101.00 156.00,101.00 Z
|
|
||||||
M 223.00,329.00
|
|
||||||
C 263.91,329.00 301.86,332.36 336.00,304.54
|
|
||||||
349.16,293.81 359.70,280.51 366.69,265.00
|
|
||||||
374.05,248.67 375.20,234.53 375.00,217.00
|
|
||||||
374.56,179.46 346.33,143.35 313.00,128.31
|
|
||||||
291.09,118.42 270.44,118.00 247.00,118.00
|
|
||||||
247.00,118.00 207.00,118.00 207.00,118.00
|
|
||||||
207.00,118.00 182.00,118.00 182.00,118.00
|
|
||||||
180.01,118.00 176.19,117.77 174.60,119.02
|
|
||||||
172.62,120.59 173.00,124.70 173.00,127.00
|
|
||||||
173.00,127.00 173.00,332.00 173.00,332.00
|
|
||||||
173.00,332.00 173.00,385.00 173.00,385.00
|
|
||||||
173.02,393.64 173.36,393.98 182.00,394.00
|
|
||||||
182.00,394.00 223.00,394.00 223.00,394.00
|
|
||||||
223.00,394.00 223.00,329.00 223.00,329.00 Z
|
|
||||||
M 223.00,166.00
|
|
||||||
C 223.00,166.00 266.00,166.00 266.00,166.00
|
|
||||||
306.49,166.06 336.49,205.40 321.39,244.00
|
|
||||||
319.11,249.82 315.95,255.30 311.82,260.00
|
|
||||||
300.28,273.13 284.59,280.92 267.00,281.00
|
|
||||||
267.00,281.00 253.00,281.00 253.00,281.00
|
|
||||||
253.00,281.00 223.00,281.00 223.00,281.00
|
|
||||||
223.00,281.00 223.00,166.00 223.00,166.00 Z
|
|
||||||
M 241.00,202.00
|
|
||||||
C 241.00,202.00 241.00,255.00 241.00,255.00
|
|
||||||
241.02,263.64 241.36,263.98 250.00,264.00
|
|
||||||
258.53,264.02 277.96,264.47 284.58,259.01
|
|
||||||
289.25,255.16 289.06,244.57 289.00,239.00
|
|
||||||
288.79,221.67 275.23,207.53 259.00,203.16
|
|
||||||
253.08,201.56 247.07,202.00 241.00,202.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,104 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Pixiv logo.
|
|
||||||
*/
|
|
||||||
export const Pixiv: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
900,
|
|
||||||
900,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 163.00,0.11
|
|
||||||
C 163.00,0.11 227.00,0.11 227.00,0.11
|
|
||||||
227.00,0.11 352.00,0.11 352.00,0.11
|
|
||||||
352.00,0.11 729.00,0.11 729.00,0.11
|
|
||||||
746.13,0.03 770.08,6.03 786.00,12.40
|
|
||||||
841.04,34.42 882.48,82.12 895.65,140.00
|
|
||||||
897.84,149.64 899.98,161.14 900.00,171.00
|
|
||||||
900.00,171.00 900.00,729.00 900.00,729.00
|
|
||||||
899.98,740.77 897.22,753.60 894.37,765.00
|
|
||||||
878.79,827.30 827.30,878.79 765.00,894.37
|
|
||||||
753.60,897.22 740.77,899.98 729.00,900.00
|
|
||||||
729.00,900.00 171.00,900.00 171.00,900.00
|
|
||||||
153.87,899.97 129.92,893.97 114.00,887.60
|
|
||||||
59.04,865.61 17.50,817.79 4.35,760.00
|
|
||||||
2.16,750.36 0.02,738.86 0.00,729.00
|
|
||||||
0.00,729.00 0.00,171.00 0.00,171.00
|
|
||||||
0.02,161.14 2.16,149.64 4.35,140.00
|
|
||||||
17.02,84.31 55.24,39.01 107.00,15.31
|
|
||||||
126.46,6.40 142.16,3.45 163.00,0.11 Z
|
|
||||||
M 311.00,616.00
|
|
||||||
C 373.56,636.85 424.71,647.77 491.00,647.00
|
|
||||||
491.00,647.00 501.00,646.09 501.00,646.09
|
|
||||||
561.64,641.94 619.68,625.46 669.00,588.63
|
|
||||||
686.93,575.24 698.59,564.39 712.74,547.00
|
|
||||||
728.39,527.76 738.75,508.08 747.42,485.00
|
|
||||||
752.85,470.57 758.82,444.32 759.00,429.00
|
|
||||||
759.00,429.00 759.82,414.00 759.82,414.00
|
|
||||||
759.82,414.00 759.00,404.00 759.00,404.00
|
|
||||||
758.67,375.23 751.71,346.17 739.77,320.00
|
|
||||||
730.28,299.20 719.08,281.37 704.13,264.00
|
|
||||||
659.77,212.46 592.74,182.82 526.00,174.85
|
|
||||||
526.00,174.85 504.00,172.91 504.00,172.91
|
|
||||||
504.00,172.91 494.00,172.00 494.00,172.00
|
|
||||||
494.00,172.00 462.00,172.00 462.00,172.00
|
|
||||||
462.00,172.00 450.00,172.91 450.00,172.91
|
|
||||||
412.36,175.49 375.85,182.56 340.00,194.51
|
|
||||||
317.45,202.03 295.26,211.12 274.00,221.75
|
|
||||||
231.59,242.96 192.08,269.69 156.00,300.43
|
|
||||||
156.00,300.43 130.00,324.01 130.00,324.01
|
|
||||||
127.74,326.25 122.03,331.98 121.40,335.00
|
|
||||||
120.64,338.62 127.54,347.74 129.66,351.00
|
|
||||||
129.66,351.00 151.19,385.00 151.19,385.00
|
|
||||||
153.01,387.93 158.61,397.57 161.21,398.94
|
|
||||||
166.85,401.91 176.80,394.78 175.82,381.00
|
|
||||||
175.82,381.00 173.22,363.58 173.22,363.58
|
|
||||||
174.13,359.05 184.45,345.15 187.65,341.00
|
|
||||||
200.18,324.75 224.03,301.37 241.00,290.00
|
|
||||||
241.00,290.00 241.00,639.00 241.00,639.00
|
|
||||||
241.00,639.00 241.00,707.00 241.00,707.00
|
|
||||||
240.99,709.72 241.32,713.33 239.40,715.49
|
|
||||||
237.70,717.41 233.44,718.49 231.00,719.34
|
|
||||||
223.81,721.87 210.84,727.47 212.43,737.00
|
|
||||||
213.73,744.73 218.25,745.99 225.00,746.00
|
|
||||||
225.00,746.00 327.00,746.00 327.00,746.00
|
|
||||||
329.00,746.00 332.13,746.11 333.96,745.40
|
|
||||||
339.03,743.42 340.93,736.79 338.99,732.00
|
|
||||||
336.42,725.65 327.11,721.40 321.00,719.06
|
|
||||||
318.33,718.04 313.62,716.99 312.02,714.58
|
|
||||||
310.78,712.71 311.00,709.21 311.00,707.00
|
|
||||||
311.00,707.00 311.00,616.00 311.00,616.00 Z
|
|
||||||
M 450.00,209.21
|
|
||||||
C 450.00,209.21 484.00,209.21 484.00,209.21
|
|
||||||
484.00,209.21 510.00,211.92 510.00,211.92
|
|
||||||
552.94,219.03 591.07,237.96 620.91,270.00
|
|
||||||
649.77,300.99 665.37,339.51 671.13,381.00
|
|
||||||
672.06,387.70 672.99,395.27 673.00,402.00
|
|
||||||
673.00,402.00 673.00,424.00 673.00,424.00
|
|
||||||
672.82,438.76 668.47,460.87 663.97,475.00
|
|
||||||
656.91,497.22 644.57,519.21 629.56,537.00
|
|
||||||
600.09,571.93 557.72,594.50 513.00,602.58
|
|
||||||
491.49,606.46 470.75,606.25 449.00,606.00
|
|
||||||
449.00,606.00 439.00,605.09 439.00,605.09
|
|
||||||
405.01,602.76 374.70,598.15 342.00,587.98
|
|
||||||
342.00,587.98 321.00,580.00 321.00,580.00
|
|
||||||
318.39,578.88 313.56,577.02 312.02,574.61
|
|
||||||
310.78,572.66 311.00,569.27 311.00,567.00
|
|
||||||
311.00,567.00 311.00,263.00 311.00,263.00
|
|
||||||
311.00,260.56 310.79,257.34 312.02,255.18
|
|
||||||
313.46,252.66 317.52,250.33 320.00,248.81
|
|
||||||
320.00,248.81 342.00,237.22 342.00,237.22
|
|
||||||
367.65,225.16 397.00,216.77 425.00,212.42
|
|
||||||
425.00,212.42 450.00,209.21 450.00,209.21 Z
|
|
||||||
`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,85 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Polywork logo.
|
|
||||||
*/
|
|
||||||
export const Polywork: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
225,
|
|
||||||
225,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 153.00,155.00
|
|
||||||
C 153.00,177.49 155.16,201.18 134.00,215.78
|
|
||||||
117.90,226.88 101.50,224.00 83.00,224.00
|
|
||||||
83.00,224.00 57.00,224.00 57.00,224.00
|
|
||||||
36.75,224.00 21.13,223.75 8.22,205.00
|
|
||||||
5.78,201.46 3.67,197.12 2.44,193.00
|
|
||||||
0.64,186.98 0.01,182.25 0.00,176.00
|
|
||||||
0.00,176.00 0.00,49.00 0.00,49.00
|
|
||||||
0.05,19.44 19.43,0.05 49.00,0.00
|
|
||||||
49.00,0.00 176.00,0.00 176.00,0.00
|
|
||||||
203.99,0.04 223.96,18.67 224.00,47.00
|
|
||||||
224.00,47.00 224.00,89.00 224.00,89.00
|
|
||||||
224.00,112.86 226.74,132.44 204.00,147.95
|
|
||||||
200.27,150.49 196.33,152.29 192.00,153.56
|
|
||||||
182.70,156.30 170.69,156.05 161.00,156.00
|
|
||||||
157.55,155.98 156.36,155.95 153.00,155.00 Z
|
|
||||||
M 70.00,11.00
|
|
||||||
C 52.54,11.00 34.21,8.10 21.09,22.01
|
|
||||||
17.77,25.54 15.22,29.35 13.77,34.00
|
|
||||||
11.01,42.87 12.00,61.03 12.00,71.00
|
|
||||||
12.00,71.00 70.00,71.00 70.00,71.00
|
|
||||||
70.00,71.00 70.00,11.00 70.00,11.00 Z
|
|
||||||
M 141.00,71.00
|
|
||||||
C 141.00,71.00 141.00,19.00 141.00,19.00
|
|
||||||
140.94,10.87 139.73,11.02 132.00,11.00
|
|
||||||
132.00,11.00 82.94,11.00 82.94,11.00
|
|
||||||
82.94,11.00 82.94,65.00 82.94,65.00
|
|
||||||
82.65,71.56 84.51,70.99 91.00,71.00
|
|
||||||
91.00,71.00 141.00,71.00 141.00,71.00 Z
|
|
||||||
M 212.00,71.00
|
|
||||||
C 212.00,71.00 212.00,46.00 212.00,46.00
|
|
||||||
211.99,40.91 212.06,38.94 210.30,34.00
|
|
||||||
200.99,7.84 175.95,12.00 154.00,12.00
|
|
||||||
154.00,12.00 154.00,71.00 154.00,71.00
|
|
||||||
154.00,71.00 212.00,71.00 212.00,71.00 Z
|
|
||||||
M 70.00,84.00
|
|
||||||
C 70.00,84.00 11.00,84.00 11.00,84.00
|
|
||||||
11.00,84.00 11.00,136.00 11.00,136.00
|
|
||||||
11.02,144.64 11.36,144.98 20.00,145.00
|
|
||||||
20.00,145.00 70.00,145.00 70.00,145.00
|
|
||||||
70.00,145.00 70.00,84.00 70.00,84.00 Z
|
|
||||||
M 141.00,84.00
|
|
||||||
C 141.00,84.00 83.00,84.00 83.00,84.00
|
|
||||||
83.00,84.00 83.00,144.00 83.00,144.00
|
|
||||||
83.00,144.00 141.00,144.00 141.00,144.00
|
|
||||||
141.00,144.00 141.00,84.00 141.00,84.00 Z
|
|
||||||
M 212.00,84.00
|
|
||||||
C 212.00,84.00 154.00,84.00 154.00,84.00
|
|
||||||
154.00,84.00 154.00,145.00 154.00,145.00
|
|
||||||
176.30,145.00 201.22,148.17 210.45,122.00
|
|
||||||
212.02,117.55 211.99,114.59 212.00,110.00
|
|
||||||
212.00,110.00 212.00,84.00 212.00,84.00 Z
|
|
||||||
M 70.00,157.00
|
|
||||||
C 70.00,157.00 11.00,157.00 11.00,157.00
|
|
||||||
11.00,177.94 8.44,201.56 33.00,210.30
|
|
||||||
37.94,212.06 39.91,211.99 45.00,212.00
|
|
||||||
45.00,212.00 70.00,212.00 70.00,212.00
|
|
||||||
70.00,212.00 70.00,157.00 70.00,157.00 Z
|
|
||||||
M 141.00,158.00
|
|
||||||
C 141.00,158.00 83.00,158.00 83.00,158.00
|
|
||||||
83.00,158.00 83.00,213.00 83.00,213.00
|
|
||||||
83.00,213.00 106.00,213.00 106.00,213.00
|
|
||||||
110.59,212.99 113.55,213.02 118.00,211.45
|
|
||||||
143.85,202.34 141.00,180.01 141.00,158.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,116 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* RetroAchievements logo.
|
|
||||||
*/
|
|
||||||
export const RetroAchievements: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
500,
|
|
||||||
275,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 0.00,0.00
|
|
||||||
C 0.00,0.00 73.00,0.00 73.00,0.00
|
|
||||||
73.00,0.00 116.00,0.00 116.00,0.00
|
|
||||||
150.90,0.05 184.08,28.35 194.12,61.00
|
|
||||||
197.20,71.03 199.09,81.49 199.00,92.00
|
|
||||||
198.86,108.25 194.88,127.04 186.39,141.00
|
|
||||||
183.49,145.75 178.82,151.91 174.92,155.83
|
|
||||||
172.79,157.98 170.04,159.58 170.72,163.01
|
|
||||||
170.72,163.01 175.25,172.00 175.25,172.00
|
|
||||||
175.25,172.00 187.58,194.00 187.58,194.00
|
|
||||||
187.58,194.00 215.86,245.00 215.86,245.00
|
|
||||||
215.86,245.00 232.00,275.00 232.00,275.00
|
|
||||||
232.00,275.00 200.00,275.00 200.00,275.00
|
|
||||||
200.00,275.00 192.61,274.01 192.61,274.01
|
|
||||||
192.61,274.01 186.43,265.00 186.43,265.00
|
|
||||||
186.43,265.00 175.00,245.00 175.00,245.00
|
|
||||||
175.00,245.00 139.40,183.00 139.40,183.00
|
|
||||||
139.40,183.00 117.00,143.00 117.00,143.00
|
|
||||||
160.97,139.31 175.67,72.18 138.00,47.10
|
|
||||||
122.50,36.79 106.57,39.00 89.00,39.00
|
|
||||||
89.00,39.00 0.00,39.00 0.00,39.00
|
|
||||||
0.00,39.00 0.00,0.00 0.00,0.00 Z
|
|
||||||
M 238.00,275.00
|
|
||||||
C 238.00,275.00 253.58,229.00 253.58,229.00
|
|
||||||
253.58,229.00 278.31,159.00 278.31,159.00
|
|
||||||
278.31,159.00 308.66,73.00 308.66,73.00
|
|
||||||
308.66,73.00 326.32,24.00 326.32,24.00
|
|
||||||
332.59,12.07 343.55,2.89 357.00,0.23
|
|
||||||
357.00,0.23 375.00,0.23 375.00,0.23
|
|
||||||
381.82,0.08 386.99,1.57 393.00,4.79
|
|
||||||
412.88,15.46 416.50,37.70 423.81,57.00
|
|
||||||
423.81,57.00 446.69,122.00 446.69,122.00
|
|
||||||
446.69,122.00 474.69,201.00 474.69,201.00
|
|
||||||
474.69,201.00 492.34,251.00 492.34,251.00
|
|
||||||
494.69,257.75 499.30,268.27 500.00,275.00
|
|
||||||
500.00,275.00 336.00,275.00 336.00,275.00
|
|
||||||
336.00,275.00 336.00,241.00 336.00,241.00
|
|
||||||
336.00,241.00 452.00,241.00 452.00,241.00
|
|
||||||
452.00,241.00 435.95,197.00 435.95,197.00
|
|
||||||
435.95,197.00 397.42,90.00 397.42,90.00
|
|
||||||
397.42,90.00 384.42,54.00 384.42,54.00
|
|
||||||
381.75,46.85 381.24,41.88 373.00,39.11
|
|
||||||
367.19,37.16 360.56,39.79 357.53,45.09
|
|
||||||
357.53,45.09 351.95,60.00 351.95,60.00
|
|
||||||
351.95,60.00 341.33,90.00 341.33,90.00
|
|
||||||
341.33,90.00 299.31,210.00 299.31,210.00
|
|
||||||
299.31,210.00 285.95,248.00 285.95,248.00
|
|
||||||
285.95,248.00 277.00,275.00 277.00,275.00
|
|
||||||
277.00,275.00 238.00,275.00 238.00,275.00 Z
|
|
||||||
M 0.00,47.00
|
|
||||||
C 0.00,47.00 110.00,47.00 110.00,47.00
|
|
||||||
123.38,47.16 136.40,52.85 144.20,64.00
|
|
||||||
155.04,79.48 152.55,106.67 140.67,121.00
|
|
||||||
129.04,135.04 117.41,135.00 101.00,135.00
|
|
||||||
101.00,135.00 130.42,186.00 130.42,186.00
|
|
||||||
130.42,186.00 181.00,275.00 181.00,275.00
|
|
||||||
181.00,275.00 147.00,275.00 147.00,275.00
|
|
||||||
147.00,275.00 139.33,273.98 139.33,273.98
|
|
||||||
139.33,273.98 126.15,253.00 126.15,253.00
|
|
||||||
126.15,253.00 85.00,182.00 85.00,182.00
|
|
||||||
85.00,182.00 85.00,275.00 85.00,275.00
|
|
||||||
85.00,275.00 47.00,275.00 47.00,275.00
|
|
||||||
47.00,275.00 47.00,95.00 47.00,95.00
|
|
||||||
47.00,95.00 102.00,95.00 102.00,95.00
|
|
||||||
105.16,94.98 112.73,94.56 110.60,89.22
|
|
||||||
109.14,85.55 103.19,86.01 100.00,86.00
|
|
||||||
100.00,86.00 38.00,86.00 38.00,86.00
|
|
||||||
38.00,86.00 38.00,275.00 38.00,275.00
|
|
||||||
38.00,275.00 0.00,275.00 0.00,275.00
|
|
||||||
0.00,275.00 0.00,47.00 0.00,47.00 Z
|
|
||||||
M 285.00,275.00
|
|
||||||
C 285.00,275.00 302.00,224.00 302.00,224.00
|
|
||||||
302.00,224.00 344.00,102.00 344.00,102.00
|
|
||||||
344.00,102.00 358.14,61.00 358.14,61.00
|
|
||||||
359.89,56.05 361.21,48.97 367.02,47.43
|
|
||||||
373.36,45.76 376.14,49.86 378.19,55.00
|
|
||||||
378.19,55.00 390.00,88.00 390.00,88.00
|
|
||||||
390.00,88.00 423.05,182.00 423.05,182.00
|
|
||||||
423.05,182.00 434.34,214.00 434.34,214.00
|
|
||||||
436.60,220.49 439.37,226.04 440.00,233.00
|
|
||||||
440.00,233.00 336.00,233.00 336.00,233.00
|
|
||||||
336.00,233.00 335.00,229.00 335.00,229.00
|
|
||||||
335.00,229.00 325.00,261.00 325.00,261.00
|
|
||||||
325.00,261.00 320.16,273.40 320.16,273.40
|
|
||||||
320.16,273.40 313.00,275.00 313.00,275.00
|
|
||||||
313.00,275.00 285.00,275.00 285.00,275.00 Z
|
|
||||||
M 370.00,131.00
|
|
||||||
C 370.00,131.00 361.28,155.00 361.28,155.00
|
|
||||||
361.28,155.00 348.00,198.00 348.00,198.00
|
|
||||||
348.00,198.00 391.00,198.00 391.00,198.00
|
|
||||||
391.00,198.00 370.00,131.00 370.00,131.00 Z
|
|
||||||
M 337.00,227.00
|
|
||||||
C 337.00,227.00 336.00,227.00 336.00,227.00
|
|
||||||
336.00,227.00 337.00,228.00 337.00,228.00
|
|
||||||
337.00,228.00 337.00,227.00 337.00,227.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,70 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Saylor Academy logo.
|
|
||||||
*/
|
|
||||||
export const Saylor: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
171,
|
|
||||||
134,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 0.00,0.00
|
|
||||||
C 0.00,0.00 24.00,0.00 24.00,0.00
|
|
||||||
42.06,0.03 57.59,5.04 74.00,12.00
|
|
||||||
72.31,15.58 65.88,24.25 61.99,25.22
|
|
||||||
59.37,25.87 51.31,22.48 48.00,21.63
|
|
||||||
37.00,18.80 31.31,18.00 20.00,18.00
|
|
||||||
20.00,18.00 26.08,55.00 26.08,55.00
|
|
||||||
26.08,55.00 33.00,100.00 33.00,100.00
|
|
||||||
45.96,100.01 59.12,102.79 71.00,108.00
|
|
||||||
69.19,112.61 63.94,119.86 59.00,121.31
|
|
||||||
56.37,122.09 46.55,119.33 43.00,118.75
|
|
||||||
35.41,117.51 25.85,118.00 18.00,118.00
|
|
||||||
18.00,118.00 13.08,88.00 13.08,88.00
|
|
||||||
13.08,88.00 4.58,34.00 4.58,34.00
|
|
||||||
4.58,34.00 0.00,0.00 0.00,0.00 Z
|
|
||||||
M 67.00,126.00
|
|
||||||
C 70.80,117.82 83.00,108.14 81.81,94.00
|
|
||||||
80.97,83.99 74.07,77.87 69.09,70.00
|
|
||||||
65.00,63.53 62.41,53.66 63.17,46.00
|
|
||||||
64.82,29.19 75.60,19.06 90.00,11.76
|
|
||||||
114.41,-0.63 136.60,0.00 163.00,0.00
|
|
||||||
163.00,0.00 153.87,61.00 153.87,61.00
|
|
||||||
153.87,61.00 152.00,75.00 152.00,75.00
|
|
||||||
148.70,74.04 137.56,71.72 135.77,69.44
|
|
||||||
133.80,66.95 136.08,58.21 136.58,55.00
|
|
||||||
136.58,55.00 142.00,18.00 142.00,18.00
|
|
||||||
126.51,18.01 107.23,22.25 94.00,30.47
|
|
||||||
86.94,34.85 80.49,41.13 81.10,50.00
|
|
||||||
81.78,60.00 90.38,66.51 94.63,75.00
|
|
||||||
99.92,85.58 99.00,93.72 99.00,105.00
|
|
||||||
99.00,105.00 119.00,101.00 119.00,101.00
|
|
||||||
119.00,101.00 121.89,117.41 121.89,117.41
|
|
||||||
121.89,117.41 106.00,122.33 106.00,122.33
|
|
||||||
106.00,122.33 91.00,129.01 91.00,129.01
|
|
||||||
91.00,129.01 81.00,133.39 81.00,133.39
|
|
||||||
81.00,133.39 67.00,126.00 67.00,126.00 Z
|
|
||||||
M 118.00,72.00
|
|
||||||
C 118.00,72.00 150.00,80.86 150.00,80.86
|
|
||||||
150.00,80.86 168.00,87.00 168.00,87.00
|
|
||||||
168.00,87.00 154.00,95.00 154.00,95.00
|
|
||||||
156.53,98.54 166.08,107.66 166.66,110.00
|
|
||||||
167.68,114.07 159.11,122.25 155.00,120.83
|
|
||||||
152.31,119.90 143.54,110.54 141.00,108.00
|
|
||||||
138.65,112.89 135.79,119.24 131.00,122.00
|
|
||||||
131.00,122.00 118.00,72.00 118.00,72.00 Z
|
|
||||||
M 99.00,105.00
|
|
||||||
C 99.00,105.00 98.00,105.00 98.00,105.00
|
|
||||||
98.00,105.00 99.00,106.00 99.00,106.00
|
|
||||||
99.00,106.00 99.00,105.00 99.00,105.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,74 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* TeeSpring logo.
|
|
||||||
*/
|
|
||||||
export const TeeSpring: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
475,
|
|
||||||
545,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 240.00,0.00
|
|
||||||
C 240.00,0.00 244.00,0.00 244.00,0.00
|
|
||||||
244.00,0.00 254.00,1.04 254.00,1.04
|
|
||||||
254.00,1.04 263.00,1.04 263.00,1.04
|
|
||||||
304.10,5.09 342.37,17.33 377.00,40.08
|
|
||||||
435.19,78.31 469.28,140.18 474.09,209.00
|
|
||||||
474.09,209.00 475.00,219.00 475.00,219.00
|
|
||||||
475.82,289.26 446.65,351.38 393.00,396.73
|
|
||||||
382.45,405.65 369.17,414.11 357.00,420.69
|
|
||||||
357.00,420.69 337.27,430.64 337.27,430.64
|
|
||||||
334.29,433.27 332.39,439.31 330.69,443.00
|
|
||||||
327.83,449.23 324.42,455.20 320.77,461.00
|
|
||||||
310.40,477.47 293.49,496.40 278.00,508.10
|
|
||||||
249.81,529.41 203.43,544.94 168.00,545.00
|
|
||||||
168.00,545.00 150.00,545.00 150.00,545.00
|
|
||||||
125.42,544.96 90.40,535.79 68.00,525.69
|
|
||||||
49.96,517.55 32.70,506.76 17.00,494.77
|
|
||||||
17.00,494.77 0.00,481.00 0.00,481.00
|
|
||||||
2.57,475.47 6.82,471.50 10.84,467.00
|
|
||||||
10.84,467.00 33.28,442.00 33.28,442.00
|
|
||||||
35.47,439.49 42.88,430.22 46.04,430.18
|
|
||||||
48.97,430.14 57.23,437.77 60.00,439.87
|
|
||||||
70.46,447.78 83.12,455.65 95.00,461.22
|
|
||||||
136.97,480.90 194.02,482.07 233.00,454.56
|
|
||||||
238.56,450.64 241.26,447.73 246.00,443.00
|
|
||||||
224.21,442.93 191.85,432.40 172.00,423.31
|
|
||||||
117.49,398.35 72.00,360.79 45.75,306.00
|
|
||||||
36.23,286.14 31.44,267.91 29.91,246.00
|
|
||||||
29.67,242.56 28.93,240.60 29.18,237.00
|
|
||||||
30.23,222.27 32.09,207.57 38.31,194.00
|
|
||||||
42.82,184.15 47.86,176.08 55.17,168.00
|
|
||||||
89.09,130.48 146.65,132.44 190.00,149.92
|
|
||||||
205.26,156.07 219.68,164.39 233.00,174.01
|
|
||||||
256.93,191.30 280.05,215.68 296.83,240.00
|
|
||||||
313.68,264.43 328.11,289.43 336.72,318.00
|
|
||||||
339.48,327.18 342.55,336.33 343.00,346.00
|
|
||||||
349.38,343.12 354.12,337.88 359.00,333.00
|
|
||||||
368.02,323.98 373.77,317.88 380.68,307.00
|
|
||||||
411.97,257.71 413.89,196.46 383.99,146.00
|
|
||||||
359.25,104.26 314.53,77.92 267.00,71.72
|
|
||||||
267.00,71.72 249.00,70.00 249.00,70.00
|
|
||||||
249.00,70.00 240.00,70.00 240.00,70.00
|
|
||||||
240.00,70.00 240.00,0.00 240.00,0.00 Z
|
|
||||||
M 277.00,375.00
|
|
||||||
C 276.73,345.54 264.44,317.53 249.05,293.00
|
|
||||||
232.19,266.12 210.91,241.80 184.00,224.69
|
|
||||||
172.49,217.38 153.57,209.06 140.00,207.15
|
|
||||||
140.00,207.15 126.00,207.15 126.00,207.15
|
|
||||||
115.14,207.13 104.29,213.21 100.92,224.00
|
|
||||||
98.90,230.49 98.93,234.35 99.00,241.00
|
|
||||||
99.27,263.45 112.66,287.80 126.21,305.00
|
|
||||||
151.90,337.62 201.72,367.04 243.00,373.56
|
|
||||||
254.27,375.34 265.63,375.00 277.00,375.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,93 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Throne.me logo.
|
|
||||||
*/
|
|
||||||
export const Throne: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
738,
|
|
||||||
621,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 364.00,0.65
|
|
||||||
C 380.58,-2.77 384.82,13.12 390.75,25.00
|
|
||||||
390.75,25.00 436.25,114.00 436.25,114.00
|
|
||||||
436.25,114.00 501.25,242.00 501.25,242.00
|
|
||||||
509.55,258.59 526.58,284.93 526.99,303.00
|
|
||||||
527.58,329.12 511.89,341.11 495.00,358.00
|
|
||||||
495.00,358.00 471.96,382.00 471.96,382.00
|
|
||||||
471.96,382.00 440.00,414.00 440.00,414.00
|
|
||||||
440.00,414.00 418.96,436.00 418.96,436.00
|
|
||||||
418.96,436.00 390.00,465.00 390.00,465.00
|
|
||||||
383.82,471.18 376.58,481.87 367.00,480.80
|
|
||||||
359.95,480.01 351.03,469.03 346.00,464.00
|
|
||||||
346.00,464.00 300.00,417.00 300.00,417.00
|
|
||||||
300.00,417.00 239.00,355.00 239.00,355.00
|
|
||||||
224.23,340.23 209.04,325.70 210.51,303.00
|
|
||||||
210.78,298.85 211.58,292.96 212.77,289.00
|
|
||||||
212.77,289.00 235.75,242.00 235.75,242.00
|
|
||||||
235.75,242.00 298.75,119.00 298.75,119.00
|
|
||||||
298.75,119.00 320.74,76.00 320.74,76.00
|
|
||||||
320.74,76.00 343.69,31.00 343.69,31.00
|
|
||||||
346.88,25.11 354.43,7.97 358.21,4.21
|
|
||||||
360.24,2.20 361.48,1.71 364.00,0.65 Z
|
|
||||||
M 11.00,204.59
|
|
||||||
C 13.62,204.13 15.36,203.84 18.00,204.59
|
|
||||||
23.76,206.43 34.33,218.33 39.00,223.00
|
|
||||||
39.00,223.00 102.00,287.00 102.00,287.00
|
|
||||||
102.00,287.00 131.96,317.00 131.96,317.00
|
|
||||||
131.96,317.00 141.01,327.00 141.01,327.00
|
|
||||||
141.01,327.00 176.96,363.00 176.96,363.00
|
|
||||||
176.96,363.00 186.01,373.00 186.01,373.00
|
|
||||||
186.01,373.00 235.96,423.00 235.96,423.00
|
|
||||||
235.96,423.00 316.00,505.00 316.00,505.00
|
|
||||||
316.00,505.00 361.00,551.00 361.00,551.00
|
|
||||||
366.28,556.28 376.33,564.19 376.52,572.00
|
|
||||||
376.65,577.57 372.41,583.22 367.00,584.58
|
|
||||||
367.00,584.58 360.00,585.17 360.00,585.17
|
|
||||||
360.00,585.17 345.00,586.00 345.00,586.00
|
|
||||||
345.00,586.00 334.00,586.96 334.00,586.96
|
|
||||||
299.43,588.47 264.60,593.98 231.00,602.37
|
|
||||||
212.72,606.95 183.56,617.64 167.00,618.82
|
|
||||||
163.80,619.04 161.15,618.37 158.00,618.07
|
|
||||||
135.75,616.01 118.33,604.57 107.44,585.00
|
|
||||||
102.99,577.01 98.68,561.24 96.15,552.00
|
|
||||||
96.15,552.00 64.42,443.00 64.42,443.00
|
|
||||||
64.42,443.00 26.02,311.00 26.02,311.00
|
|
||||||
26.02,311.00 3.42,233.00 3.42,233.00
|
|
||||||
0.08,221.29 -4.79,209.26 11.00,204.59 Z
|
|
||||||
M 720.00,204.61
|
|
||||||
C 730.62,202.68 739.38,209.98 737.53,221.00
|
|
||||||
737.53,221.00 729.71,249.00 729.71,249.00
|
|
||||||
729.71,249.00 714.58,301.00 714.58,301.00
|
|
||||||
714.58,301.00 678.42,425.00 678.42,425.00
|
|
||||||
678.42,425.00 646.72,534.00 646.72,534.00
|
|
||||||
638.26,562.21 633.90,594.97 606.00,611.13
|
|
||||||
601.21,613.90 595.29,616.69 590.00,618.28
|
|
||||||
569.52,624.42 556.97,616.60 538.00,611.14
|
|
||||||
538.00,611.14 500.00,600.87 500.00,600.87
|
|
||||||
491.51,598.75 482.71,597.52 475.00,593.12
|
|
||||||
465.90,587.93 450.35,570.35 442.00,562.00
|
|
||||||
442.00,562.00 416.72,536.00 416.72,536.00
|
|
||||||
412.08,530.66 408.35,526.63 410.43,519.00
|
|
||||||
411.45,515.25 414.38,512.76 416.92,510.00
|
|
||||||
416.92,510.00 432.00,494.00 432.00,494.00
|
|
||||||
432.00,494.00 465.96,460.01 465.96,460.01
|
|
||||||
465.96,460.01 483.00,442.00 483.00,442.00
|
|
||||||
483.00,442.00 509.96,415.00 509.96,415.00
|
|
||||||
509.96,415.00 519.01,405.00 519.01,405.00
|
|
||||||
519.01,405.00 552.96,371.01 552.96,371.01
|
|
||||||
552.96,371.01 651.00,271.00 651.00,271.00
|
|
||||||
651.00,271.00 665.04,256.00 665.04,256.00
|
|
||||||
665.04,256.00 696.00,225.00 696.00,225.00
|
|
||||||
702.65,218.35 711.22,207.67 720.00,204.61 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,52 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Topmate.io logo.
|
|
||||||
*/
|
|
||||||
export const Topmate: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
502,
|
|
||||||
503,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 240.00,0.42
|
|
||||||
C 256.32,-1.56 286.52,2.28 303.00,5.60
|
|
||||||
400.40,25.19 477.58,103.88 497.00,201.00
|
|
||||||
497.00,201.00 501.17,232.00 501.17,232.00
|
|
||||||
501.17,232.00 502.00,241.00 502.00,241.00
|
|
||||||
502.35,270.85 499.89,297.30 490.98,326.00
|
|
||||||
467.36,401.97 409.93,461.62 335.00,488.31
|
|
||||||
310.99,496.86 285.45,501.71 260.00,502.00
|
|
||||||
260.00,502.00 251.00,502.66 251.00,502.66
|
|
||||||
251.00,502.66 242.00,502.00 242.00,502.00
|
|
||||||
242.00,502.00 234.00,502.00 234.00,502.00
|
|
||||||
211.79,501.74 178.65,493.13 158.00,484.80
|
|
||||||
126.34,472.03 97.19,453.16 73.01,428.99
|
|
||||||
-2.96,353.01 -20.43,237.27 25.32,141.00
|
|
||||||
55.16,78.19 112.06,31.52 178.00,11.02
|
|
||||||
194.55,5.88 209.86,3.32 227.00,1.28
|
|
||||||
227.00,1.28 240.00,0.42 240.00,0.42 Z
|
|
||||||
M 376.00,177.00
|
|
||||||
C 368.26,163.21 357.11,149.88 345.00,139.75
|
|
||||||
284.88,89.46 195.07,94.22 142.17,153.00
|
|
||||||
130.81,165.62 121.94,180.30 115.60,196.00
|
|
||||||
110.16,209.48 105.17,229.47 105.00,244.00
|
|
||||||
105.00,244.00 105.00,255.00 105.00,255.00
|
|
||||||
105.01,263.83 107.03,276.36 109.13,285.00
|
|
||||||
119.96,329.56 149.30,364.60 191.00,383.69
|
|
||||||
237.19,404.84 292.51,398.62 334.00,369.98
|
|
||||||
344.45,362.76 364.10,345.47 369.00,334.00
|
|
||||||
369.00,334.00 295.00,281.71 295.00,281.71
|
|
||||||
295.00,281.71 251.00,250.00 251.00,250.00
|
|
||||||
251.00,250.00 297.00,223.60 297.00,223.60
|
|
||||||
297.00,223.60 376.00,177.00 376.00,177.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,148 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Tree Nation logo.
|
|
||||||
*/
|
|
||||||
export const TreeNation: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
52,
|
|
||||||
52,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 25.00,52.00
|
|
||||||
C 15.12,50.14 7.59,47.52 2.41,38.00
|
|
||||||
-0.15,33.27 -0.06,29.18 0.00,24.00
|
|
||||||
0.16,10.76 10.76,0.16 24.00,0.00
|
|
||||||
31.74,-0.09 36.64,0.42 42.96,5.53
|
|
||||||
54.40,14.78 54.92,33.47 44.82,43.90
|
|
||||||
39.64,49.24 33.11,51.04 26.00,52.00
|
|
||||||
26.00,46.30 24.65,37.69 28.00,33.00
|
|
||||||
24.79,30.12 25.93,24.77 27.00,21.00
|
|
||||||
27.00,21.00 23.00,36.00 23.00,36.00
|
|
||||||
26.19,40.33 25.00,46.83 25.00,52.00 Z
|
|
||||||
M 31.00,48.00
|
|
||||||
C 50.79,42.34 56.10,15.81 37.00,5.41
|
|
||||||
32.73,3.09 28.74,2.88 24.00,3.02
|
|
||||||
9.50,3.42 -0.31,18.27 3.64,32.00
|
|
||||||
6.11,40.60 11.93,45.13 20.00,48.00
|
|
||||||
20.00,45.66 20.29,41.35 18.98,39.43
|
|
||||||
17.24,36.88 13.97,37.30 11.11,35.27
|
|
||||||
4.88,30.84 6.93,25.10 12.00,21.00
|
|
||||||
10.87,15.81 11.98,10.65 18.00,9.33
|
|
||||||
20.79,8.72 23.27,9.99 26.00,9.85
|
|
||||||
28.83,9.92 31.54,8.42 34.98,9.85
|
|
||||||
38.83,11.21 42.64,19.18 44.00,23.04
|
|
||||||
47.45,32.86 35.14,33.49 32.60,36.43
|
|
||||||
30.43,38.94 31.00,44.75 31.00,48.00 Z
|
|
||||||
M 22.00,14.00
|
|
||||||
C 22.00,14.00 17.00,15.00 17.00,15.00
|
|
||||||
17.00,15.00 22.00,14.00 22.00,14.00 Z
|
|
||||||
M 23.00,15.00
|
|
||||||
C 23.00,15.00 21.00,20.00 21.00,20.00
|
|
||||||
21.00,20.00 24.00,20.00 24.00,20.00
|
|
||||||
24.00,20.00 23.00,15.00 23.00,15.00 Z
|
|
||||||
M 30.00,15.00
|
|
||||||
C 30.00,15.00 29.00,15.00 29.00,15.00
|
|
||||||
29.00,15.00 30.00,16.00 30.00,16.00
|
|
||||||
30.00,16.00 30.00,15.00 30.00,15.00 Z
|
|
||||||
M 35.00,15.00
|
|
||||||
C 35.00,15.00 34.00,15.00 34.00,15.00
|
|
||||||
34.00,15.00 35.00,16.00 35.00,16.00
|
|
||||||
35.00,16.00 35.00,15.00 35.00,15.00 Z
|
|
||||||
M 35.00,18.00
|
|
||||||
C 35.00,18.00 34.00,18.00 34.00,18.00
|
|
||||||
34.00,18.00 35.00,19.00 35.00,19.00
|
|
||||||
35.00,19.00 35.00,18.00 35.00,18.00 Z
|
|
||||||
M 18.00,19.00
|
|
||||||
C 18.00,19.00 17.00,19.00 17.00,19.00
|
|
||||||
17.00,19.00 18.00,20.00 18.00,20.00
|
|
||||||
18.00,20.00 18.00,19.00 18.00,19.00 Z
|
|
||||||
M 34.00,19.00
|
|
||||||
C 34.00,19.00 33.00,19.00 33.00,19.00
|
|
||||||
33.00,19.00 34.00,20.00 34.00,20.00
|
|
||||||
34.00,20.00 34.00,19.00 34.00,19.00 Z
|
|
||||||
M 20.00,20.00
|
|
||||||
C 20.00,20.00 19.00,20.00 19.00,20.00
|
|
||||||
19.00,20.00 20.00,21.00 20.00,21.00
|
|
||||||
20.00,21.00 20.00,20.00 20.00,20.00 Z
|
|
||||||
M 25.00,20.00
|
|
||||||
C 25.00,20.00 24.00,20.00 24.00,20.00
|
|
||||||
24.00,20.00 25.00,21.00 25.00,21.00
|
|
||||||
25.00,21.00 25.00,20.00 25.00,20.00 Z
|
|
||||||
M 28.00,20.00
|
|
||||||
C 28.00,20.00 27.00,20.00 27.00,20.00
|
|
||||||
27.00,20.00 28.00,21.00 28.00,21.00
|
|
||||||
28.00,21.00 28.00,20.00 28.00,20.00 Z
|
|
||||||
M 35.00,23.00
|
|
||||||
C 35.00,23.00 34.00,23.00 34.00,23.00
|
|
||||||
34.00,23.00 35.00,24.00 35.00,24.00
|
|
||||||
35.00,24.00 35.00,23.00 35.00,23.00 Z
|
|
||||||
M 39.00,23.00
|
|
||||||
C 39.00,23.00 38.00,23.00 38.00,23.00
|
|
||||||
38.00,23.00 39.00,24.00 39.00,24.00
|
|
||||||
39.00,24.00 39.00,23.00 39.00,23.00 Z
|
|
||||||
M 14.00,26.00
|
|
||||||
C 14.00,26.00 13.00,26.00 13.00,26.00
|
|
||||||
13.00,26.00 14.00,27.00 14.00,27.00
|
|
||||||
14.00,27.00 14.00,26.00 14.00,26.00 Z
|
|
||||||
M 18.00,26.00
|
|
||||||
C 18.00,26.00 17.00,26.00 17.00,26.00
|
|
||||||
17.00,26.00 18.00,27.00 18.00,27.00
|
|
||||||
18.00,27.00 18.00,26.00 18.00,26.00 Z
|
|
||||||
M 19.00,27.00
|
|
||||||
C 19.00,27.00 17.00,31.00 17.00,31.00
|
|
||||||
17.00,31.00 19.00,27.00 19.00,27.00 Z
|
|
||||||
M 39.00,27.00
|
|
||||||
C 39.00,27.00 38.00,27.00 38.00,27.00
|
|
||||||
38.00,27.00 39.00,28.00 39.00,28.00
|
|
||||||
39.00,28.00 39.00,27.00 39.00,27.00 Z
|
|
||||||
M 33.00,28.00
|
|
||||||
C 33.00,28.00 32.00,28.00 32.00,28.00
|
|
||||||
32.00,28.00 33.00,29.00 33.00,29.00
|
|
||||||
33.00,29.00 33.00,28.00 33.00,28.00 Z
|
|
||||||
M 32.00,29.00
|
|
||||||
C 32.00,29.00 31.00,29.00 31.00,29.00
|
|
||||||
31.00,29.00 32.00,30.00 32.00,30.00
|
|
||||||
32.00,30.00 32.00,29.00 32.00,29.00 Z
|
|
||||||
M 14.00,30.00
|
|
||||||
C 14.00,30.00 13.00,30.00 13.00,30.00
|
|
||||||
13.00,30.00 14.00,31.00 14.00,31.00
|
|
||||||
14.00,31.00 14.00,30.00 14.00,30.00 Z
|
|
||||||
M 31.00,30.00
|
|
||||||
C 31.00,30.00 30.00,30.00 30.00,30.00
|
|
||||||
30.00,30.00 31.00,31.00 31.00,31.00
|
|
||||||
31.00,31.00 31.00,30.00 31.00,30.00 Z
|
|
||||||
M 20.00,31.00
|
|
||||||
C 20.00,31.00 19.00,31.00 19.00,31.00
|
|
||||||
19.00,31.00 20.00,32.00 20.00,32.00
|
|
||||||
20.00,32.00 20.00,31.00 20.00,31.00 Z
|
|
||||||
M 30.00,31.00
|
|
||||||
C 30.00,31.00 29.00,31.00 29.00,31.00
|
|
||||||
29.00,31.00 30.00,32.00 30.00,32.00
|
|
||||||
30.00,32.00 30.00,31.00 30.00,31.00 Z
|
|
||||||
M 21.00,32.00
|
|
||||||
C 21.00,32.00 20.00,32.00 20.00,32.00
|
|
||||||
20.00,32.00 21.00,33.00 21.00,33.00
|
|
||||||
21.00,33.00 21.00,32.00 21.00,32.00 Z
|
|
||||||
M 29.00,32.00
|
|
||||||
C 29.00,32.00 28.00,32.00 28.00,32.00
|
|
||||||
28.00,32.00 29.00,33.00 29.00,33.00
|
|
||||||
29.00,33.00 29.00,32.00 29.00,32.00 Z
|
|
||||||
M 22.00,33.00
|
|
||||||
C 22.00,33.00 21.00,33.00 21.00,33.00
|
|
||||||
21.00,33.00 22.00,34.00 22.00,34.00
|
|
||||||
22.00,34.00 22.00,33.00 22.00,33.00 Z
|
|
||||||
M 23.00,34.00
|
|
||||||
C 23.00,34.00 22.00,34.00 22.00,34.00
|
|
||||||
22.00,34.00 23.00,35.00 23.00,35.00
|
|
||||||
23.00,35.00 23.00,34.00 23.00,34.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,155 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* Udemy logo.
|
|
||||||
*/
|
|
||||||
export const Udemy: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
2118,
|
|
||||||
2118,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 1027.00,0.21
|
|
||||||
C 1027.00,0.21 1083.00,0.21 1083.00,0.21
|
|
||||||
1083.00,0.21 1098.00,1.00 1098.00,1.00
|
|
||||||
1098.00,1.00 1148.00,3.83 1148.00,3.83
|
|
||||||
1148.00,3.83 1185.00,7.28 1185.00,7.28
|
|
||||||
1242.11,14.33 1297.67,25.39 1353.00,41.29
|
|
||||||
1516.40,88.26 1668.12,175.50 1791.00,293.04
|
|
||||||
1933.98,429.80 2037.87,606.97 2085.87,799.00
|
|
||||||
2098.98,851.43 2107.96,904.25 2113.17,958.00
|
|
||||||
2113.17,958.00 2116.00,989.00 2116.00,989.00
|
|
||||||
2116.00,989.00 2116.00,998.00 2116.00,998.00
|
|
||||||
2116.00,998.00 2117.04,1008.00 2117.04,1008.00
|
|
||||||
2117.04,1008.00 2117.04,1023.00 2117.04,1023.00
|
|
||||||
2117.04,1023.00 2118.00,1035.00 2118.00,1035.00
|
|
||||||
2118.00,1035.00 2118.00,1083.00 2118.00,1083.00
|
|
||||||
2118.00,1083.00 2117.00,1100.00 2117.00,1100.00
|
|
||||||
2117.00,1100.00 2114.17,1148.00 2114.17,1148.00
|
|
||||||
2114.17,1148.00 2110.72,1185.00 2110.72,1185.00
|
|
||||||
2102.72,1249.75 2089.35,1313.67 2069.98,1376.00
|
|
||||||
2017.27,1545.58 1919.24,1702.31 1791.00,1824.96
|
|
||||||
1682.55,1928.69 1552.28,2008.03 1411.00,2058.31
|
|
||||||
1330.08,2087.10 1245.37,2104.90 1160.00,2113.17
|
|
||||||
1160.00,2113.17 1100.00,2117.00 1100.00,2117.00
|
|
||||||
1100.00,2117.00 1083.00,2118.00 1083.00,2118.00
|
|
||||||
1083.00,2118.00 1035.00,2118.00 1035.00,2118.00
|
|
||||||
1035.00,2118.00 1023.00,2117.04 1023.00,2117.04
|
|
||||||
1023.00,2117.04 1008.00,2117.04 1008.00,2117.04
|
|
||||||
1008.00,2117.04 982.00,2115.09 982.00,2115.09
|
|
||||||
982.00,2115.09 915.00,2108.28 915.00,2108.28
|
|
||||||
844.59,2099.01 767.69,2080.44 701.00,2056.05
|
|
||||||
586.65,2014.23 483.34,1956.90 389.00,1879.58
|
|
||||||
306.50,1811.96 237.26,1735.42 177.67,1647.00
|
|
||||||
84.91,1509.36 27.58,1349.41 7.28,1185.00
|
|
||||||
4.48,1162.30 1.03,1122.44 1.00,1100.00
|
|
||||||
1.00,1100.00 0.00,1083.00 0.00,1083.00
|
|
||||||
0.00,1083.00 0.00,1035.00 0.00,1035.00
|
|
||||||
0.00,1035.00 0.96,1023.00 0.96,1023.00
|
|
||||||
0.96,1023.00 0.96,1008.00 0.96,1008.00
|
|
||||||
0.96,1008.00 2.91,982.00 2.91,982.00
|
|
||||||
4.78,954.82 7.75,927.99 11.73,901.00
|
|
||||||
26.84,798.40 56.07,704.16 99.31,610.00
|
|
||||||
99.31,610.00 112.75,583.00 112.75,583.00
|
|
||||||
133.71,541.08 157.37,500.60 183.98,462.00
|
|
||||||
216.84,414.31 252.99,368.87 293.04,327.00
|
|
||||||
415.66,198.79 572.46,100.72 742.00,48.02
|
|
||||||
801.74,29.46 871.80,13.82 934.00,7.16
|
|
||||||
934.00,7.16 989.00,2.00 989.00,2.00
|
|
||||||
989.00,2.00 998.00,2.00 998.00,2.00
|
|
||||||
998.00,2.00 1009.00,1.00 1009.00,1.00
|
|
||||||
1015.02,0.97 1021.03,1.27 1027.00,0.21 Z
|
|
||||||
M 1518.00,690.00
|
|
||||||
C 1518.00,690.00 1518.00,426.00 1518.00,426.00
|
|
||||||
1518.00,423.77 1518.24,420.43 1517.01,418.53
|
|
||||||
1515.72,416.54 1512.07,414.78 1510.00,413.58
|
|
||||||
1510.00,413.58 1494.00,404.15 1494.00,404.15
|
|
||||||
1494.00,404.15 1419.00,359.80 1419.00,359.80
|
|
||||||
1419.00,359.80 1152.00,202.20 1152.00,202.20
|
|
||||||
1152.00,202.20 1083.00,161.58 1083.00,161.58
|
|
||||||
1083.00,161.58 1066.00,151.58 1066.00,151.58
|
|
||||||
1063.11,149.94 1060.49,148.08 1057.00,148.74
|
|
||||||
1054.06,149.29 1047.80,153.32 1045.00,155.00
|
|
||||||
1045.00,155.00 1024.00,167.40 1024.00,167.40
|
|
||||||
1024.00,167.40 952.00,209.99 952.00,209.99
|
|
||||||
952.00,209.99 789.00,306.01 789.00,306.01
|
|
||||||
789.00,306.01 704.00,356.28 704.00,356.28
|
|
||||||
704.00,356.28 624.00,403.42 624.00,403.42
|
|
||||||
624.00,403.42 608.00,412.99 608.00,412.99
|
|
||||||
605.78,414.29 601.33,416.46 599.99,418.53
|
|
||||||
598.76,420.43 599.00,423.77 599.00,426.00
|
|
||||||
599.00,426.00 599.00,689.00 599.00,689.00
|
|
||||||
599.00,689.00 638.00,667.20 638.00,667.20
|
|
||||||
638.00,667.20 710.00,624.60 710.00,624.60
|
|
||||||
710.00,624.60 940.00,488.99 940.00,488.99
|
|
||||||
940.00,488.99 1024.00,439.40 1024.00,439.40
|
|
||||||
1024.00,439.40 1048.00,425.15 1048.00,425.15
|
|
||||||
1048.00,425.15 1058.00,420.19 1058.00,420.19
|
|
||||||
1058.00,420.19 1068.00,424.72 1068.00,424.72
|
|
||||||
1068.00,424.72 1092.00,438.99 1092.00,438.99
|
|
||||||
1092.00,438.99 1183.00,492.60 1183.00,492.60
|
|
||||||
1183.00,492.60 1399.00,620.01 1399.00,620.01
|
|
||||||
1399.00,620.01 1481.00,668.42 1481.00,668.42
|
|
||||||
1481.00,668.42 1518.00,690.00 1518.00,690.00 Z
|
|
||||||
M 839.73,918.00
|
|
||||||
C 839.73,918.00 599.00,918.00 599.00,918.00
|
|
||||||
599.00,918.00 599.00,1443.00 599.00,1443.00
|
|
||||||
599.00,1443.00 599.00,1516.00 599.00,1516.00
|
|
||||||
599.00,1516.00 599.00,1560.00 599.00,1560.00
|
|
||||||
599.00,1560.00 603.45,1613.28 603.45,1613.28
|
|
||||||
614.91,1704.32 653.23,1790.62 722.00,1852.83
|
|
||||||
783.61,1908.57 850.45,1939.88 931.00,1957.58
|
|
||||||
951.57,1962.09 982.42,1966.56 1003.32,1967.81
|
|
||||||
1003.32,1967.81 1027.00,1969.00 1027.00,1969.00
|
|
||||||
1030.87,1969.05 1037.63,1969.15 1041.00,1971.00
|
|
||||||
1041.00,1971.00 1042.00,1969.00 1042.00,1969.00
|
|
||||||
1042.00,1969.00 1043.00,1971.00 1043.00,1971.00
|
|
||||||
1043.00,1971.00 1045.00,1969.00 1045.00,1969.00
|
|
||||||
1048.05,1971.81 1060.56,1971.10 1064.00,1969.00
|
|
||||||
1066.02,1970.69 1067.61,1969.70 1070.00,1969.00
|
|
||||||
1070.00,1969.00 1070.00,1971.00 1070.00,1971.00
|
|
||||||
1070.00,1971.00 1071.00,1971.00 1071.00,1971.00
|
|
||||||
1071.00,1971.00 1072.00,1969.00 1072.00,1969.00
|
|
||||||
1072.00,1969.00 1072.00,1971.00 1072.00,1971.00
|
|
||||||
1072.00,1971.00 1073.00,1971.00 1073.00,1971.00
|
|
||||||
1075.36,1968.47 1082.62,1969.01 1086.00,1969.00
|
|
||||||
1086.00,1969.00 1108.49,1967.78 1108.49,1967.78
|
|
||||||
1140.13,1965.79 1171.15,1959.99 1202.00,1952.99
|
|
||||||
1202.00,1952.99 1237.00,1942.67 1237.00,1942.67
|
|
||||||
1300.26,1921.58 1359.29,1886.83 1406.87,1839.86
|
|
||||||
1468.86,1778.64 1503.51,1693.23 1513.68,1607.58
|
|
||||||
1520.04,1554.02 1518.00,1499.86 1518.00,1446.00
|
|
||||||
1518.00,1446.00 1518.00,918.00 1518.00,918.00
|
|
||||||
1518.00,918.00 1277.21,918.00 1277.21,918.00
|
|
||||||
1277.21,918.00 1277.21,965.89 1277.21,965.89
|
|
||||||
1277.21,965.89 1277.21,1030.98 1277.21,1030.98
|
|
||||||
1277.21,1030.98 1277.21,1173.03 1277.21,1173.03
|
|
||||||
1277.21,1173.03 1277.21,1493.03 1277.21,1493.03
|
|
||||||
1277.21,1493.03 1277.21,1523.00 1277.21,1523.00
|
|
||||||
1276.78,1553.58 1270.07,1585.69 1258.55,1614.00
|
|
||||||
1225.82,1694.41 1146.00,1745.09 1060.00,1746.00
|
|
||||||
994.18,1746.69 928.60,1716.51 887.45,1665.00
|
|
||||||
876.49,1651.28 867.61,1635.94 860.31,1620.00
|
|
||||||
845.13,1586.86 839.80,1549.82 839.73,1513.67
|
|
||||||
839.73,1513.67 839.73,1116.33 839.73,1116.33
|
|
||||||
839.73,1116.33 839.73,984.33 839.73,984.33
|
|
||||||
839.73,984.33 839.73,941.67 839.73,941.67
|
|
||||||
839.73,941.67 839.73,918.00 839.73,918.00 Z
|
|
||||||
M 1048.00,1970.00
|
|
||||||
C 1048.00,1970.00 1047.00,1970.00 1047.00,1970.00
|
|
||||||
1047.00,1970.00 1048.00,1971.00 1048.00,1971.00
|
|
||||||
1048.00,1971.00 1048.00,1970.00 1048.00,1970.00 Z
|
|
||||||
M 1068.00,1970.00
|
|
||||||
C 1068.00,1970.00 1067.00,1970.00 1067.00,1970.00
|
|
||||||
1067.00,1970.00 1068.00,1971.00 1068.00,1971.00
|
|
||||||
1068.00,1971.00 1068.00,1970.00 1068.00,1970.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,355 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom FontAwesome icon definition for the
|
|
||||||
* VRoid Hub logo.
|
|
||||||
*/
|
|
||||||
export const VRoid: IconDefinition = {
|
|
||||||
icon: [
|
|
||||||
280,
|
|
||||||
280,
|
|
||||||
[],
|
|
||||||
"U+E002",
|
|
||||||
`M 61.00,31.00
|
|
||||||
C 60.65,24.68 66.72,14.29 74.00,16.00
|
|
||||||
74.00,16.00 72.00,17.00 72.00,17.00
|
|
||||||
72.00,17.00 164.00,17.00 164.00,17.00
|
|
||||||
164.00,17.00 191.00,17.00 191.00,17.00
|
|
||||||
191.00,17.00 208.00,16.00 208.00,16.00
|
|
||||||
208.00,16.00 206.00,16.00 206.00,16.00
|
|
||||||
206.00,16.00 206.00,15.00 206.00,15.00
|
|
||||||
212.92,16.47 218.39,21.62 218.00,29.00
|
|
||||||
221.98,29.92 222.79,32.63 224.72,36.00
|
|
||||||
224.72,36.00 234.00,53.00 234.00,53.00
|
|
||||||
234.00,53.00 232.00,52.00 232.00,52.00
|
|
||||||
232.00,52.00 233.00,55.00 233.00,55.00
|
|
||||||
233.00,55.00 235.00,54.00 235.00,54.00
|
|
||||||
235.00,54.00 249.00,79.00 249.00,79.00
|
|
||||||
249.00,79.00 247.00,78.00 247.00,78.00
|
|
||||||
247.00,78.00 248.00,81.00 248.00,81.00
|
|
||||||
248.00,81.00 250.00,80.00 250.00,80.00
|
|
||||||
250.00,80.00 256.00,91.00 256.00,91.00
|
|
||||||
256.00,91.00 254.00,90.00 254.00,90.00
|
|
||||||
254.00,90.00 255.00,93.00 255.00,93.00
|
|
||||||
255.00,93.00 257.00,92.00 257.00,92.00
|
|
||||||
257.00,92.00 275.00,124.00 275.00,124.00
|
|
||||||
275.00,124.00 273.00,123.00 273.00,123.00
|
|
||||||
273.00,123.00 274.00,126.00 274.00,126.00
|
|
||||||
274.00,126.00 276.00,125.00 276.00,125.00
|
|
||||||
286.57,142.99 275.21,156.66 266.00,172.00
|
|
||||||
266.00,172.00 263.00,174.00 263.00,174.00
|
|
||||||
263.00,174.00 265.00,173.00 265.00,173.00
|
|
||||||
265.00,173.00 255.72,190.00 255.72,190.00
|
|
||||||
253.79,193.37 252.98,196.08 249.00,197.00
|
|
||||||
249.20,200.89 249.15,203.03 245.00,204.00
|
|
||||||
245.35,210.64 239.39,218.34 236.00,224.00
|
|
||||||
236.00,224.00 233.00,226.00 233.00,226.00
|
|
||||||
233.00,226.00 235.00,225.00 235.00,225.00
|
|
||||||
235.00,225.00 232.00,231.00 232.00,231.00
|
|
||||||
232.00,231.00 229.00,233.00 229.00,233.00
|
|
||||||
229.00,233.00 231.00,232.00 231.00,232.00
|
|
||||||
231.00,232.00 221.00,250.00 221.00,250.00
|
|
||||||
221.00,250.00 218.00,252.00 218.00,252.00
|
|
||||||
218.00,252.00 220.00,251.00 220.00,251.00
|
|
||||||
217.90,255.69 215.54,260.21 210.99,262.99
|
|
||||||
205.64,266.26 187.96,265.00 181.00,265.00
|
|
||||||
181.00,265.00 78.00,265.00 78.00,265.00
|
|
||||||
75.50,264.96 73.37,264.96 71.00,263.99
|
|
||||||
64.87,261.50 59.65,253.55 60.00,247.00
|
|
||||||
54.76,245.79 50.15,234.82 48.00,230.00
|
|
||||||
48.00,230.00 50.00,231.00 50.00,231.00
|
|
||||||
50.00,231.00 49.00,228.00 49.00,228.00
|
|
||||||
49.00,228.00 47.00,229.00 47.00,229.00
|
|
||||||
47.00,229.00 45.00,221.00 45.00,221.00
|
|
||||||
39.76,219.79 35.15,208.82 33.00,204.00
|
|
||||||
33.00,204.00 35.00,205.00 35.00,205.00
|
|
||||||
35.00,205.00 34.00,202.00 34.00,202.00
|
|
||||||
34.00,202.00 32.00,203.00 32.00,203.00
|
|
||||||
32.00,203.00 30.00,195.00 30.00,195.00
|
|
||||||
26.02,194.08 25.21,191.37 23.28,188.00
|
|
||||||
23.28,188.00 14.58,173.00 14.58,173.00
|
|
||||||
14.58,173.00 0.73,148.00 0.73,148.00
|
|
||||||
0.22,146.13 0.10,142.99 0.05,141.00
|
|
||||||
-0.22,128.88 4.95,123.08 11.00,113.00
|
|
||||||
11.00,113.00 29.00,82.00 29.00,82.00
|
|
||||||
29.00,82.00 32.00,80.00 32.00,80.00
|
|
||||||
32.00,80.00 30.00,81.00 30.00,81.00
|
|
||||||
30.00,81.00 51.40,43.00 51.40,43.00
|
|
||||||
53.84,38.87 55.99,32.15 61.00,31.00 Z
|
|
||||||
M 71.00,17.00
|
|
||||||
C 71.00,17.00 70.00,17.00 70.00,17.00
|
|
||||||
70.00,17.00 71.00,18.00 71.00,18.00
|
|
||||||
71.00,18.00 71.00,17.00 71.00,17.00 Z
|
|
||||||
M 210.00,17.00
|
|
||||||
C 210.00,17.00 209.00,17.00 209.00,17.00
|
|
||||||
209.00,17.00 210.00,18.00 210.00,18.00
|
|
||||||
210.00,18.00 210.00,17.00 210.00,17.00 Z
|
|
||||||
M 69.00,18.00
|
|
||||||
C 69.00,18.00 68.00,18.00 68.00,18.00
|
|
||||||
68.00,18.00 69.00,19.00 69.00,19.00
|
|
||||||
69.00,19.00 69.00,18.00 69.00,18.00 Z
|
|
||||||
M 212.00,18.00
|
|
||||||
C 212.00,18.00 211.00,18.00 211.00,18.00
|
|
||||||
211.00,18.00 212.00,19.00 212.00,19.00
|
|
||||||
212.00,19.00 212.00,18.00 212.00,18.00 Z
|
|
||||||
M 68.00,19.00
|
|
||||||
C 68.00,19.00 67.00,19.00 67.00,19.00
|
|
||||||
67.00,19.00 68.00,20.00 68.00,20.00
|
|
||||||
68.00,20.00 68.00,19.00 68.00,19.00 Z
|
|
||||||
M 213.00,19.00
|
|
||||||
C 213.00,19.00 212.00,19.00 212.00,19.00
|
|
||||||
212.00,19.00 213.00,20.00 213.00,20.00
|
|
||||||
213.00,20.00 213.00,19.00 213.00,19.00 Z
|
|
||||||
M 67.00,20.00
|
|
||||||
C 67.00,20.00 66.00,20.00 66.00,20.00
|
|
||||||
66.00,20.00 67.00,21.00 67.00,21.00
|
|
||||||
67.00,21.00 67.00,20.00 67.00,20.00 Z
|
|
||||||
M 214.00,20.00
|
|
||||||
C 214.00,20.00 213.00,20.00 213.00,20.00
|
|
||||||
213.00,20.00 214.00,21.00 214.00,21.00
|
|
||||||
214.00,21.00 214.00,20.00 214.00,20.00 Z
|
|
||||||
M 215.00,21.00
|
|
||||||
C 215.00,21.00 214.00,21.00 214.00,21.00
|
|
||||||
214.00,21.00 215.00,22.00 215.00,22.00
|
|
||||||
215.00,22.00 215.00,21.00 215.00,21.00 Z
|
|
||||||
M 218.00,26.00
|
|
||||||
C 218.00,26.00 217.00,26.00 217.00,26.00
|
|
||||||
217.00,26.00 218.00,27.00 218.00,27.00
|
|
||||||
218.00,27.00 218.00,26.00 218.00,26.00 Z
|
|
||||||
M 62.00,28.00
|
|
||||||
C 62.00,28.00 61.00,28.00 61.00,28.00
|
|
||||||
61.00,28.00 62.00,29.00 62.00,29.00
|
|
||||||
62.00,29.00 62.00,28.00 62.00,28.00 Z
|
|
||||||
M 222.00,33.00
|
|
||||||
C 222.00,33.00 221.00,33.00 221.00,33.00
|
|
||||||
221.00,33.00 222.00,34.00 222.00,34.00
|
|
||||||
222.00,34.00 222.00,33.00 222.00,33.00 Z
|
|
||||||
M 58.00,35.00
|
|
||||||
C 58.00,35.00 57.00,35.00 57.00,35.00
|
|
||||||
57.00,35.00 58.00,36.00 58.00,36.00
|
|
||||||
58.00,36.00 58.00,35.00 58.00,35.00 Z
|
|
||||||
M 226.00,40.00
|
|
||||||
C 226.00,40.00 225.00,40.00 225.00,40.00
|
|
||||||
225.00,40.00 226.00,41.00 226.00,41.00
|
|
||||||
226.00,41.00 226.00,40.00 226.00,40.00 Z
|
|
||||||
M 54.00,42.00
|
|
||||||
C 54.00,42.00 53.00,42.00 53.00,42.00
|
|
||||||
53.00,42.00 54.00,43.00 54.00,43.00
|
|
||||||
54.00,43.00 54.00,42.00 54.00,42.00 Z
|
|
||||||
M 237.00,59.00
|
|
||||||
C 237.00,59.00 236.00,59.00 236.00,59.00
|
|
||||||
236.00,59.00 237.00,60.00 237.00,60.00
|
|
||||||
237.00,60.00 237.00,59.00 237.00,59.00 Z
|
|
||||||
M 43.00,61.00
|
|
||||||
C 43.00,61.00 42.00,61.00 42.00,61.00
|
|
||||||
42.00,61.00 43.00,62.00 43.00,62.00
|
|
||||||
43.00,62.00 43.00,61.00 43.00,61.00 Z
|
|
||||||
M 241.00,66.00
|
|
||||||
C 241.00,66.00 240.00,66.00 240.00,66.00
|
|
||||||
240.00,66.00 241.00,67.00 241.00,67.00
|
|
||||||
241.00,67.00 241.00,66.00 241.00,66.00 Z
|
|
||||||
M 39.00,68.00
|
|
||||||
C 39.00,68.00 38.00,68.00 38.00,68.00
|
|
||||||
38.00,68.00 39.00,69.00 39.00,69.00
|
|
||||||
39.00,69.00 39.00,68.00 39.00,68.00 Z
|
|
||||||
M 230.00,107.00
|
|
||||||
C 227.93,100.49 221.87,92.94 218.05,87.00
|
|
||||||
215.87,83.61 213.79,79.70 209.91,78.01
|
|
||||||
205.93,76.27 186.57,76.99 181.00,77.00
|
|
||||||
178.57,77.00 175.25,76.87 173.00,77.74
|
|
||||||
167.52,79.86 162.48,89.99 159.32,95.00
|
|
||||||
159.32,95.00 134.05,135.00 134.05,135.00
|
|
||||||
130.60,140.50 123.07,151.60 121.00,157.00
|
|
||||||
121.00,157.00 119.00,157.00 119.00,157.00
|
|
||||||
116.73,149.81 105.10,132.46 100.60,125.00
|
|
||||||
98.47,121.46 93.21,111.99 90.48,109.70
|
|
||||||
87.49,107.18 83.71,107.05 80.00,107.00
|
|
||||||
80.00,107.00 50.00,107.00 50.00,107.00
|
|
||||||
50.91,115.07 63.16,132.35 67.95,140.00
|
|
||||||
67.95,140.00 102.95,197.00 102.95,197.00
|
|
||||||
107.53,204.32 113.56,216.86 120.00,222.00
|
|
||||||
120.00,222.00 174.32,134.00 174.32,134.00
|
|
||||||
174.32,134.00 184.81,117.00 184.81,117.00
|
|
||||||
184.81,117.00 192.09,108.17 192.09,108.17
|
|
||||||
192.09,108.17 201.00,107.00 201.00,107.00
|
|
||||||
201.00,107.00 230.00,107.00 230.00,107.00 Z
|
|
||||||
M 252.00,85.00
|
|
||||||
C 252.00,85.00 251.00,85.00 251.00,85.00
|
|
||||||
251.00,85.00 252.00,86.00 252.00,86.00
|
|
||||||
252.00,86.00 252.00,85.00 252.00,85.00 Z
|
|
||||||
M 28.00,87.00
|
|
||||||
C 28.00,87.00 27.00,87.00 27.00,87.00
|
|
||||||
27.00,87.00 28.00,88.00 28.00,88.00
|
|
||||||
28.00,88.00 28.00,87.00 28.00,87.00 Z
|
|
||||||
M 24.00,94.00
|
|
||||||
C 24.00,94.00 23.00,94.00 23.00,94.00
|
|
||||||
23.00,94.00 24.00,95.00 24.00,95.00
|
|
||||||
24.00,95.00 24.00,94.00 24.00,94.00 Z
|
|
||||||
M 263.00,104.00
|
|
||||||
C 263.00,104.00 262.00,104.00 262.00,104.00
|
|
||||||
262.00,104.00 263.00,105.00 263.00,105.00
|
|
||||||
263.00,105.00 263.00,104.00 263.00,104.00 Z
|
|
||||||
M 16.00,108.00
|
|
||||||
C 16.00,108.00 15.00,108.00 15.00,108.00
|
|
||||||
15.00,108.00 16.00,109.00 16.00,109.00
|
|
||||||
16.00,109.00 16.00,108.00 16.00,108.00 Z
|
|
||||||
M 267.00,111.00
|
|
||||||
C 267.00,111.00 266.00,111.00 266.00,111.00
|
|
||||||
266.00,111.00 267.00,112.00 267.00,112.00
|
|
||||||
267.00,112.00 267.00,111.00 267.00,111.00 Z
|
|
||||||
M 13.00,113.00
|
|
||||||
C 13.00,113.00 12.00,113.00 12.00,113.00
|
|
||||||
12.00,113.00 13.00,114.00 13.00,114.00
|
|
||||||
13.00,114.00 13.00,113.00 13.00,113.00 Z
|
|
||||||
M 270.00,116.00
|
|
||||||
C 270.00,116.00 269.00,116.00 269.00,116.00
|
|
||||||
269.00,116.00 270.00,117.00 270.00,117.00
|
|
||||||
270.00,117.00 270.00,116.00 270.00,116.00 Z
|
|
||||||
M 271.00,118.00
|
|
||||||
C 271.00,118.00 270.00,118.00 270.00,118.00
|
|
||||||
270.00,118.00 271.00,119.00 271.00,119.00
|
|
||||||
271.00,119.00 271.00,118.00 271.00,118.00 Z
|
|
||||||
M 278.00,130.00
|
|
||||||
C 278.00,130.00 277.00,130.00 277.00,130.00
|
|
||||||
277.00,130.00 278.00,131.00 278.00,131.00
|
|
||||||
278.00,131.00 278.00,130.00 278.00,130.00 Z
|
|
||||||
M 2.00,132.00
|
|
||||||
C 2.00,132.00 1.00,132.00 1.00,132.00
|
|
||||||
1.00,132.00 2.00,133.00 2.00,133.00
|
|
||||||
2.00,133.00 2.00,132.00 2.00,132.00 Z
|
|
||||||
M 279.00,147.00
|
|
||||||
C 279.00,147.00 278.00,147.00 278.00,147.00
|
|
||||||
278.00,147.00 279.00,148.00 279.00,148.00
|
|
||||||
279.00,148.00 279.00,147.00 279.00,147.00 Z
|
|
||||||
M 8.00,157.00
|
|
||||||
C 8.00,157.00 7.00,157.00 7.00,157.00
|
|
||||||
7.00,157.00 8.00,158.00 8.00,158.00
|
|
||||||
8.00,158.00 8.00,157.00 8.00,157.00 Z
|
|
||||||
M 272.00,159.00
|
|
||||||
C 272.00,159.00 271.00,159.00 271.00,159.00
|
|
||||||
271.00,159.00 272.00,160.00 272.00,160.00
|
|
||||||
272.00,160.00 272.00,159.00 272.00,159.00 Z
|
|
||||||
M 12.00,164.00
|
|
||||||
C 12.00,164.00 11.00,164.00 11.00,164.00
|
|
||||||
11.00,164.00 12.00,165.00 12.00,165.00
|
|
||||||
12.00,165.00 12.00,164.00 12.00,164.00 Z
|
|
||||||
M 268.00,166.00
|
|
||||||
C 268.00,166.00 267.00,166.00 267.00,166.00
|
|
||||||
267.00,166.00 268.00,167.00 268.00,167.00
|
|
||||||
268.00,167.00 268.00,166.00 268.00,166.00 Z
|
|
||||||
M 23.00,183.00
|
|
||||||
C 23.00,183.00 22.00,183.00 22.00,183.00
|
|
||||||
22.00,183.00 23.00,184.00 23.00,184.00
|
|
||||||
23.00,184.00 23.00,183.00 23.00,183.00 Z
|
|
||||||
M 257.00,185.00
|
|
||||||
C 257.00,185.00 256.00,185.00 256.00,185.00
|
|
||||||
256.00,185.00 257.00,186.00 257.00,186.00
|
|
||||||
257.00,186.00 257.00,185.00 257.00,185.00 Z
|
|
||||||
M 27.00,190.00
|
|
||||||
C 27.00,190.00 26.00,190.00 26.00,190.00
|
|
||||||
26.00,190.00 27.00,191.00 27.00,191.00
|
|
||||||
27.00,191.00 27.00,190.00 27.00,190.00 Z
|
|
||||||
M 253.00,192.00
|
|
||||||
C 253.00,192.00 252.00,192.00 252.00,192.00
|
|
||||||
252.00,192.00 253.00,193.00 253.00,193.00
|
|
||||||
253.00,193.00 253.00,192.00 253.00,192.00 Z
|
|
||||||
M 31.00,197.00
|
|
||||||
C 31.00,197.00 30.00,197.00 30.00,197.00
|
|
||||||
30.00,197.00 31.00,198.00 31.00,198.00
|
|
||||||
31.00,198.00 31.00,197.00 31.00,197.00 Z
|
|
||||||
M 249.00,199.00
|
|
||||||
C 249.00,199.00 248.00,199.00 248.00,199.00
|
|
||||||
248.00,199.00 249.00,200.00 249.00,200.00
|
|
||||||
249.00,200.00 249.00,199.00 249.00,199.00 Z
|
|
||||||
M 245.00,206.00
|
|
||||||
C 245.00,206.00 244.00,206.00 244.00,206.00
|
|
||||||
244.00,206.00 245.00,207.00 245.00,207.00
|
|
||||||
245.00,207.00 245.00,206.00 245.00,206.00 Z
|
|
||||||
M 38.00,209.00
|
|
||||||
C 38.00,209.00 37.00,209.00 37.00,209.00
|
|
||||||
37.00,209.00 38.00,210.00 38.00,210.00
|
|
||||||
38.00,210.00 38.00,209.00 38.00,209.00 Z
|
|
||||||
M 242.00,211.00
|
|
||||||
C 242.00,211.00 241.00,211.00 241.00,211.00
|
|
||||||
241.00,211.00 242.00,212.00 242.00,212.00
|
|
||||||
242.00,212.00 242.00,211.00 242.00,211.00 Z
|
|
||||||
M 42.00,216.00
|
|
||||||
C 42.00,216.00 41.00,216.00 41.00,216.00
|
|
||||||
41.00,216.00 42.00,217.00 42.00,217.00
|
|
||||||
42.00,217.00 42.00,216.00 42.00,216.00 Z
|
|
||||||
M 238.00,218.00
|
|
||||||
C 238.00,218.00 237.00,218.00 237.00,218.00
|
|
||||||
237.00,218.00 238.00,219.00 238.00,219.00
|
|
||||||
238.00,219.00 238.00,218.00 238.00,218.00 Z
|
|
||||||
M 46.00,223.00
|
|
||||||
C 46.00,223.00 45.00,223.00 45.00,223.00
|
|
||||||
45.00,223.00 46.00,224.00 46.00,224.00
|
|
||||||
46.00,224.00 46.00,223.00 46.00,223.00 Z
|
|
||||||
M 53.00,235.00
|
|
||||||
C 53.00,235.00 52.00,235.00 52.00,235.00
|
|
||||||
52.00,235.00 53.00,236.00 53.00,236.00
|
|
||||||
53.00,236.00 53.00,235.00 53.00,235.00 Z
|
|
||||||
M 227.00,237.00
|
|
||||||
C 227.00,237.00 226.00,237.00 226.00,237.00
|
|
||||||
226.00,237.00 227.00,238.00 227.00,238.00
|
|
||||||
227.00,238.00 227.00,237.00 227.00,237.00 Z
|
|
||||||
M 57.00,242.00
|
|
||||||
C 57.00,242.00 56.00,242.00 56.00,242.00
|
|
||||||
56.00,242.00 57.00,243.00 57.00,243.00
|
|
||||||
57.00,243.00 57.00,242.00 57.00,242.00 Z
|
|
||||||
M 224.00,242.00
|
|
||||||
C 224.00,242.00 223.00,242.00 223.00,242.00
|
|
||||||
223.00,242.00 224.00,243.00 224.00,243.00
|
|
||||||
224.00,243.00 224.00,242.00 224.00,242.00 Z
|
|
||||||
M 223.00,244.00
|
|
||||||
C 223.00,244.00 222.00,244.00 222.00,244.00
|
|
||||||
222.00,244.00 223.00,245.00 223.00,245.00
|
|
||||||
223.00,245.00 223.00,244.00 223.00,244.00 Z
|
|
||||||
M 61.00,249.00
|
|
||||||
C 61.00,249.00 60.00,249.00 60.00,249.00
|
|
||||||
60.00,249.00 61.00,250.00 61.00,250.00
|
|
||||||
61.00,250.00 61.00,249.00 61.00,249.00 Z
|
|
||||||
M 64.00,254.00
|
|
||||||
C 64.00,254.00 63.00,254.00 63.00,254.00
|
|
||||||
63.00,254.00 64.00,255.00 64.00,255.00
|
|
||||||
64.00,255.00 64.00,254.00 64.00,254.00 Z
|
|
||||||
M 216.00,256.00
|
|
||||||
C 216.00,256.00 215.00,256.00 215.00,256.00
|
|
||||||
215.00,256.00 216.00,257.00 216.00,257.00
|
|
||||||
216.00,257.00 216.00,256.00 216.00,256.00 Z
|
|
||||||
M 67.00,259.00
|
|
||||||
C 67.00,259.00 66.00,259.00 66.00,259.00
|
|
||||||
66.00,259.00 67.00,260.00 67.00,260.00
|
|
||||||
67.00,260.00 67.00,259.00 67.00,259.00 Z
|
|
||||||
M 214.00,259.00
|
|
||||||
C 214.00,259.00 213.00,259.00 213.00,259.00
|
|
||||||
213.00,259.00 214.00,260.00 214.00,260.00
|
|
||||||
214.00,260.00 214.00,259.00 214.00,259.00 Z
|
|
||||||
M 213.00,260.00
|
|
||||||
C 213.00,260.00 212.00,260.00 212.00,260.00
|
|
||||||
212.00,260.00 213.00,261.00 213.00,261.00
|
|
||||||
213.00,261.00 213.00,260.00 213.00,260.00 Z
|
|
||||||
M 70.00,261.00
|
|
||||||
C 70.00,261.00 69.00,261.00 69.00,261.00
|
|
||||||
69.00,261.00 70.00,262.00 70.00,262.00
|
|
||||||
70.00,262.00 70.00,261.00 70.00,261.00 Z
|
|
||||||
M 211.00,261.00
|
|
||||||
C 211.00,261.00 210.00,261.00 210.00,261.00
|
|
||||||
210.00,261.00 211.00,262.00 211.00,262.00
|
|
||||||
211.00,262.00 211.00,261.00 211.00,261.00 Z
|
|
||||||
M 208.00,263.00
|
|
||||||
C 208.00,263.00 113.00,263.00 113.00,263.00
|
|
||||||
113.00,263.00 86.00,263.00 86.00,263.00
|
|
||||||
86.00,263.00 72.00,264.00 72.00,264.00
|
|
||||||
72.00,264.00 167.00,264.00 167.00,264.00
|
|
||||||
167.00,264.00 194.00,264.00 194.00,264.00
|
|
||||||
194.00,264.00 208.00,263.00 208.00,263.00 Z`,
|
|
||||||
],
|
|
||||||
iconName: "yyy",
|
|
||||||
prefix: "xxx",
|
|
||||||
} as never;
|
|
@ -1,300 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
interface ActivityData {
|
|
||||||
id: number;
|
|
||||||
user_id: number;
|
|
||||||
op_type: string;
|
|
||||||
act_user_id: number;
|
|
||||||
act_user: ActUser;
|
|
||||||
repo_id: number;
|
|
||||||
repo: Repo;
|
|
||||||
comment_id: number;
|
|
||||||
comment?: Comment;
|
|
||||||
ref_name: string;
|
|
||||||
is_private: boolean;
|
|
||||||
content: string;
|
|
||||||
created: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ActUser {
|
|
||||||
id: number;
|
|
||||||
login: string;
|
|
||||||
login_name: string;
|
|
||||||
source_id: number;
|
|
||||||
full_name: string;
|
|
||||||
email: string;
|
|
||||||
avatar_url: string;
|
|
||||||
html_url: string;
|
|
||||||
language: string;
|
|
||||||
is_admin: boolean;
|
|
||||||
last_login: string;
|
|
||||||
created: string;
|
|
||||||
restricted: boolean;
|
|
||||||
active: boolean;
|
|
||||||
prohibit_login: boolean;
|
|
||||||
location: string;
|
|
||||||
pronouns: string;
|
|
||||||
website: string;
|
|
||||||
description: string;
|
|
||||||
visibility: string;
|
|
||||||
followers_count: number;
|
|
||||||
following_count: number;
|
|
||||||
starred_repos_count: number;
|
|
||||||
username: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Repo {
|
|
||||||
id: number;
|
|
||||||
owner: Owner;
|
|
||||||
name: string;
|
|
||||||
full_name: string;
|
|
||||||
description: string;
|
|
||||||
empty: boolean;
|
|
||||||
private: boolean;
|
|
||||||
fork: boolean;
|
|
||||||
template: boolean;
|
|
||||||
parent: unknown;
|
|
||||||
mirror: boolean;
|
|
||||||
size: number;
|
|
||||||
language: string;
|
|
||||||
languages_url: string;
|
|
||||||
html_url: string;
|
|
||||||
url: string;
|
|
||||||
link: string;
|
|
||||||
ssh_url: string;
|
|
||||||
clone_url: string;
|
|
||||||
original_url: string;
|
|
||||||
website: string;
|
|
||||||
stars_count: number;
|
|
||||||
forks_count: number;
|
|
||||||
watchers_count: number;
|
|
||||||
open_issues_count: number;
|
|
||||||
open_pr_counter: number;
|
|
||||||
release_counter: number;
|
|
||||||
default_branch: string;
|
|
||||||
archived: boolean;
|
|
||||||
created_at: string;
|
|
||||||
updated_at: string;
|
|
||||||
archived_at: string;
|
|
||||||
permissions: Permissions;
|
|
||||||
has_issues: boolean;
|
|
||||||
external_tracker: ExternalTracker;
|
|
||||||
has_wiki: boolean;
|
|
||||||
wiki_branch: string;
|
|
||||||
globally_editable_wiki: boolean;
|
|
||||||
has_pull_requests: boolean;
|
|
||||||
has_projects: boolean;
|
|
||||||
has_releases: boolean;
|
|
||||||
has_packages: boolean;
|
|
||||||
has_actions: boolean;
|
|
||||||
ignore_whitespace_conflicts: boolean;
|
|
||||||
allow_merge_commits: boolean;
|
|
||||||
allow_rebase: boolean;
|
|
||||||
allow_rebase_explicit: boolean;
|
|
||||||
allow_squash_merge: boolean;
|
|
||||||
allow_fast_forward_only_merge: boolean;
|
|
||||||
allow_rebase_update: boolean;
|
|
||||||
default_delete_branch_after_merge: boolean;
|
|
||||||
default_merge_style: string;
|
|
||||||
default_allow_maintainer_edit: boolean;
|
|
||||||
avatar_url: string;
|
|
||||||
internal: boolean;
|
|
||||||
mirror_interval: string;
|
|
||||||
object_format_name: string;
|
|
||||||
mirror_updated: string;
|
|
||||||
repo_transfer: unknown;
|
|
||||||
topics: unknown;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Owner {
|
|
||||||
id: number;
|
|
||||||
login: string;
|
|
||||||
login_name: string;
|
|
||||||
source_id: number;
|
|
||||||
full_name: string;
|
|
||||||
email: string;
|
|
||||||
avatar_url: string;
|
|
||||||
html_url: string;
|
|
||||||
language: string;
|
|
||||||
is_admin: boolean;
|
|
||||||
last_login: string;
|
|
||||||
created: string;
|
|
||||||
restricted: boolean;
|
|
||||||
active: boolean;
|
|
||||||
prohibit_login: boolean;
|
|
||||||
location: string;
|
|
||||||
pronouns: string;
|
|
||||||
website: string;
|
|
||||||
description: string;
|
|
||||||
visibility: string;
|
|
||||||
followers_count: number;
|
|
||||||
following_count: number;
|
|
||||||
starred_repos_count: number;
|
|
||||||
username: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Permissions {
|
|
||||||
admin: boolean;
|
|
||||||
push: boolean;
|
|
||||||
pull: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ExternalTracker {
|
|
||||||
external_tracker_url: string;
|
|
||||||
external_tracker_format: string;
|
|
||||||
external_tracker_style: string;
|
|
||||||
external_tracker_regexp_pattern: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Comment {
|
|
||||||
id: number;
|
|
||||||
html_url: string;
|
|
||||||
pull_request_url: string;
|
|
||||||
issue_url: string;
|
|
||||||
user: unknown;
|
|
||||||
original_author: string;
|
|
||||||
original_author_id: number;
|
|
||||||
body: string;
|
|
||||||
assets: Array<unknown>;
|
|
||||||
created_at: string;
|
|
||||||
updated_at: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Issue {
|
|
||||||
id: number;
|
|
||||||
url: string;
|
|
||||||
html_url: string;
|
|
||||||
number: number;
|
|
||||||
user: Owner;
|
|
||||||
original_author: string;
|
|
||||||
original_author_id: number;
|
|
||||||
title: string;
|
|
||||||
body: string;
|
|
||||||
ref: string;
|
|
||||||
assets: Array<unknown>;
|
|
||||||
labels: Array<Label>;
|
|
||||||
milestone: unknown;
|
|
||||||
assignee: unknown;
|
|
||||||
assignees: unknown;
|
|
||||||
state: string;
|
|
||||||
is_locked: boolean;
|
|
||||||
comments: number;
|
|
||||||
created_at: string;
|
|
||||||
updated_at: string;
|
|
||||||
closed_at: unknown;
|
|
||||||
due_date: unknown;
|
|
||||||
pull_request?: PullRequest;
|
|
||||||
repository: Repo;
|
|
||||||
pin_order: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Label {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
exclusive: boolean;
|
|
||||||
is_archived: boolean;
|
|
||||||
color: string;
|
|
||||||
description: string;
|
|
||||||
url: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface PullRequest {
|
|
||||||
merged: boolean;
|
|
||||||
merged_at: unknown;
|
|
||||||
draft: boolean;
|
|
||||||
html_url: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
class Codeberg {
|
|
||||||
private activityCache: Array<ActivityData>;
|
|
||||||
private readonly issueCache: Array<Issue>;
|
|
||||||
private lastUpdate: Date | null = null;
|
|
||||||
public constructor() {
|
|
||||||
this.activityCache = [];
|
|
||||||
this.issueCache = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
public async getActivitiesWithCache(): Promise<Array<ActivityData>> {
|
|
||||||
// Stale after 6 hours
|
|
||||||
if (this.lastUpdate && Date.now()
|
|
||||||
- this.lastUpdate.getTime() < 6 * 60 * 60 * 1000) {
|
|
||||||
return this.activityCache;
|
|
||||||
}
|
|
||||||
return await this.getActivities().then(() => {
|
|
||||||
return this.activityCache;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/* istanbul ignore next -- @preserve */
|
|
||||||
public async getIssuesWithCache(): Promise<Array<Issue>> {
|
|
||||||
// Stale after 6 hours
|
|
||||||
if (this.lastUpdate && Date.now()
|
|
||||||
- this.lastUpdate.getTime() < 6 * 60 * 60 * 1000) {
|
|
||||||
return this.issueCache;
|
|
||||||
}
|
|
||||||
return await this.getIssues().then(() => {
|
|
||||||
return this.issueCache;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/* istanbul ignore next -- @preserve */
|
|
||||||
private async getIssues(): Promise<void> {
|
|
||||||
const repositoryRequest
|
|
||||||
= await fetch("https://codeberg.org/api/v1/orgs/nhcarrigan/repos");
|
|
||||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
||||||
const repositoryData = await repositoryRequest.json() as Array<Repo>;
|
|
||||||
for (const repo of repositoryData) {
|
|
||||||
const issueRequest
|
|
||||||
// eslint-disable-next-line no-await-in-loop
|
|
||||||
= await fetch(`https://codeberg.org/api/v1/repos/nhcarrigan/${repo.name}/issues`);
|
|
||||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions, no-await-in-loop
|
|
||||||
const issueData = await issueRequest.json() as Array<Issue>;
|
|
||||||
for (const issue of issueData) {
|
|
||||||
const isHelpWanted = issue.labels.some((label) => {
|
|
||||||
return label.name === "help wanted";
|
|
||||||
});
|
|
||||||
const isFirsstTimer = issue.labels.some((label) => {
|
|
||||||
return label.name === "good first issue";
|
|
||||||
});
|
|
||||||
if (isHelpWanted || isFirsstTimer) {
|
|
||||||
this.issueCache.push(issue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.lastUpdate = new Date();
|
|
||||||
}
|
|
||||||
|
|
||||||
private async getActivities(): Promise<void> {
|
|
||||||
const activityRequest = await
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
fetch("https://codeberg.org/api/v1/users/naomi-lgbt/activities/feeds?only-performed-by=true");
|
|
||||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
||||||
const activityData = await activityRequest.json() as Array<ActivityData>;
|
|
||||||
this.activityCache = activityData;
|
|
||||||
this.lastUpdate = new Date();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const instantiated = new Codeberg();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetches and caches the Codeberg activity.
|
|
||||||
* @returns An array of activity objects.
|
|
||||||
*/
|
|
||||||
const getCodebergActivty = async(): Promise<Array<ActivityData>> => {
|
|
||||||
return await instantiated.getActivitiesWithCache();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetches and caches the Codeberg issues.
|
|
||||||
* @returns An array of issue objects, filtered for help wanted and good first issues.
|
|
||||||
*/
|
|
||||||
const getCodebergIssues = async(): Promise<Array<Issue>> => {
|
|
||||||
/* istanbul ignore next -- @preserve */
|
|
||||||
return await instantiated.getIssuesWithCache();
|
|
||||||
};
|
|
||||||
|
|
||||||
export { getCodebergActivty, getCodebergIssues };
|
|
@ -1,733 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
interface ActivityData {
|
|
||||||
id: string;
|
|
||||||
type: string;
|
|
||||||
actor: Actor;
|
|
||||||
repo: Repo;
|
|
||||||
payload: Payload;
|
|
||||||
public: boolean;
|
|
||||||
created_at: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Actor {
|
|
||||||
id: number;
|
|
||||||
login: string;
|
|
||||||
display_login: string;
|
|
||||||
gravatar_id: string;
|
|
||||||
url: string;
|
|
||||||
avatar_url: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Repo {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
url: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Payload {
|
|
||||||
repository_id?: number;
|
|
||||||
push_id?: number;
|
|
||||||
size?: number;
|
|
||||||
distinct_size?: number;
|
|
||||||
ref?: string;
|
|
||||||
head?: string;
|
|
||||||
before?: string;
|
|
||||||
commits?: Array<Commit>;
|
|
||||||
ref_type?: string;
|
|
||||||
pusher_type?: string;
|
|
||||||
action?: string;
|
|
||||||
number?: number;
|
|
||||||
pull_request?: PullRequest;
|
|
||||||
review?: Review;
|
|
||||||
issue?: Issue2;
|
|
||||||
comment?: Comment;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Commit {
|
|
||||||
sha: string;
|
|
||||||
author: Author;
|
|
||||||
message: string;
|
|
||||||
distinct: boolean;
|
|
||||||
url: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Author {
|
|
||||||
email: string;
|
|
||||||
name: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface PullRequest {
|
|
||||||
url: string;
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
html_url: string;
|
|
||||||
diff_url: string;
|
|
||||||
patch_url: string;
|
|
||||||
issue_url: string;
|
|
||||||
number: number;
|
|
||||||
state: string;
|
|
||||||
locked: boolean;
|
|
||||||
title: string;
|
|
||||||
user: User;
|
|
||||||
body?: string;
|
|
||||||
created_at: string;
|
|
||||||
updated_at: string;
|
|
||||||
closed_at?: string;
|
|
||||||
merged_at?: string;
|
|
||||||
merge_commit_sha: string;
|
|
||||||
assignee: unknown;
|
|
||||||
assignees: Array<unknown>;
|
|
||||||
requested_reviewers: Array<unknown>;
|
|
||||||
requested_teams: Array<unknown>;
|
|
||||||
labels: Array<Label>;
|
|
||||||
milestone: unknown;
|
|
||||||
draft: boolean;
|
|
||||||
commits_url: string;
|
|
||||||
review_comments_url: string;
|
|
||||||
review_comment_url: string;
|
|
||||||
comments_url: string;
|
|
||||||
statuses_url: string;
|
|
||||||
head: Head;
|
|
||||||
base: Base;
|
|
||||||
_links: Links;
|
|
||||||
author_association: string;
|
|
||||||
auto_merge: unknown;
|
|
||||||
active_lock_reason: unknown;
|
|
||||||
merged?: boolean;
|
|
||||||
mergeable: unknown;
|
|
||||||
rebaseable: unknown;
|
|
||||||
mergeable_state?: string;
|
|
||||||
merged_by?: MergedBy;
|
|
||||||
comments?: number;
|
|
||||||
review_comments?: number;
|
|
||||||
maintainer_can_modify?: boolean;
|
|
||||||
commits?: number;
|
|
||||||
additions?: number;
|
|
||||||
deletions?: number;
|
|
||||||
changed_files?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface User {
|
|
||||||
login: string;
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
avatar_url: string;
|
|
||||||
gravatar_id: string;
|
|
||||||
url: string;
|
|
||||||
html_url: string;
|
|
||||||
followers_url: string;
|
|
||||||
following_url: string;
|
|
||||||
gists_url: string;
|
|
||||||
starred_url: string;
|
|
||||||
subscriptions_url: string;
|
|
||||||
organizations_url: string;
|
|
||||||
repos_url: string;
|
|
||||||
events_url: string;
|
|
||||||
received_events_url: string;
|
|
||||||
type: string;
|
|
||||||
site_admin: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Label {
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
url: string;
|
|
||||||
name: string;
|
|
||||||
color: string;
|
|
||||||
default: boolean;
|
|
||||||
description: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Head {
|
|
||||||
label: string;
|
|
||||||
ref: string;
|
|
||||||
sha: string;
|
|
||||||
user: User2;
|
|
||||||
repo: Repo2;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface User2 {
|
|
||||||
login: string;
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
avatar_url: string;
|
|
||||||
gravatar_id: string;
|
|
||||||
url: string;
|
|
||||||
html_url: string;
|
|
||||||
followers_url: string;
|
|
||||||
following_url: string;
|
|
||||||
gists_url: string;
|
|
||||||
starred_url: string;
|
|
||||||
subscriptions_url: string;
|
|
||||||
organizations_url: string;
|
|
||||||
repos_url: string;
|
|
||||||
events_url: string;
|
|
||||||
received_events_url: string;
|
|
||||||
type: string;
|
|
||||||
site_admin: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Repo2 {
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
name: string;
|
|
||||||
full_name: string;
|
|
||||||
private: boolean;
|
|
||||||
owner: Owner;
|
|
||||||
html_url: string;
|
|
||||||
description: string;
|
|
||||||
fork: boolean;
|
|
||||||
url: string;
|
|
||||||
forks_url: string;
|
|
||||||
keys_url: string;
|
|
||||||
collaborators_url: string;
|
|
||||||
teams_url: string;
|
|
||||||
hooks_url: string;
|
|
||||||
issue_events_url: string;
|
|
||||||
events_url: string;
|
|
||||||
assignees_url: string;
|
|
||||||
branches_url: string;
|
|
||||||
tags_url: string;
|
|
||||||
blobs_url: string;
|
|
||||||
git_tags_url: string;
|
|
||||||
git_refs_url: string;
|
|
||||||
trees_url: string;
|
|
||||||
statuses_url: string;
|
|
||||||
languages_url: string;
|
|
||||||
stargazers_url: string;
|
|
||||||
contributors_url: string;
|
|
||||||
subscribers_url: string;
|
|
||||||
subscription_url: string;
|
|
||||||
commits_url: string;
|
|
||||||
git_commits_url: string;
|
|
||||||
comments_url: string;
|
|
||||||
issue_comment_url: string;
|
|
||||||
contents_url: string;
|
|
||||||
compare_url: string;
|
|
||||||
merges_url: string;
|
|
||||||
archive_url: string;
|
|
||||||
downloads_url: string;
|
|
||||||
issues_url: string;
|
|
||||||
pulls_url: string;
|
|
||||||
milestones_url: string;
|
|
||||||
notifications_url: string;
|
|
||||||
labels_url: string;
|
|
||||||
releases_url: string;
|
|
||||||
deployments_url: string;
|
|
||||||
created_at: string;
|
|
||||||
updated_at: string;
|
|
||||||
pushed_at: string;
|
|
||||||
git_url: string;
|
|
||||||
ssh_url: string;
|
|
||||||
clone_url: string;
|
|
||||||
svn_url: string;
|
|
||||||
homepage: string;
|
|
||||||
size: number;
|
|
||||||
stargazers_count: number;
|
|
||||||
watchers_count: number;
|
|
||||||
language: string;
|
|
||||||
has_issues: boolean;
|
|
||||||
has_projects: boolean;
|
|
||||||
has_downloads: boolean;
|
|
||||||
has_wiki: boolean;
|
|
||||||
has_pages: boolean;
|
|
||||||
has_discussions: boolean;
|
|
||||||
forks_count: number;
|
|
||||||
mirror_url: unknown;
|
|
||||||
archived: boolean;
|
|
||||||
disabled: boolean;
|
|
||||||
open_issues_count: number;
|
|
||||||
license: License;
|
|
||||||
allow_forking: boolean;
|
|
||||||
is_template: boolean;
|
|
||||||
web_commit_signoff_required: boolean;
|
|
||||||
topics: Array<string>;
|
|
||||||
visibility: string;
|
|
||||||
forks: number;
|
|
||||||
open_issues: number;
|
|
||||||
watchers: number;
|
|
||||||
default_branch: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Owner {
|
|
||||||
login: string;
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
avatar_url: string;
|
|
||||||
gravatar_id: string;
|
|
||||||
url: string;
|
|
||||||
html_url: string;
|
|
||||||
followers_url: string;
|
|
||||||
following_url: string;
|
|
||||||
gists_url: string;
|
|
||||||
starred_url: string;
|
|
||||||
subscriptions_url: string;
|
|
||||||
organizations_url: string;
|
|
||||||
repos_url: string;
|
|
||||||
events_url: string;
|
|
||||||
received_events_url: string;
|
|
||||||
type: string;
|
|
||||||
site_admin: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface License {
|
|
||||||
key: string;
|
|
||||||
name: string;
|
|
||||||
spdx_id: string;
|
|
||||||
url: string;
|
|
||||||
node_id: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Base {
|
|
||||||
label: string;
|
|
||||||
ref: string;
|
|
||||||
sha: string;
|
|
||||||
user: User3;
|
|
||||||
repo: Repo3;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface User3 {
|
|
||||||
login: string;
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
avatar_url: string;
|
|
||||||
gravatar_id: string;
|
|
||||||
url: string;
|
|
||||||
html_url: string;
|
|
||||||
followers_url: string;
|
|
||||||
following_url: string;
|
|
||||||
gists_url: string;
|
|
||||||
starred_url: string;
|
|
||||||
subscriptions_url: string;
|
|
||||||
organizations_url: string;
|
|
||||||
repos_url: string;
|
|
||||||
events_url: string;
|
|
||||||
received_events_url: string;
|
|
||||||
type: string;
|
|
||||||
site_admin: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Repo3 {
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
name: string;
|
|
||||||
full_name: string;
|
|
||||||
private: boolean;
|
|
||||||
owner: Owner2;
|
|
||||||
html_url: string;
|
|
||||||
description: string;
|
|
||||||
fork: boolean;
|
|
||||||
url: string;
|
|
||||||
forks_url: string;
|
|
||||||
keys_url: string;
|
|
||||||
collaborators_url: string;
|
|
||||||
teams_url: string;
|
|
||||||
hooks_url: string;
|
|
||||||
issue_events_url: string;
|
|
||||||
events_url: string;
|
|
||||||
assignees_url: string;
|
|
||||||
branches_url: string;
|
|
||||||
tags_url: string;
|
|
||||||
blobs_url: string;
|
|
||||||
git_tags_url: string;
|
|
||||||
git_refs_url: string;
|
|
||||||
trees_url: string;
|
|
||||||
statuses_url: string;
|
|
||||||
languages_url: string;
|
|
||||||
stargazers_url: string;
|
|
||||||
contributors_url: string;
|
|
||||||
subscribers_url: string;
|
|
||||||
subscription_url: string;
|
|
||||||
commits_url: string;
|
|
||||||
git_commits_url: string;
|
|
||||||
comments_url: string;
|
|
||||||
issue_comment_url: string;
|
|
||||||
contents_url: string;
|
|
||||||
compare_url: string;
|
|
||||||
merges_url: string;
|
|
||||||
archive_url: string;
|
|
||||||
downloads_url: string;
|
|
||||||
issues_url: string;
|
|
||||||
pulls_url: string;
|
|
||||||
milestones_url: string;
|
|
||||||
notifications_url: string;
|
|
||||||
labels_url: string;
|
|
||||||
releases_url: string;
|
|
||||||
deployments_url: string;
|
|
||||||
created_at: string;
|
|
||||||
updated_at: string;
|
|
||||||
pushed_at: string;
|
|
||||||
git_url: string;
|
|
||||||
ssh_url: string;
|
|
||||||
clone_url: string;
|
|
||||||
svn_url: string;
|
|
||||||
homepage: string;
|
|
||||||
size: number;
|
|
||||||
stargazers_count: number;
|
|
||||||
watchers_count: number;
|
|
||||||
language: string;
|
|
||||||
has_issues: boolean;
|
|
||||||
has_projects: boolean;
|
|
||||||
has_downloads: boolean;
|
|
||||||
has_wiki: boolean;
|
|
||||||
has_pages: boolean;
|
|
||||||
has_discussions: boolean;
|
|
||||||
forks_count: number;
|
|
||||||
mirror_url: unknown;
|
|
||||||
archived: boolean;
|
|
||||||
disabled: boolean;
|
|
||||||
open_issues_count: number;
|
|
||||||
license: License2;
|
|
||||||
allow_forking: boolean;
|
|
||||||
is_template: boolean;
|
|
||||||
web_commit_signoff_required: boolean;
|
|
||||||
topics: Array<string>;
|
|
||||||
visibility: string;
|
|
||||||
forks: number;
|
|
||||||
open_issues: number;
|
|
||||||
watchers: number;
|
|
||||||
default_branch: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Owner2 {
|
|
||||||
login: string;
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
avatar_url: string;
|
|
||||||
gravatar_id: string;
|
|
||||||
url: string;
|
|
||||||
html_url: string;
|
|
||||||
followers_url: string;
|
|
||||||
following_url: string;
|
|
||||||
gists_url: string;
|
|
||||||
starred_url: string;
|
|
||||||
subscriptions_url: string;
|
|
||||||
organizations_url: string;
|
|
||||||
repos_url: string;
|
|
||||||
events_url: string;
|
|
||||||
received_events_url: string;
|
|
||||||
type: string;
|
|
||||||
site_admin: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface License2 {
|
|
||||||
key: string;
|
|
||||||
name: string;
|
|
||||||
spdx_id: string;
|
|
||||||
url: string;
|
|
||||||
node_id: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Links {
|
|
||||||
self: Self;
|
|
||||||
html: Html;
|
|
||||||
issue: Issue;
|
|
||||||
comments: Comments;
|
|
||||||
review_comments: ReviewComments;
|
|
||||||
review_comment: ReviewComment;
|
|
||||||
commits: Commits;
|
|
||||||
statuses: Statuses;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Self {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Html {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Issue {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Comments {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ReviewComments {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ReviewComment {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Commits {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Statuses {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface MergedBy {
|
|
||||||
login: string;
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
avatar_url: string;
|
|
||||||
gravatar_id: string;
|
|
||||||
url: string;
|
|
||||||
html_url: string;
|
|
||||||
followers_url: string;
|
|
||||||
following_url: string;
|
|
||||||
gists_url: string;
|
|
||||||
starred_url: string;
|
|
||||||
subscriptions_url: string;
|
|
||||||
organizations_url: string;
|
|
||||||
repos_url: string;
|
|
||||||
events_url: string;
|
|
||||||
received_events_url: string;
|
|
||||||
type: string;
|
|
||||||
site_admin: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Review {
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
user: User4;
|
|
||||||
body: unknown;
|
|
||||||
commit_id: string;
|
|
||||||
submitted_at: string;
|
|
||||||
state: string;
|
|
||||||
html_url: string;
|
|
||||||
pull_request_url: string;
|
|
||||||
author_association: string;
|
|
||||||
_links: Links2;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface User4 {
|
|
||||||
login: string;
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
avatar_url: string;
|
|
||||||
gravatar_id: string;
|
|
||||||
url: string;
|
|
||||||
html_url: string;
|
|
||||||
followers_url: string;
|
|
||||||
following_url: string;
|
|
||||||
gists_url: string;
|
|
||||||
starred_url: string;
|
|
||||||
subscriptions_url: string;
|
|
||||||
organizations_url: string;
|
|
||||||
repos_url: string;
|
|
||||||
events_url: string;
|
|
||||||
received_events_url: string;
|
|
||||||
type: string;
|
|
||||||
site_admin: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Links2 {
|
|
||||||
html: Html2;
|
|
||||||
pull_request: PullRequest2;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Html2 {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface PullRequest2 {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Issue2 {
|
|
||||||
url: string;
|
|
||||||
repository_url: string;
|
|
||||||
labels_url: string;
|
|
||||||
comments_url: string;
|
|
||||||
events_url: string;
|
|
||||||
html_url: string;
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
number: number;
|
|
||||||
title: string;
|
|
||||||
user: User5;
|
|
||||||
labels: Array<Label2>;
|
|
||||||
state: string;
|
|
||||||
locked: boolean;
|
|
||||||
assignee: unknown;
|
|
||||||
assignees: Array<unknown>;
|
|
||||||
milestone: unknown;
|
|
||||||
comments: number;
|
|
||||||
created_at: string;
|
|
||||||
updated_at: string;
|
|
||||||
closed_at?: string;
|
|
||||||
author_association: string;
|
|
||||||
active_lock_reason: unknown;
|
|
||||||
body: string;
|
|
||||||
reactions: Reactions;
|
|
||||||
timeline_url: string;
|
|
||||||
performed_via_github_app: unknown;
|
|
||||||
state_reason?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface User5 {
|
|
||||||
login: string;
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
avatar_url: string;
|
|
||||||
gravatar_id: string;
|
|
||||||
url: string;
|
|
||||||
html_url: string;
|
|
||||||
followers_url: string;
|
|
||||||
following_url: string;
|
|
||||||
gists_url: string;
|
|
||||||
starred_url: string;
|
|
||||||
subscriptions_url: string;
|
|
||||||
organizations_url: string;
|
|
||||||
repos_url: string;
|
|
||||||
events_url: string;
|
|
||||||
received_events_url: string;
|
|
||||||
type: string;
|
|
||||||
site_admin: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Label2 {
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
url: string;
|
|
||||||
name: string;
|
|
||||||
color: string;
|
|
||||||
default: boolean;
|
|
||||||
description: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Reactions {
|
|
||||||
"url": string;
|
|
||||||
"total_count": number;
|
|
||||||
"+1": number;
|
|
||||||
"-1": number;
|
|
||||||
"laugh": number;
|
|
||||||
"hooray": number;
|
|
||||||
"confused": number;
|
|
||||||
"heart": number;
|
|
||||||
"rocket": number;
|
|
||||||
"eyes": number;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Comment {
|
|
||||||
url: string;
|
|
||||||
html_url: string;
|
|
||||||
issue_url?: string;
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
user: User6;
|
|
||||||
created_at: string;
|
|
||||||
updated_at: string;
|
|
||||||
author_association: string;
|
|
||||||
body: string;
|
|
||||||
reactions: Reactions2;
|
|
||||||
performed_via_github_app: unknown;
|
|
||||||
pull_request_review_id?: number;
|
|
||||||
diff_hunk?: string;
|
|
||||||
path?: string;
|
|
||||||
commit_id?: string;
|
|
||||||
original_commit_id?: string;
|
|
||||||
pull_request_url?: string;
|
|
||||||
_links?: Links3;
|
|
||||||
start_line?: number;
|
|
||||||
original_start_line?: number;
|
|
||||||
start_side?: string;
|
|
||||||
line?: number;
|
|
||||||
original_line?: number;
|
|
||||||
side?: string;
|
|
||||||
in_reply_to_id?: number;
|
|
||||||
original_position?: number;
|
|
||||||
position?: number;
|
|
||||||
subject_type?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface User6 {
|
|
||||||
login: string;
|
|
||||||
id: number;
|
|
||||||
node_id: string;
|
|
||||||
avatar_url: string;
|
|
||||||
gravatar_id: string;
|
|
||||||
url: string;
|
|
||||||
html_url: string;
|
|
||||||
followers_url: string;
|
|
||||||
following_url: string;
|
|
||||||
gists_url: string;
|
|
||||||
starred_url: string;
|
|
||||||
subscriptions_url: string;
|
|
||||||
organizations_url: string;
|
|
||||||
repos_url: string;
|
|
||||||
events_url: string;
|
|
||||||
received_events_url: string;
|
|
||||||
type: string;
|
|
||||||
site_admin: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Reactions2 {
|
|
||||||
"url": string;
|
|
||||||
"total_count": number;
|
|
||||||
"+1": number;
|
|
||||||
"-1": number;
|
|
||||||
"laugh": number;
|
|
||||||
"hooray": number;
|
|
||||||
"confused": number;
|
|
||||||
"heart": number;
|
|
||||||
"rocket": number;
|
|
||||||
"eyes": number;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Links3 {
|
|
||||||
self: Self2;
|
|
||||||
html: Html3;
|
|
||||||
pull_request: PullRequest3;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Self2 {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Html3 {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface PullRequest3 {
|
|
||||||
href: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
class Github {
|
|
||||||
private cache: Array<ActivityData>;
|
|
||||||
private lastUpdate: Date | null = null;
|
|
||||||
public constructor() {
|
|
||||||
this.cache = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
public async getActivities(): Promise<Array<ActivityData>> {
|
|
||||||
// Stale after 1 hour
|
|
||||||
if (this.lastUpdate && Date.now()
|
|
||||||
- this.lastUpdate.getTime() < 60 * 60 * 1000) {
|
|
||||||
return this.cache;
|
|
||||||
}
|
|
||||||
return await this.refreshData().then(() => {
|
|
||||||
return this.cache;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private async refreshData(): Promise<Github> {
|
|
||||||
const response
|
|
||||||
= await fetch("https://api.github.com/users/naomi-lgbt/events");
|
|
||||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
||||||
const data = await response.json() as Array<ActivityData>;
|
|
||||||
this.cache = data;
|
|
||||||
this.lastUpdate = new Date();
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const instantiated = new Github();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetches and caches the Github activity.
|
|
||||||
* @returns An array of activity objects.
|
|
||||||
*/
|
|
||||||
export const getGithubData = async(): Promise<Array<ActivityData>> => {
|
|
||||||
return await instantiated.getActivities();
|
|
||||||
};
|
|
@ -1,100 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
/* eslint-disable new-cap */
|
|
||||||
import { NextResponse } from "next/server";
|
|
||||||
import { describe, it, expect, vi } from "vitest";
|
|
||||||
import { GET } from "../../../../src/app/api/activity/route";
|
|
||||||
import { getCodebergActivty } from "../../../../src/lib/codeberg";
|
|
||||||
import { getGithubData } from "../../../../src/lib/github";
|
|
||||||
|
|
||||||
vi.mock("../../../../src/lib/codeberg");
|
|
||||||
vi.mock("../../../../src/lib/github");
|
|
||||||
|
|
||||||
describe("gET /api/activity", () => {
|
|
||||||
it("should return a sorted and limited list of activities", async() => {
|
|
||||||
expect.assertions(2);
|
|
||||||
const mockCodebergData = [
|
|
||||||
{
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
op_type: "push",
|
|
||||||
repo: { full_name: "repo1", html_url: "https://codeberg.org/repo1" },
|
|
||||||
},
|
|
||||||
];
|
|
||||||
const mockGithubData = [
|
|
||||||
{
|
|
||||||
created_at: "2023-01-02T00:00:00Z",
|
|
||||||
repo: {
|
|
||||||
name: "repo2",
|
|
||||||
url: "https://api.github.com/repos/repo2",
|
|
||||||
},
|
|
||||||
type: "pull_request",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
vi.mocked(getCodebergActivty).mockResolvedValue(mockCodebergData);
|
|
||||||
vi.mocked(getGithubData).mockResolvedValue(mockGithubData);
|
|
||||||
|
|
||||||
const response = await GET();
|
|
||||||
const json = await response.json();
|
|
||||||
|
|
||||||
expect(response, "did not respond with Next").toBeInstanceOf(NextResponse);
|
|
||||||
expect(json, "incorrect payload").toStrictEqual([
|
|
||||||
{
|
|
||||||
date: "2023-01-02T00:00:00.000Z",
|
|
||||||
repo: "https://github.com/repo2",
|
|
||||||
repoName: "repo2",
|
|
||||||
type: "pull_request",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
date: "2023-01-01T00:00:00.000Z",
|
|
||||||
repo: "https://codeberg.org/repo1",
|
|
||||||
repoName: "repo1",
|
|
||||||
type: "push",
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should handle empty data from both sources", async() => {
|
|
||||||
expect.assertions(2);
|
|
||||||
vi.mocked(getCodebergActivty).mockResolvedValue([]);
|
|
||||||
vi.mocked(getGithubData).mockResolvedValue([]);
|
|
||||||
|
|
||||||
const response = await GET();
|
|
||||||
const json = await response.json();
|
|
||||||
|
|
||||||
expect(response, "did not use Next to respond").
|
|
||||||
toBeInstanceOf(NextResponse);
|
|
||||||
expect(json, "was not empty array").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should limit the results to 100 entries", async() => {
|
|
||||||
expect.assertions(2);
|
|
||||||
const mockCodebergData = Array.from({ length: 60 }, (_, index) => {
|
|
||||||
return {
|
|
||||||
created: `2023-01-${index + 1}T00:00:00Z`,
|
|
||||||
op_type: "push",
|
|
||||||
repo: { full_name: `repo${index + 1}`, html_url: `https://codeberg.org/repo${index + 1}` },
|
|
||||||
};
|
|
||||||
});
|
|
||||||
const mockGithubData = Array.from({ length: 60 }, (_, index) => {
|
|
||||||
return {
|
|
||||||
created_at: `2023-02-${index + 1}T00:00:00Z`,
|
|
||||||
repo: { name: `repo${index + 61}`, url: `https://api.github.com/repos/repo${index + 61}` },
|
|
||||||
type: "pull_request",
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
vi.mocked(getCodebergActivty).mockResolvedValue(mockCodebergData);
|
|
||||||
vi.mocked(getGithubData).mockResolvedValue(mockGithubData);
|
|
||||||
|
|
||||||
const response = await GET();
|
|
||||||
const json = await response.json();
|
|
||||||
|
|
||||||
expect(response, "did not use Next to respond").
|
|
||||||
toBeInstanceOf(NextResponse);
|
|
||||||
expect(json, "did not limit to 100 entries").toHaveLength(100);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,55 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
/* eslint-disable new-cap */
|
|
||||||
import { NextResponse } from "next/server";
|
|
||||||
import { describe, it, expect, vi } from "vitest";
|
|
||||||
import { GET } from "../../../../src/app/api/contribute/route";
|
|
||||||
import { getCodebergIssues } from "../../../../src/lib/codeberg";
|
|
||||||
|
|
||||||
vi.mock("../../../../src/lib/codeberg");
|
|
||||||
|
|
||||||
describe("gET /api/contribute", () => {
|
|
||||||
it("should return a sorted and limited list of activities", async() => {
|
|
||||||
expect.assertions(2);
|
|
||||||
const mockCodebergData = [
|
|
||||||
{
|
|
||||||
body: "body1",
|
|
||||||
html_url: "https://codeberg.org/repo1/issue1",
|
|
||||||
labels: [ { name: "label1" } ],
|
|
||||||
number: 1,
|
|
||||||
title: "issue1",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
vi.mocked(getCodebergIssues).mockResolvedValue(mockCodebergData);
|
|
||||||
|
|
||||||
const response = await GET();
|
|
||||||
const json = await response.json();
|
|
||||||
|
|
||||||
expect(response, "did not respond with Next").toBeInstanceOf(NextResponse);
|
|
||||||
expect(json, "incorrect payload").toStrictEqual([
|
|
||||||
{
|
|
||||||
body: "body1",
|
|
||||||
labels: [ "label1" ],
|
|
||||||
number: 1,
|
|
||||||
title: "issue1",
|
|
||||||
url: "https://codeberg.org/repo1/issue1",
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should handle empty data from both sources", async() => {
|
|
||||||
expect.assertions(2);
|
|
||||||
vi.mocked(getCodebergIssues).mockResolvedValue([]);
|
|
||||||
|
|
||||||
const response = await GET();
|
|
||||||
const json = await response.json();
|
|
||||||
|
|
||||||
expect(response, "did not use Next to respond").
|
|
||||||
toBeInstanceOf(NextResponse);
|
|
||||||
expect(json, "was not empty array").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,29 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Partners } from "../../src/config/Partners";
|
|
||||||
|
|
||||||
describe("partner objects", () => {
|
|
||||||
it("should have unique names", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
const set = new Set(
|
|
||||||
Partners.map((p) => {
|
|
||||||
return p.name;
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
expect(set, "are not unique").toHaveLength(Partners.length);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have unique avatars", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
const set = new Set(
|
|
||||||
Partners.map((p) => {
|
|
||||||
return p.avatar;
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
expect(set, "are not unique").toHaveLength(Partners.length);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,117 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import { faBriefcase, faMoneyBill } from "@fortawesome/free-solid-svg-icons";
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { HireMe, Donate, Socials } from "../../src/config/Socials";
|
|
||||||
|
|
||||||
describe("socials objects", () => {
|
|
||||||
it("should have unique labels", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
const set = new Set(
|
|
||||||
Socials.map((s) => {
|
|
||||||
return s.label;
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
expect(set, "are not unique").toHaveLength(Socials.length);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have unique links", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
const set = new Set(
|
|
||||||
Socials.map((s) => {
|
|
||||||
return s.link;
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
expect(set, "are not unique").toHaveLength(Socials.length);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have unique icons", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
const set = new Set(
|
|
||||||
Socials.map((s) => {
|
|
||||||
return s.icon;
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
expect(set, "are not unique").toHaveLength(Socials.length);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have hex codes for colours", () => {
|
|
||||||
expect.hasAssertions();
|
|
||||||
for (const social of Socials) {
|
|
||||||
expect(social.color, `${social.label} is not a hex code`).toMatch(/^#[\da-f]{6}$/i);
|
|
||||||
expect(social.background, `${social.label} is not a hex code`).toMatch(/^#[\da-f]{6}$/i);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("hire me object", () => {
|
|
||||||
it("should have correct label", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(HireMe.label, "does not").toBe("Hire Us!");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have correct link", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(HireMe.link, "does not").
|
|
||||||
toBe("https://docs.nhcarrigan.com/about/hire/");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have correct colours", () => {
|
|
||||||
expect.assertions(2);
|
|
||||||
expect(HireMe.color, "colour is wrong").toBe("#003600");
|
|
||||||
expect(HireMe.background, "background is wrong").toBe(`linear-gradient(
|
|
||||||
90deg,
|
|
||||||
#5bcefa,
|
|
||||||
#f5a9b8,
|
|
||||||
#ffffff,
|
|
||||||
#f5a9b8,
|
|
||||||
#5bcefa
|
|
||||||
)`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have correct icon", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(HireMe.icon, "does not").toBe(faBriefcase);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("donate object", () => {
|
|
||||||
it("should have correct label", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Donate.label, "does not").toBe("Donate 💜");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have correct link", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Donate.link, "does not").
|
|
||||||
toBe("https://docs.nhcarrigan.com/about/donate/");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have correct colours", () => {
|
|
||||||
expect.assertions(2);
|
|
||||||
expect(Donate.color, "has wrong colour").toBe("#003600");
|
|
||||||
expect(Donate.background, "has wrong background").toBe(`linear-gradient(
|
|
||||||
90deg,
|
|
||||||
rgba(255, 0, 0, 1) 0%,
|
|
||||||
rgba(251, 7, 217, 1) 10%,
|
|
||||||
rgba(186, 12, 248, 1) 20%,
|
|
||||||
rgba(95, 21, 242, 1) 30%,
|
|
||||||
rgba(28, 127, 238, 1) 40%,
|
|
||||||
rgba(47, 201, 226, 1) 50%,
|
|
||||||
rgba(63, 218, 216, 1) 60%,
|
|
||||||
rgba(79, 220, 74, 1) 70%,
|
|
||||||
rgba(208, 222, 33, 1) 80%,
|
|
||||||
rgba(255, 154, 0, 1) 90%,
|
|
||||||
rgba(255, 0, 0, 1) 100%
|
|
||||||
)`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have correct icon", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Donate.icon, "does not").toBe(faMoneyBill);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { TeamMembers } from "../../src/config/TeamMembers";
|
|
||||||
|
|
||||||
describe("partner objects", () => {
|
|
||||||
it("should have unique names", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
const set = new Set(
|
|
||||||
TeamMembers.map((t) => {
|
|
||||||
return t.name;
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
expect(set, "are not unique").toHaveLength(TeamMembers.length);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have unique avatars", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
const set = new Set(
|
|
||||||
TeamMembers.map((t) => {
|
|
||||||
return t.avatar;
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
expect(set, "are not unique").toHaveLength(TeamMembers.length);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have no future dates", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(TeamMembers.filter((t) => {
|
|
||||||
return new Date(t.joinDate) > new Date();
|
|
||||||
}), "have future dates").toHaveLength(0);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Codeberg } from "../../src/icons/Codeberg";
|
|
||||||
|
|
||||||
describe("codeberg icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Codeberg.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Codeberg.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Codeberg.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Codeberg.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Codeberg.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Coursera } from "../../src/icons/Coursera";
|
|
||||||
|
|
||||||
describe("coursera icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Coursera.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Coursera.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Coursera.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Coursera.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Coursera.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Fiverr } from "../../src/icons/Fiverr";
|
|
||||||
|
|
||||||
describe("fiverr icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Fiverr.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Fiverr.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Fiverr.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Fiverr.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Fiverr.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Gather } from "../../src/icons/Gather";
|
|
||||||
|
|
||||||
describe("gather icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gather.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gather.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gather.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gather.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gather.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Gog } from "../../src/icons/Gog";
|
|
||||||
|
|
||||||
describe("gog icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gog.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gog.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gog.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gog.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gog.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Gumroad } from "../../src/icons/Gumroad";
|
|
||||||
|
|
||||||
describe("gumroad icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gumroad.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gumroad.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gumroad.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gumroad.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Gumroad.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Kofi } from "../../src/icons/KoFi";
|
|
||||||
|
|
||||||
describe("kofi icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Kofi.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Kofi.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Kofi.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Kofi.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Kofi.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Matrix } from "../../src/icons/Matrix";
|
|
||||||
|
|
||||||
describe("matrix icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Matrix.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Matrix.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Matrix.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Matrix.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Matrix.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Peerlist } from "../../src/icons/Peerlist";
|
|
||||||
|
|
||||||
describe("peerlist icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Peerlist.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Peerlist.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Peerlist.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Peerlist.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Peerlist.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Pixiv } from "../../src/icons/Pixiv";
|
|
||||||
|
|
||||||
describe("pixiv icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Pixiv.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Pixiv.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Pixiv.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Pixiv.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Pixiv.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Polywork } from "../../src/icons/Polywork";
|
|
||||||
|
|
||||||
describe("polywork icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Polywork.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Polywork.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Polywork.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Polywork.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Polywork.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,39 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { RetroAchievements } from "../../src/icons/RetroAchievements";
|
|
||||||
|
|
||||||
describe("retroachievements icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(RetroAchievements.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(RetroAchievements.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(RetroAchievements.icon[2], "ligatures are present").
|
|
||||||
toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(RetroAchievements.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(RetroAchievements.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Saylor } from "../../src/icons/Saylor";
|
|
||||||
|
|
||||||
describe("saylor icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Saylor.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Saylor.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Saylor.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Saylor.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Saylor.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { TeeSpring } from "../../src/icons/TeeSpring";
|
|
||||||
|
|
||||||
describe("teespring icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(TeeSpring.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(TeeSpring.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(TeeSpring.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(TeeSpring.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(TeeSpring.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Throne } from "../../src/icons/Throne";
|
|
||||||
|
|
||||||
describe("throne icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Throne.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Throne.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Throne.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Throne.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Throne.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Topmate } from "../../src/icons/Topmate";
|
|
||||||
|
|
||||||
describe("topmate icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Topmate.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Topmate.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Topmate.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Topmate.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Topmate.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { TreeNation } from "../../src/icons/TreeNation";
|
|
||||||
|
|
||||||
describe("treenation icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(TreeNation.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(TreeNation.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(TreeNation.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(TreeNation.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(TreeNation.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { Udemy } from "../../src/icons/Udemy";
|
|
||||||
|
|
||||||
describe("udemy icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Udemy.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Udemy.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Udemy.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Udemy.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(Udemy.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { VRoid } from "../../src/icons/VRoid";
|
|
||||||
|
|
||||||
describe("vroid icon", () => {
|
|
||||||
it("should have a valid width", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(VRoid.icon[0], "width is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid height", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(VRoid.icon[1], "height is negative").toBeGreaterThan(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not have any ligatures", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(VRoid.icon[2], "ligatures are present").toStrictEqual([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have a valid unicode set", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(VRoid.icon[3], "unicode set is wrong").toBe("U+E002");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should have valid SVG path data", () => {
|
|
||||||
expect.assertions(1);
|
|
||||||
expect(VRoid.icon[4], "path data is bad").toMatch(
|
|
||||||
// eslint-disable-next-line stylistic/max-len
|
|
||||||
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,437 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
||||||
import { getCodebergActivty, getCodebergIssues } from "../../src/lib/codeberg";
|
|
||||||
|
|
||||||
describe("codeberg activity", () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
vi.resetAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should fetch and cache activities", async() => {
|
|
||||||
expect.assertions(1);
|
|
||||||
const mockResponse = [
|
|
||||||
{
|
|
||||||
act_user: {
|
|
||||||
active: true,
|
|
||||||
avatar_url: "https://example.com/avatar.png",
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
description: "Developer",
|
|
||||||
email: "naomi@example.com",
|
|
||||||
followers_count: 100,
|
|
||||||
following_count: 50,
|
|
||||||
full_name: "Naomi Carrigan",
|
|
||||||
html_url: "https://example.com",
|
|
||||||
id: 1,
|
|
||||||
is_admin: false,
|
|
||||||
language: "en",
|
|
||||||
last_login: "2023-01-01T00:00:00Z",
|
|
||||||
location: "Earth",
|
|
||||||
login: "naomi",
|
|
||||||
login_name: "naomi",
|
|
||||||
prohibit_login: false,
|
|
||||||
pronouns: "she/her",
|
|
||||||
restricted: false,
|
|
||||||
source_id: 1,
|
|
||||||
starred_repos_count: 10,
|
|
||||||
username: "naomi",
|
|
||||||
visibility: "public",
|
|
||||||
website: "https://example.com",
|
|
||||||
},
|
|
||||||
act_user_id: 1,
|
|
||||||
comment: {
|
|
||||||
assets: [],
|
|
||||||
body: "A comment",
|
|
||||||
created_at: "2023-01-01T00:00:00Z",
|
|
||||||
html_url: "https://example.com/comment",
|
|
||||||
id: 1,
|
|
||||||
issue_url: "https://example.com/issue",
|
|
||||||
original_author: "naomi",
|
|
||||||
original_author_id: 1,
|
|
||||||
pull_request_url: "https://example.com/pr",
|
|
||||||
updated_at: "2023-01-01T00:00:00Z",
|
|
||||||
user: null,
|
|
||||||
},
|
|
||||||
comment_id: 1,
|
|
||||||
content: "Activity content",
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
id: 1,
|
|
||||||
is_private: false,
|
|
||||||
op_type: "create",
|
|
||||||
ref_name: "main",
|
|
||||||
repo: {
|
|
||||||
allow_fast_forward_only_merge: false,
|
|
||||||
allow_merge_commits: true,
|
|
||||||
allow_rebase: true,
|
|
||||||
allow_rebase_explicit: true,
|
|
||||||
allow_rebase_update: true,
|
|
||||||
allow_squash_merge: true,
|
|
||||||
archived: false,
|
|
||||||
archived_at: "2023-01-01T00:00:00Z",
|
|
||||||
avatar_url: "https://example.com/avatar.png",
|
|
||||||
clone_url: "https://example.com/repo.git",
|
|
||||||
created_at: "2023-01-01T00:00:00Z",
|
|
||||||
default_allow_maintainer_edit: true,
|
|
||||||
default_branch: "main",
|
|
||||||
default_delete_branch_after_merge: true,
|
|
||||||
default_merge_style: "merge",
|
|
||||||
description: "A repository",
|
|
||||||
empty: false,
|
|
||||||
external_tracker: {
|
|
||||||
external_tracker_format: "format",
|
|
||||||
external_tracker_regexp_pattern: "pattern",
|
|
||||||
external_tracker_style: "style",
|
|
||||||
external_tracker_url: "https://example.com/tracker",
|
|
||||||
},
|
|
||||||
fork: false,
|
|
||||||
forks_count: 5,
|
|
||||||
full_name: "naomi/repo",
|
|
||||||
globally_editable_wiki: false,
|
|
||||||
has_actions: true,
|
|
||||||
has_issues: true,
|
|
||||||
has_packages: true,
|
|
||||||
has_projects: true,
|
|
||||||
has_pull_requests: true,
|
|
||||||
has_releases: true,
|
|
||||||
has_wiki: true,
|
|
||||||
html_url: "https://example.com/repo",
|
|
||||||
id: 1,
|
|
||||||
ignore_whitespace_conflicts: false,
|
|
||||||
internal: false,
|
|
||||||
language: "TypeScript",
|
|
||||||
languages_url: "https://example.com/languages",
|
|
||||||
link: "https://example.com/repo",
|
|
||||||
mirror: false,
|
|
||||||
mirror_interval: "24h",
|
|
||||||
mirror_updated: "2023-01-01T00:00:00Z",
|
|
||||||
name: "repo",
|
|
||||||
object_format_name: "format",
|
|
||||||
open_issues_count: 1,
|
|
||||||
open_pr_counter: 0,
|
|
||||||
original_url: "https://example.com/repo",
|
|
||||||
owner: {
|
|
||||||
active: true,
|
|
||||||
avatar_url: "https://example.com/avatar.png",
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
description: "Developer",
|
|
||||||
email: "naomi@example.com",
|
|
||||||
followers_count: 100,
|
|
||||||
following_count: 50,
|
|
||||||
full_name: "Naomi Carrigan",
|
|
||||||
html_url: "https://example.com",
|
|
||||||
id: 1,
|
|
||||||
is_admin: false,
|
|
||||||
language: "en",
|
|
||||||
last_login: "2023-01-01T00:00:00Z",
|
|
||||||
location: "Earth",
|
|
||||||
login: "naomi",
|
|
||||||
login_name: "naomi",
|
|
||||||
prohibit_login: false,
|
|
||||||
pronouns: "she/her",
|
|
||||||
restricted: false,
|
|
||||||
source_id: 1,
|
|
||||||
starred_repos_count: 10,
|
|
||||||
username: "naomi",
|
|
||||||
visibility: "public",
|
|
||||||
website: "https://example.com",
|
|
||||||
},
|
|
||||||
parent: null,
|
|
||||||
permissions: {
|
|
||||||
admin: true,
|
|
||||||
pull: true,
|
|
||||||
push: true,
|
|
||||||
},
|
|
||||||
private: false,
|
|
||||||
release_counter: 0,
|
|
||||||
repo_transfer: null,
|
|
||||||
size: 100,
|
|
||||||
ssh_url: "git@example.com:repo.git",
|
|
||||||
stars_count: 10,
|
|
||||||
template: false,
|
|
||||||
topics: [],
|
|
||||||
updated_at: "2023-01-01T00:00:00Z",
|
|
||||||
url: "https://example.com/repo",
|
|
||||||
watchers_count: 3,
|
|
||||||
website: "https://example.com",
|
|
||||||
wiki_branch: "main",
|
|
||||||
},
|
|
||||||
repo_id: 1,
|
|
||||||
user_id: 1,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
vi.spyOn(global, "fetch").mockResolvedValue({
|
|
||||||
json: () => {
|
|
||||||
return Promise.resolve(mockResponse);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const data = await getCodebergActivty();
|
|
||||||
expect(data, "did not have correct payload").
|
|
||||||
toStrictEqual(mockResponse);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should return cached data if not stale", async() => {
|
|
||||||
expect.assertions(3);
|
|
||||||
const mockResponse = [
|
|
||||||
{
|
|
||||||
act_user: {
|
|
||||||
active: true,
|
|
||||||
avatar_url: "https://example.com/avatar.png",
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
description: "Developer",
|
|
||||||
email: "naomi@example.com",
|
|
||||||
followers_count: 100,
|
|
||||||
following_count: 50,
|
|
||||||
full_name: "Naomi Carrigan",
|
|
||||||
html_url: "https://example.com",
|
|
||||||
id: 1,
|
|
||||||
is_admin: false,
|
|
||||||
language: "en",
|
|
||||||
last_login: "2023-01-01T00:00:00Z",
|
|
||||||
location: "Earth",
|
|
||||||
login: "naomi",
|
|
||||||
login_name: "naomi",
|
|
||||||
prohibit_login: false,
|
|
||||||
pronouns: "she/her",
|
|
||||||
restricted: false,
|
|
||||||
source_id: 1,
|
|
||||||
starred_repos_count: 10,
|
|
||||||
username: "naomi",
|
|
||||||
visibility: "public",
|
|
||||||
website: "https://example.com",
|
|
||||||
},
|
|
||||||
act_user_id: 1,
|
|
||||||
comment: {
|
|
||||||
assets: [],
|
|
||||||
body: "A comment",
|
|
||||||
created_at: "2023-01-01T00:00:00Z",
|
|
||||||
html_url: "https://example.com/comment",
|
|
||||||
id: 1,
|
|
||||||
issue_url: "https://example.com/issue",
|
|
||||||
original_author: "naomi",
|
|
||||||
original_author_id: 1,
|
|
||||||
pull_request_url: "https://example.com/pr",
|
|
||||||
updated_at: "2023-01-01T00:00:00Z",
|
|
||||||
user: null,
|
|
||||||
},
|
|
||||||
comment_id: 1,
|
|
||||||
content: "Activity content",
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
id: 1,
|
|
||||||
is_private: false,
|
|
||||||
op_type: "create",
|
|
||||||
ref_name: "main",
|
|
||||||
repo: {
|
|
||||||
allow_fast_forward_only_merge: false,
|
|
||||||
allow_merge_commits: true,
|
|
||||||
allow_rebase: true,
|
|
||||||
allow_rebase_explicit: true,
|
|
||||||
allow_rebase_update: true,
|
|
||||||
allow_squash_merge: true,
|
|
||||||
archived: false,
|
|
||||||
archived_at: "2023-01-01T00:00:00Z",
|
|
||||||
avatar_url: "https://example.com/avatar.png",
|
|
||||||
clone_url: "https://example.com/repo.git",
|
|
||||||
created_at: "2023-01-01T00:00:00Z",
|
|
||||||
default_allow_maintainer_edit: true,
|
|
||||||
default_branch: "main",
|
|
||||||
default_delete_branch_after_merge: true,
|
|
||||||
default_merge_style: "merge",
|
|
||||||
description: "A repository",
|
|
||||||
empty: false,
|
|
||||||
external_tracker: {
|
|
||||||
external_tracker_format: "format",
|
|
||||||
external_tracker_regexp_pattern: "pattern",
|
|
||||||
external_tracker_style: "style",
|
|
||||||
external_tracker_url: "https://example.com/tracker",
|
|
||||||
},
|
|
||||||
fork: false,
|
|
||||||
forks_count: 5,
|
|
||||||
full_name: "naomi/repo",
|
|
||||||
globally_editable_wiki: false,
|
|
||||||
has_actions: true,
|
|
||||||
has_issues: true,
|
|
||||||
has_packages: true,
|
|
||||||
has_projects: true,
|
|
||||||
has_pull_requests: true,
|
|
||||||
has_releases: true,
|
|
||||||
has_wiki: true,
|
|
||||||
html_url: "https://example.com/repo",
|
|
||||||
id: 1,
|
|
||||||
ignore_whitespace_conflicts: false,
|
|
||||||
internal: false,
|
|
||||||
language: "TypeScript",
|
|
||||||
languages_url: "https://example.com/languages",
|
|
||||||
link: "https://example.com/repo",
|
|
||||||
mirror: false,
|
|
||||||
mirror_interval: "24h",
|
|
||||||
mirror_updated: "2023-01-01T00:00:00Z",
|
|
||||||
name: "repo",
|
|
||||||
object_format_name: "format",
|
|
||||||
open_issues_count: 1,
|
|
||||||
open_pr_counter: 0,
|
|
||||||
original_url: "https://example.com/repo",
|
|
||||||
owner: {
|
|
||||||
active: true,
|
|
||||||
avatar_url: "https://example.com/avatar.png",
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
description: "Developer",
|
|
||||||
email: "naomi@example.com",
|
|
||||||
followers_count: 100,
|
|
||||||
following_count: 50,
|
|
||||||
full_name: "Naomi Carrigan",
|
|
||||||
html_url: "https://example.com",
|
|
||||||
id: 1,
|
|
||||||
is_admin: false,
|
|
||||||
language: "en",
|
|
||||||
last_login: "2023-01-01T00:00:00Z",
|
|
||||||
location: "Earth",
|
|
||||||
login: "naomi",
|
|
||||||
login_name: "naomi",
|
|
||||||
prohibit_login: false,
|
|
||||||
pronouns: "she/her",
|
|
||||||
restricted: false,
|
|
||||||
source_id: 1,
|
|
||||||
starred_repos_count: 10,
|
|
||||||
username: "naomi",
|
|
||||||
visibility: "public",
|
|
||||||
website: "https://example.com",
|
|
||||||
},
|
|
||||||
parent: null,
|
|
||||||
permissions: {
|
|
||||||
admin: true,
|
|
||||||
pull: true,
|
|
||||||
push: true,
|
|
||||||
},
|
|
||||||
private: false,
|
|
||||||
release_counter: 0,
|
|
||||||
repo_transfer: null,
|
|
||||||
size: 100,
|
|
||||||
ssh_url: "git@example.com:repo.git",
|
|
||||||
stars_count: 10,
|
|
||||||
template: false,
|
|
||||||
topics: [],
|
|
||||||
updated_at: "2023-01-01T00:00:00Z",
|
|
||||||
url: "https://example.com/repo",
|
|
||||||
watchers_count: 3,
|
|
||||||
website: "https://example.com",
|
|
||||||
wiki_branch: "main",
|
|
||||||
},
|
|
||||||
repo_id: 1,
|
|
||||||
user_id: 1,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
vi.spyOn(global, "fetch").mockResolvedValue({
|
|
||||||
json: () => {
|
|
||||||
return Promise.resolve(mockResponse);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const data = await getCodebergActivty();
|
|
||||||
expect(data, "did not have correct payload").
|
|
||||||
toStrictEqual(mockResponse);
|
|
||||||
|
|
||||||
// Call again to check if cached data is returned
|
|
||||||
const cachedData = await getCodebergActivty();
|
|
||||||
expect(cachedData, "did not cache correct payload").
|
|
||||||
toStrictEqual(mockResponse);
|
|
||||||
expect(global.fetch, "did not hit cache").not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe.todo("codeberg issues", () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
vi.resetAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should fetch and cache issues", async() => {
|
|
||||||
expect.assertions(1);
|
|
||||||
const mockResponse = [
|
|
||||||
{
|
|
||||||
assignee: null,
|
|
||||||
assignees: [],
|
|
||||||
body: "Issue body",
|
|
||||||
closed_at: null,
|
|
||||||
comments: 0,
|
|
||||||
comments_url: "https://example.com/comments",
|
|
||||||
created_at: "2023-01-01T00:00:00Z",
|
|
||||||
html_url: "https://example.com/issue",
|
|
||||||
id: 1,
|
|
||||||
labels: [ { name: "good first issue" } ],
|
|
||||||
milestone: null,
|
|
||||||
number: 1,
|
|
||||||
original_author: "naomi",
|
|
||||||
original_author_id: 1,
|
|
||||||
pull_request: null,
|
|
||||||
state: "open",
|
|
||||||
title: "Issue title",
|
|
||||||
updated_at: "2023-01-01T00:00:00Z",
|
|
||||||
user: null,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
vi.spyOn(global, "fetch").mockResolvedValueOnce({
|
|
||||||
json: () => {
|
|
||||||
return Promise.resolve([ { name: "mock repo" } ]);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
vi.spyOn(global, "fetch").mockResolvedValueOnce({
|
|
||||||
json: () => {
|
|
||||||
return Promise.resolve(mockResponse);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const data = await getCodebergIssues();
|
|
||||||
expect(data, "did not have correct payload").
|
|
||||||
toStrictEqual(mockResponse);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should return cached data if not stale", async() => {
|
|
||||||
expect.assertions(3);
|
|
||||||
const mockResponse = [
|
|
||||||
{
|
|
||||||
assignee: null,
|
|
||||||
assignees: [],
|
|
||||||
body: "Issue body",
|
|
||||||
closed_at: null,
|
|
||||||
comments: 0,
|
|
||||||
comments_url: "https://example.com/comments",
|
|
||||||
created_at: "2023-01-01T00:00:00Z",
|
|
||||||
html_url: "https://example.com/issue",
|
|
||||||
id: 1,
|
|
||||||
labels: [ { name: "good first issue" } ],
|
|
||||||
milestone: null,
|
|
||||||
number: 1,
|
|
||||||
original_author: "naomi",
|
|
||||||
original_author_id: 1,
|
|
||||||
pull_request: null,
|
|
||||||
state: "open",
|
|
||||||
title: "Issue title",
|
|
||||||
updated_at: "2023-01-01T00:00:00Z",
|
|
||||||
user: null,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
vi.spyOn(global, "fetch").mockResolvedValue({
|
|
||||||
json: () => {
|
|
||||||
return Promise.resolve(mockResponse);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const data = await getCodebergIssues();
|
|
||||||
expect(data, "did not have correct payload").
|
|
||||||
toStrictEqual(mockResponse);
|
|
||||||
|
|
||||||
// Call again to check if cached data is returned
|
|
||||||
const cachedData = await getCodebergActivty();
|
|
||||||
expect(cachedData, "did not cache correct payload").
|
|
||||||
toStrictEqual(mockResponse);
|
|
||||||
expect(global.fetch, "did not hit cache").not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,343 +0,0 @@
|
|||||||
/**
|
|
||||||
* @copyright nhcarrigan
|
|
||||||
* @license Naomi's Public License
|
|
||||||
* @author Naomi Carrigan
|
|
||||||
*/
|
|
||||||
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
||||||
import { getGithubData } from "../../src/lib/github";
|
|
||||||
|
|
||||||
describe("github", () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
vi.resetAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should fetch and cache activities", async() => {
|
|
||||||
expect.assertions(1);
|
|
||||||
const mockResponse = [
|
|
||||||
{
|
|
||||||
act_user: {
|
|
||||||
active: true,
|
|
||||||
avatar_url: "https://example.com/avatar.png",
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
description: "Developer",
|
|
||||||
email: "naomi@example.com",
|
|
||||||
followers_count: 100,
|
|
||||||
following_count: 50,
|
|
||||||
full_name: "Naomi Carrigan",
|
|
||||||
html_url: "https://example.com",
|
|
||||||
id: 1,
|
|
||||||
is_admin: false,
|
|
||||||
language: "en",
|
|
||||||
last_login: "2023-01-01T00:00:00Z",
|
|
||||||
location: "Earth",
|
|
||||||
login: "naomi",
|
|
||||||
login_name: "naomi",
|
|
||||||
prohibit_login: false,
|
|
||||||
pronouns: "she/her",
|
|
||||||
restricted: false,
|
|
||||||
source_id: 1,
|
|
||||||
starred_repos_count: 10,
|
|
||||||
username: "naomi",
|
|
||||||
visibility: "public",
|
|
||||||
website: "https://example.com",
|
|
||||||
},
|
|
||||||
act_user_id: 1,
|
|
||||||
comment: {
|
|
||||||
assets: [],
|
|
||||||
body: "A comment",
|
|
||||||
created_at: "2023-01-01T00:00:00Z",
|
|
||||||
html_url: "https://example.com/comment",
|
|
||||||
id: 1,
|
|
||||||
issue_url: "https://example.com/issue",
|
|
||||||
original_author: "naomi",
|
|
||||||
original_author_id: 1,
|
|
||||||
pull_request_url: "https://example.com/pr",
|
|
||||||
updated_at: "2023-01-01T00:00:00Z",
|
|
||||||
user: null,
|
|
||||||
},
|
|
||||||
comment_id: 1,
|
|
||||||
content: "Activity content",
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
id: 1,
|
|
||||||
is_private: false,
|
|
||||||
op_type: "create",
|
|
||||||
ref_name: "main",
|
|
||||||
repo: {
|
|
||||||
allow_fast_forward_only_merge: false,
|
|
||||||
allow_merge_commits: true,
|
|
||||||
allow_rebase: true,
|
|
||||||
allow_rebase_explicit: true,
|
|
||||||
allow_rebase_update: true,
|
|
||||||
allow_squash_merge: true,
|
|
||||||
archived: false,
|
|
||||||
archived_at: "2023-01-01T00:00:00Z",
|
|
||||||
avatar_url: "https://example.com/avatar.png",
|
|
||||||
clone_url: "https://example.com/repo.git",
|
|
||||||
created_at: "2023-01-01T00:00:00Z",
|
|
||||||
default_allow_maintainer_edit: true,
|
|
||||||
default_branch: "main",
|
|
||||||
default_delete_branch_after_merge: true,
|
|
||||||
default_merge_style: "merge",
|
|
||||||
description: "A repository",
|
|
||||||
empty: false,
|
|
||||||
external_tracker: {
|
|
||||||
external_tracker_format: "format",
|
|
||||||
external_tracker_regexp_pattern: "pattern",
|
|
||||||
external_tracker_style: "style",
|
|
||||||
external_tracker_url: "https://example.com/tracker",
|
|
||||||
},
|
|
||||||
fork: false,
|
|
||||||
forks_count: 5,
|
|
||||||
full_name: "naomi/repo",
|
|
||||||
globally_editable_wiki: false,
|
|
||||||
has_actions: true,
|
|
||||||
has_issues: true,
|
|
||||||
has_packages: true,
|
|
||||||
has_projects: true,
|
|
||||||
has_pull_requests: true,
|
|
||||||
has_releases: true,
|
|
||||||
has_wiki: true,
|
|
||||||
html_url: "https://example.com/repo",
|
|
||||||
id: 1,
|
|
||||||
ignore_whitespace_conflicts: false,
|
|
||||||
internal: false,
|
|
||||||
language: "TypeScript",
|
|
||||||
languages_url: "https://example.com/languages",
|
|
||||||
link: "https://example.com/repo",
|
|
||||||
mirror: false,
|
|
||||||
mirror_interval: "24h",
|
|
||||||
mirror_updated: "2023-01-01T00:00:00Z",
|
|
||||||
name: "repo",
|
|
||||||
object_format_name: "format",
|
|
||||||
open_issues_count: 1,
|
|
||||||
open_pr_counter: 0,
|
|
||||||
original_url: "https://example.com/repo",
|
|
||||||
owner: {
|
|
||||||
active: true,
|
|
||||||
avatar_url: "https://example.com/avatar.png",
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
description: "Developer",
|
|
||||||
email: "naomi@example.com",
|
|
||||||
followers_count: 100,
|
|
||||||
following_count: 50,
|
|
||||||
full_name: "Naomi Carrigan",
|
|
||||||
html_url: "https://example.com",
|
|
||||||
id: 1,
|
|
||||||
is_admin: false,
|
|
||||||
language: "en",
|
|
||||||
last_login: "2023-01-01T00:00:00Z",
|
|
||||||
location: "Earth",
|
|
||||||
login: "naomi",
|
|
||||||
login_name: "naomi",
|
|
||||||
prohibit_login: false,
|
|
||||||
pronouns: "she/her",
|
|
||||||
restricted: false,
|
|
||||||
source_id: 1,
|
|
||||||
starred_repos_count: 10,
|
|
||||||
username: "naomi",
|
|
||||||
visibility: "public",
|
|
||||||
website: "https://example.com",
|
|
||||||
},
|
|
||||||
parent: null,
|
|
||||||
permissions: {
|
|
||||||
admin: true,
|
|
||||||
pull: true,
|
|
||||||
push: true,
|
|
||||||
},
|
|
||||||
private: false,
|
|
||||||
release_counter: 0,
|
|
||||||
repo_transfer: null,
|
|
||||||
size: 100,
|
|
||||||
ssh_url: "git@example.com:repo.git",
|
|
||||||
stars_count: 10,
|
|
||||||
template: false,
|
|
||||||
topics: [],
|
|
||||||
updated_at: "2023-01-01T00:00:00Z",
|
|
||||||
url: "https://example.com/repo",
|
|
||||||
watchers_count: 3,
|
|
||||||
website: "https://example.com",
|
|
||||||
wiki_branch: "main",
|
|
||||||
},
|
|
||||||
repo_id: 1,
|
|
||||||
user_id: 1,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
vi.spyOn(global, "fetch").mockResolvedValue({
|
|
||||||
json: () => {
|
|
||||||
return Promise.resolve(mockResponse);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const data = await getGithubData();
|
|
||||||
expect(data, "did not have correct payload").toStrictEqual(mockResponse);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should return cached data if not stale", async() => {
|
|
||||||
expect.assertions(3);
|
|
||||||
const mockResponse = [
|
|
||||||
{
|
|
||||||
act_user: {
|
|
||||||
active: true,
|
|
||||||
avatar_url: "https://example.com/avatar.png",
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
description: "Developer",
|
|
||||||
email: "naomi@example.com",
|
|
||||||
followers_count: 100,
|
|
||||||
following_count: 50,
|
|
||||||
full_name: "Naomi Carrigan",
|
|
||||||
html_url: "https://example.com",
|
|
||||||
id: 1,
|
|
||||||
is_admin: false,
|
|
||||||
language: "en",
|
|
||||||
last_login: "2023-01-01T00:00:00Z",
|
|
||||||
location: "Earth",
|
|
||||||
login: "naomi",
|
|
||||||
login_name: "naomi",
|
|
||||||
prohibit_login: false,
|
|
||||||
pronouns: "she/her",
|
|
||||||
restricted: false,
|
|
||||||
source_id: 1,
|
|
||||||
starred_repos_count: 10,
|
|
||||||
username: "naomi",
|
|
||||||
visibility: "public",
|
|
||||||
website: "https://example.com",
|
|
||||||
},
|
|
||||||
act_user_id: 1,
|
|
||||||
comment: {
|
|
||||||
assets: [],
|
|
||||||
body: "A comment",
|
|
||||||
created_at: "2023-01-01T00:00:00Z",
|
|
||||||
html_url: "https://example.com/comment",
|
|
||||||
id: 1,
|
|
||||||
issue_url: "https://example.com/issue",
|
|
||||||
original_author: "naomi",
|
|
||||||
original_author_id: 1,
|
|
||||||
pull_request_url: "https://example.com/pr",
|
|
||||||
updated_at: "2023-01-01T00:00:00Z",
|
|
||||||
user: null,
|
|
||||||
},
|
|
||||||
comment_id: 1,
|
|
||||||
content: "Activity content",
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
id: 1,
|
|
||||||
is_private: false,
|
|
||||||
op_type: "create",
|
|
||||||
ref_name: "main",
|
|
||||||
repo: {
|
|
||||||
allow_fast_forward_only_merge: false,
|
|
||||||
allow_merge_commits: true,
|
|
||||||
allow_rebase: true,
|
|
||||||
allow_rebase_explicit: true,
|
|
||||||
allow_rebase_update: true,
|
|
||||||
allow_squash_merge: true,
|
|
||||||
archived: false,
|
|
||||||
archived_at: "2023-01-01T00:00:00Z",
|
|
||||||
avatar_url: "https://example.com/avatar.png",
|
|
||||||
clone_url: "https://example.com/repo.git",
|
|
||||||
created_at: "2023-01-01T00:00:00Z",
|
|
||||||
default_allow_maintainer_edit: true,
|
|
||||||
default_branch: "main",
|
|
||||||
default_delete_branch_after_merge: true,
|
|
||||||
default_merge_style: "merge",
|
|
||||||
description: "A repository",
|
|
||||||
empty: false,
|
|
||||||
external_tracker: {
|
|
||||||
external_tracker_format: "format",
|
|
||||||
external_tracker_regexp_pattern: "pattern",
|
|
||||||
external_tracker_style: "style",
|
|
||||||
external_tracker_url: "https://example.com/tracker",
|
|
||||||
},
|
|
||||||
fork: false,
|
|
||||||
forks_count: 5,
|
|
||||||
full_name: "naomi/repo",
|
|
||||||
globally_editable_wiki: false,
|
|
||||||
has_actions: true,
|
|
||||||
has_issues: true,
|
|
||||||
has_packages: true,
|
|
||||||
has_projects: true,
|
|
||||||
has_pull_requests: true,
|
|
||||||
has_releases: true,
|
|
||||||
has_wiki: true,
|
|
||||||
html_url: "https://example.com/repo",
|
|
||||||
id: 1,
|
|
||||||
ignore_whitespace_conflicts: false,
|
|
||||||
internal: false,
|
|
||||||
language: "TypeScript",
|
|
||||||
languages_url: "https://example.com/languages",
|
|
||||||
link: "https://example.com/repo",
|
|
||||||
mirror: false,
|
|
||||||
mirror_interval: "24h",
|
|
||||||
mirror_updated: "2023-01-01T00:00:00Z",
|
|
||||||
name: "repo",
|
|
||||||
object_format_name: "format",
|
|
||||||
open_issues_count: 1,
|
|
||||||
open_pr_counter: 0,
|
|
||||||
original_url: "https://example.com/repo",
|
|
||||||
owner: {
|
|
||||||
active: true,
|
|
||||||
avatar_url: "https://example.com/avatar.png",
|
|
||||||
created: "2023-01-01T00:00:00Z",
|
|
||||||
description: "Developer",
|
|
||||||
email: "naomi@example.com",
|
|
||||||
followers_count: 100,
|
|
||||||
following_count: 50,
|
|
||||||
full_name: "Naomi Carrigan",
|
|
||||||
html_url: "https://example.com",
|
|
||||||
id: 1,
|
|
||||||
is_admin: false,
|
|
||||||
language: "en",
|
|
||||||
last_login: "2023-01-01T00:00:00Z",
|
|
||||||
location: "Earth",
|
|
||||||
login: "naomi",
|
|
||||||
login_name: "naomi",
|
|
||||||
prohibit_login: false,
|
|
||||||
pronouns: "she/her",
|
|
||||||
restricted: false,
|
|
||||||
source_id: 1,
|
|
||||||
starred_repos_count: 10,
|
|
||||||
username: "naomi",
|
|
||||||
visibility: "public",
|
|
||||||
website: "https://example.com",
|
|
||||||
},
|
|
||||||
parent: null,
|
|
||||||
permissions: {
|
|
||||||
admin: true,
|
|
||||||
pull: true,
|
|
||||||
push: true,
|
|
||||||
},
|
|
||||||
private: false,
|
|
||||||
release_counter: 0,
|
|
||||||
repo_transfer: null,
|
|
||||||
size: 100,
|
|
||||||
ssh_url: "git@example.com:repo.git",
|
|
||||||
stars_count: 10,
|
|
||||||
template: false,
|
|
||||||
topics: [],
|
|
||||||
updated_at: "2023-01-01T00:00:00Z",
|
|
||||||
url: "https://example.com/repo",
|
|
||||||
watchers_count: 3,
|
|
||||||
website: "https://example.com",
|
|
||||||
wiki_branch: "main",
|
|
||||||
},
|
|
||||||
repo_id: 1,
|
|
||||||
user_id: 1,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
vi.spyOn(global, "fetch").mockResolvedValue({
|
|
||||||
json: () => {
|
|
||||||
return Promise.resolve(mockResponse);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const data = await getGithubData();
|
|
||||||
expect(data, "did not have correct payload").toStrictEqual(mockResponse);
|
|
||||||
|
|
||||||
// Call again to check if cached data is returned
|
|
||||||
const cachedData = await getGithubData();
|
|
||||||
expect(cachedData, "did not cache correct payload").
|
|
||||||
toStrictEqual(mockResponse);
|
|
||||||
expect(global.fetch, "did not hit cache").not.toHaveBeenCalled();
|
|
||||||
});
|
|
||||||
});
|
|
Loading…
x
Reference in New Issue
Block a user