Removed old landing page and docusaurus TODO list
19
TODO.md
@@ -1,19 +0,0 @@
|
||||
TODO:
|
||||
* Design/Styling
|
||||
* ~~drawio/svg cleanup~~
|
||||
* ~~use cases~~
|
||||
* ~~math in SVGs~~ (Needed an update of local drawio)
|
||||
* social card
|
||||
* review
|
||||
* ~~deployment flow~~
|
||||
* ~~old links? https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-client-redirects~~
|
||||
* ~~e.g. https://docs.tlsnotary.org/faq.html -> /docs/faq~~
|
||||
* README
|
||||
* ~~Matomo tracking: https://github.com/karser/docusaurus-plugin-matomo/tree/main ~~
|
||||
* check links
|
||||
* ~~dark/light theme diagrams~~
|
||||
* rename repo landing-page -> website
|
||||
* archive old documentation website
|
||||
* ~~What to do with drafts etc? -> prefix with `_`~~
|
||||
* Check Docusaurus warnings -> Fail build if there are warnings?
|
||||
* Removed current landing page folder "old"
|
||||
@@ -1,13 +0,0 @@
|
||||
#root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
max_line_length = 120
|
||||
indent_size = 2
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"extends": "next/core-web-vitals"
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
# Privacy and Scaling Explorations
|
||||
Main branch served at: https://appliedzkp.org/
|
||||
|
||||
This is the React re-write of the PSE website, formally just a landing page.
|
||||
|
||||
## Get Started with Development
|
||||
|
||||
`npm install`
|
||||
|
||||
`npm run dev` serves a development server at [http://localhost:8080](http://localhost:8080)
|
||||
|
||||
The app live under `/app`.
|
||||
|
||||
## How to contribute
|
||||
|
||||
### Have an idea?
|
||||
|
||||
Create an [issue](https://github.com/AtHeartEngineering/pse_landingpage/issues/new) and tell us the idea!
|
||||
|
||||
### Want to contribute?
|
||||
|
||||
Feel free to fork this repo and make a pull request to the `dev` branch.
|
||||
|
||||
### Build and deployment process
|
||||
|
||||
1. When a pull request or push is made to the `dev` branch, github actions builds a static/production version of the site to the `gh-pages-dev` branch.
|
||||
2. Once changes have been verified on the `gh-pages-dev` branch, the `dev` branch is merged into `master` where github actions builds and deploys a production version of the site to `gh-pages`
|
||||
3. `gh-pages` is served at [http://projects.appliedzkp.org](http://projects.appliedzkp.org)
|
||||
@@ -1,55 +0,0 @@
|
||||
import { AppContainer } from "../../components/AppContainer";
|
||||
import { Section } from "../../components/Section";
|
||||
import { Button } from "../../components/ui/Button";
|
||||
import React from "react";
|
||||
import { LINKS } from "../settings";
|
||||
import { Banner } from "../../components/ui/Banner";
|
||||
import { LABELS } from "../../content";
|
||||
import { AppLink } from "@/components/AppLink";
|
||||
|
||||
export default function AboutPage() {
|
||||
return (
|
||||
<main>
|
||||
<AppContainer className="flex flex-col gap-12 md:gap-20 pt-20 pb-16" size="small">
|
||||
<Section
|
||||
title={
|
||||
<h2 className="text-primary font-semibold font-inter text-center text-[32px]">
|
||||
{LABELS.ABOUT.WHO_WE_ARE.TITLE}
|
||||
</h2>
|
||||
}
|
||||
description={LABELS.ABOUT.WHO_WE_ARE.DESCRIPTION}
|
||||
>
|
||||
<div className="mx-auto">
|
||||
<AppLink href={LINKS.DOCUMENTATION} external showExternalIcon>
|
||||
<Button variant="transparent">{LABELS.COMMON.VIEW_DOCUMENTATION}</Button>
|
||||
</AppLink>
|
||||
</div>
|
||||
</Section>
|
||||
|
||||
<Section
|
||||
title={
|
||||
<h2 className="text-primary font-semibold font-inter text-center text-[32px]">
|
||||
{LABELS.ABOUT.GET_INVOLVED.TITLE}
|
||||
</h2>
|
||||
}
|
||||
description={LABELS.ABOUT.GET_INVOLVED.DESCRIPTION}
|
||||
>
|
||||
<div className="mx-auto">
|
||||
<AppLink href={LINKS.GITHUB} external showExternalIcon>
|
||||
<Button variant="transparent">{LABELS.COMMON.CHECKOUT_GITHUB}</Button>
|
||||
</AppLink>
|
||||
</div>
|
||||
</Section>
|
||||
</AppContainer>
|
||||
<Banner
|
||||
title={LABELS.COMMON.CONNECT_WITH_US.TITLE}
|
||||
description={LABELS.COMMON.CONNECT_WITH_US.DESCRIPTION}
|
||||
actions={
|
||||
<AppLink href={LINKS.DISCORD} external>
|
||||
<Button variant="primary">{LABELS.COMMON.JOIN_DISCORD}</Button>
|
||||
</AppLink>
|
||||
}
|
||||
/>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
import { AppMarkdown } from "@/components/AppMarkdown";
|
||||
import { AppContainer } from "../../components/AppContainer";
|
||||
import { Section } from "../../components/Section";
|
||||
import { Accordion } from "../../components/ui/Accordion";
|
||||
import { LABELS } from "../../content";
|
||||
import { FAQS } from "../../content/faq";
|
||||
import React from "react";
|
||||
|
||||
export default function FAQPage() {
|
||||
return (
|
||||
<main>
|
||||
<AppContainer size="small" className="flex flex-col py-16 md:py-[120px]">
|
||||
<Section
|
||||
title={
|
||||
<h2 className="text-primary text-center font-bold font-inter text-[32px] md:text-[56px]">
|
||||
{LABELS.COMMON.FAQ}
|
||||
</h2>
|
||||
}
|
||||
>
|
||||
<div className="flex flex-col gap-6">
|
||||
{FAQS.map(({ answer, question }, index) => {
|
||||
return (
|
||||
<Accordion label={question} key={index}>
|
||||
<AppMarkdown
|
||||
customComponents={{
|
||||
p: ({ ...props }) => (
|
||||
<p
|
||||
className="block overflow-hidden pt-4 text-primary text-sm leading-5 font-sans font-normal"
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
strong: ({ ...props }) => <span className="font-bold" {...props} />,
|
||||
a: ({ ...props }) => (
|
||||
<a className="font-semibold underline" target="_blank" rel="noopener noreferrer" {...props} />
|
||||
),
|
||||
}}
|
||||
>
|
||||
{answer}
|
||||
</AppMarkdown>
|
||||
</Accordion>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</Section>
|
||||
</AppContainer>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
|
Before Width: | Height: | Size: 99 KiB |
@@ -1,44 +0,0 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap');
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
:root {
|
||||
--foreground-rgb: 0, 0, 0;
|
||||
--background-start-rgb: 214, 219, 220;
|
||||
--background-end-rgb: 255, 255, 255;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--foreground-rgb: 255, 255, 255;
|
||||
--background-start-rgb: 0, 0, 0;
|
||||
--background-end-rgb: 0, 0, 0;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
color: rgb(var(--foreground-rgb));
|
||||
}
|
||||
|
||||
@layer utilities {
|
||||
.text-balance {
|
||||
text-wrap: balance;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes appear {
|
||||
from { opacity: 0; scale: 0.8; }
|
||||
to { opacity: 1; scale: 1; }
|
||||
}
|
||||
|
||||
|
||||
.shadow-card {
|
||||
box-shadow: 5px 39px 28px 0px rgba(0, 0, 0, 0.06);
|
||||
}
|
||||
|
||||
.appear {
|
||||
animation: appear linear both;
|
||||
animation-timeline: view();
|
||||
animation-range: entry 25% cover 45%;
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
import type { Metadata } from "next";
|
||||
import { Inter, DM_Sans } from "next/font/google";
|
||||
import "./globals.css";
|
||||
import { AppFooter } from "../components/AppFooter";
|
||||
import { AppHeader } from "../components/AppHeader";
|
||||
import Script from "next/script";
|
||||
|
||||
const inter = Inter({ subsets: ["latin"], variable: "--font-inter", display: "swap" });
|
||||
const sans = DM_Sans({ subsets: ["latin"], variable: "--font-sans", display: "swap" });
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "TLSNotary",
|
||||
description: "Proof of data authenticity",
|
||||
openGraph: {
|
||||
images: [
|
||||
{
|
||||
url: "/images/og-image.png",
|
||||
width: 1200,
|
||||
height: 800,
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: Readonly<{
|
||||
children: React.ReactNode;
|
||||
}>) {
|
||||
return (
|
||||
<html lang="en">
|
||||
<head />
|
||||
<body className={`${inter.className} ${inter.variable} ${sans.variable} font-inter`}>
|
||||
<AppHeader />
|
||||
{children}
|
||||
<AppFooter />
|
||||
<Script id="matomo-tracking" strategy="afterInteractive">
|
||||
{`
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="https://psedev.matomo.cloud/";
|
||||
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||
_paq.push(['setSiteId', '16']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.async=true; g.src='//cdn.matomo.cloud/psedev.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
`}
|
||||
</Script>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
149
old/app/page.tsx
@@ -1,149 +0,0 @@
|
||||
import { AppLink } from "@/components/AppLink";
|
||||
import { AppContainer } from "../components/AppContainer";
|
||||
import { Banner, BannerTitle, BannerWrapper } from "../components/ui/Banner";
|
||||
import { Button } from "../components/ui/Button";
|
||||
import { Label } from "../components/ui/Label";
|
||||
import { LABELS } from "../content";
|
||||
import { LINKS } from "./settings";
|
||||
import { Icons } from "@/components/Icons";
|
||||
import { Section } from "@/components/Section";
|
||||
import Image from "next/image";
|
||||
import { classed } from "@tw-classed/react";
|
||||
import App from 'next/app';
|
||||
|
||||
interface ComparisonTableProps {
|
||||
title: string;
|
||||
tls: boolean;
|
||||
tlsNotary: boolean;
|
||||
}
|
||||
|
||||
const TableWrapper = classed.div("grid grid-cols-4 ");
|
||||
const TableTitle = classed.h4("font-semibold text-xs text-inter text-brown-50 uppercase md:text-[15px]");
|
||||
const TableContent = classed.div("p-4");
|
||||
|
||||
const ComparisonTable = ({ title, tls, tlsNotary }: ComparisonTableProps) => {
|
||||
return (
|
||||
<TableWrapper>
|
||||
<TableContent className=" col-span-2">
|
||||
<span className="text-primary font-semibold text-sm text-inter md:text-lg">{title}</span>
|
||||
</TableContent>
|
||||
<TableContent className="m-auto">{tls ? <Icons.Check /> : <Icons.X />}</TableContent>
|
||||
<TableContent className="m-auto">{tlsNotary ? <Icons.Check /> : <Icons.X />}</TableContent>
|
||||
</TableWrapper>
|
||||
);
|
||||
};
|
||||
|
||||
export default function Home() {
|
||||
return (
|
||||
<main>
|
||||
<AppContainer className="flex flex-col">
|
||||
<div className="flex flex-col gap-8 md:gap-12 pt-10 pb-0 lg:gap-16 lg:py-16 ">
|
||||
<div className="flex flex-col gap-4 md:gap-10">
|
||||
<div className="flex flex-col gap-2 w-full lg:w-3/4">
|
||||
<Label.Subtitle className=" ">{LABELS.HOMEPAGE.SUBTITLE}</Label.Subtitle>
|
||||
<Label.Title>{LABELS.HOMEPAGE.TITLE}</Label.Title>
|
||||
</div>
|
||||
<span className="w-full lg:w-3/4 text-primary text-sm leading-5 font-inter md:text-xl font-medium">
|
||||
{LABELS.HOMEPAGE.DESCRIPTION}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex flex-row gap-4">
|
||||
<AppLink href={LINKS.DOCUMENTATION} external>
|
||||
<Button className="w-full md:w-auto">{LABELS.COMMON.CHECKOUT_DOCS}</Button>
|
||||
</AppLink>
|
||||
|
||||
<AppLink href={LINKS.DEMO} external>
|
||||
<Button className="w-full md:w-auto">
|
||||
{LABELS.COMMON.CHECKOUT_DEMO}{' '}
|
||||
(Desktop Only{' '} <Icons.ChromeIcon className="inline-block" />)
|
||||
</Button>
|
||||
</AppLink>
|
||||
</div>
|
||||
</div>
|
||||
<Icons.DividerHomepage className="hidden md:flex mx-auto w-full" />
|
||||
</AppContainer>
|
||||
|
||||
<AppContainer className="py-8 md:py-[120px] w-full lg:!max-w-[960px]">
|
||||
<Section
|
||||
title={
|
||||
<h3 className="text-primary text-2xl font-bold md:text-center md:text-5xl md:leading-[49px]">
|
||||
{LABELS.HOMEPAGE.WHY_USE_TLSNOTARY.TITLE}
|
||||
</h3>
|
||||
}
|
||||
description={LABELS.HOMEPAGE.WHY_USE_TLSNOTARY.DESCRIPTION}
|
||||
>
|
||||
<div className="relative w-full h-[200px] py-16">
|
||||
<Image className="hidden md:block" src="/images/infographic.svg" alt="infographic" fill />
|
||||
<Image className="block md:hidden" src="/images/infographic-mobile.svg" alt="infographic mobile" fill />
|
||||
</div>
|
||||
</Section>
|
||||
</AppContainer>
|
||||
|
||||
<AppContainer className="pb-16 md:pb-[120px]">
|
||||
<div className="!max-w-[640px] mx-auto">
|
||||
<TableWrapper className="hidden md:!grid px-8">
|
||||
<div className=" col-span-2"></div>
|
||||
<TableContent className="text-center">
|
||||
<span className="text-primary font-bold py-4 font-inter text-xs md:text-2xl">TLS</span>
|
||||
</TableContent>
|
||||
<TableContent className="text-center">
|
||||
<span className="text-primary font-bold py-4 font-inter text-xs md:text-2xl">TLSNotary</span>
|
||||
</TableContent>
|
||||
</TableWrapper>
|
||||
<div className="p-2 border border-gray-100 bg-gray rounded-xl md:p-8 ">
|
||||
<TableWrapper className="block md:hidden">
|
||||
<div className=" col-span-2"></div>
|
||||
<TableContent className="text-center">
|
||||
<span className="text-primary font-black py-4 font-inter text-[13px]">TLS</span>
|
||||
</TableContent>
|
||||
<TableContent className="text-center">
|
||||
<span className="text-primary font-black py-4 font-inter text-[13px]">TLSN</span>
|
||||
</TableContent>
|
||||
</TableWrapper>
|
||||
<TableContent>
|
||||
<TableTitle>{LABELS.COMMON.SERVER_AUTHENTICATION}</TableTitle>
|
||||
</TableContent>
|
||||
<ComparisonTable title="Data Origin" tls tlsNotary />
|
||||
<ComparisonTable title="Data Integrity" tls tlsNotary />
|
||||
|
||||
<TableContent>
|
||||
<TableTitle>{LABELS.COMMON.DATA_PORTABILITY}</TableTitle>
|
||||
</TableContent>
|
||||
<ComparisonTable title="Trustless" tls={false} tlsNotary />
|
||||
<ComparisonTable title="Privacy Preserving" tls={false} tlsNotary />
|
||||
</div>
|
||||
</div>
|
||||
</AppContainer>
|
||||
|
||||
<BannerWrapper color="gray">
|
||||
<AppContainer className="flex flex-col gap-4 md:gap-8">
|
||||
<BannerTitle className="text-center" variant="primary">
|
||||
{LABELS.COMMON.LEARN_THE_BASICS}
|
||||
</BannerTitle>
|
||||
|
||||
<div className="mx-auto">
|
||||
<iframe
|
||||
className="w-full min-w-autos md:min-h-[320px] md:min-w-[560px]"
|
||||
src="https://www.youtube.com/embed/bNGSdlvIPfI?si=xJSG43Go-JQGy_hs"
|
||||
title="YouTube video player"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
||||
// @ts-ignore
|
||||
referrerPolicy="strict-origin-when-cross-origin"
|
||||
allowFullScreen
|
||||
/>
|
||||
</div>
|
||||
</AppContainer>
|
||||
</BannerWrapper>
|
||||
|
||||
<Banner
|
||||
title={LABELS.HOMEPAGE.BUILD_WITH_US.TITLE}
|
||||
description={LABELS.HOMEPAGE.BUILD_WITH_US.DESCRIPTION}
|
||||
actions={
|
||||
<AppLink href={LINKS.DISCORD} external>
|
||||
<Button variant="primary">{LABELS.COMMON.JOIN_DISCORD}</Button>
|
||||
</AppLink>
|
||||
}
|
||||
/>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
import { Icons } from "../components/Icons";
|
||||
import { ReactNode } from "react";
|
||||
|
||||
type NavItem = {
|
||||
label: string;
|
||||
href: string;
|
||||
icon?: ReactNode;
|
||||
external?: boolean;
|
||||
};
|
||||
|
||||
// list of links used in the app
|
||||
export const LINKS = {
|
||||
DISCORD: "https://discord.gg/9XwESXtcN7",
|
||||
GITHUB: "https://github.com/tlsnotary/tlsn",
|
||||
TWITTER: "https://twitter.com/tlsnotary",
|
||||
DOCUMENTATION: "https://docs.tlsnotary.org/",
|
||||
DEMO: "https://demo.tlsnotary.org/",
|
||||
BLOG: "#",
|
||||
};
|
||||
|
||||
// app header navigation
|
||||
export const NAVIGATION: NavItem[] = [
|
||||
{
|
||||
label: "About",
|
||||
href: "/about",
|
||||
},
|
||||
{
|
||||
label: "Use Cases",
|
||||
href: "/use-cases",
|
||||
},
|
||||
{
|
||||
label: "FAQ",
|
||||
href: "/faq",
|
||||
},
|
||||
{
|
||||
label: "Documentation",
|
||||
href: LINKS.DOCUMENTATION,
|
||||
external: true,
|
||||
},
|
||||
{
|
||||
label: "API",
|
||||
href: "https://tlsnotary.github.io/tlsn/",
|
||||
external: true,
|
||||
},
|
||||
];
|
||||
|
||||
// app footer navigation
|
||||
export const SOCIALS_FOOTER: NavItem[] = [
|
||||
{
|
||||
label: "Discord",
|
||||
href: LINKS.DISCORD,
|
||||
external: true,
|
||||
icon: <Icons.Discord />,
|
||||
},
|
||||
{
|
||||
label: "GitHub",
|
||||
href: LINKS.GITHUB,
|
||||
external: true,
|
||||
icon: <Icons.Github />,
|
||||
},
|
||||
{
|
||||
label: "Twitter",
|
||||
href: LINKS.TWITTER,
|
||||
external: true,
|
||||
icon: <Icons.Twitter />,
|
||||
},
|
||||
];
|
||||
|
||||
// app header socials
|
||||
export const SOCIALS_HEADER: NavItem[] = [
|
||||
{
|
||||
label: "Discord",
|
||||
href: LINKS.DISCORD,
|
||||
external: true,
|
||||
icon: <Icons.DiscordCircle />,
|
||||
},
|
||||
{
|
||||
label: "GitHub",
|
||||
href: LINKS.GITHUB,
|
||||
external: true,
|
||||
icon: <Icons.GithubCircle />,
|
||||
},
|
||||
{
|
||||
label: "Twitter",
|
||||
href: LINKS.TWITTER,
|
||||
external: true,
|
||||
icon: <Icons.TwitterCircle />,
|
||||
},
|
||||
];
|
||||
@@ -1,88 +0,0 @@
|
||||
import { AppLink } from "@/components/AppLink";
|
||||
import { Banner } from "@/components/ui/Banner";
|
||||
import { Button } from "@/components/ui/Button";
|
||||
import { LABELS } from "@/content";
|
||||
import React from "react";
|
||||
import { LINKS } from "../settings";
|
||||
import { AppContainer } from "@/components/AppContainer";
|
||||
import { Section } from "@/components/Section";
|
||||
import { ProjectList, WebsiteType } from "@/content/projects";
|
||||
import { Card } from "@/components/ui/Card";
|
||||
import { Icons } from "@/components/Icons";
|
||||
|
||||
const IconMapping: Record<WebsiteType, React.ReactNode> = {
|
||||
twitter: <Icons.Twitter className="text-white hover:text-brown-50 duration-200" />,
|
||||
github: <Icons.Github className="text-white hover:text-brown-50 duration-200" />,
|
||||
website: <Icons.Website className="text-white hover:text-brown-50 duration-200" />,
|
||||
};
|
||||
|
||||
export default function UseCases() {
|
||||
return (
|
||||
<div className="flex flex-col">
|
||||
<div className=" py-10 md:py-16">
|
||||
<AppContainer className="flex flex-col gap-16 !max-w-[800px]">
|
||||
<Section
|
||||
title={
|
||||
<h2 className=" text-primary font-semibold text-2xl md:text-[32px] text-center">
|
||||
{LABELS.USE_CASES.USE_CASES.TITLE}
|
||||
</h2>
|
||||
}
|
||||
description={LABELS.USE_CASES.USE_CASES.DESCRIPTION}
|
||||
></Section>
|
||||
|
||||
<Section
|
||||
title={
|
||||
<h2 className=" text-primary font-inter w-3/4 mx-auto font-semibold text-2xl leading-6 md:text-[32px] md:w-full text-center">
|
||||
{LABELS.USE_CASES.BUILD_WITH_TLSNOTARY}
|
||||
</h2>
|
||||
}
|
||||
>
|
||||
<div className="grid grid-cols-1 gap-5 md:grid-cols-2">
|
||||
{ProjectList.map((project) => {
|
||||
return (
|
||||
<Card.Base key={project.title}>
|
||||
<div className="flex flex-col gap-3">
|
||||
<h5 className=" text-white font-inter font-semibold text-[22px] leading-5 md:text-[28px] md:leading-[28px]">
|
||||
{project.title}
|
||||
</h5>
|
||||
<div className="min-h-[100px]">
|
||||
<span className="text-white text-sm font-normal font-inter line-clamp-5">{project.tldr}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center gap-2 mt-5">
|
||||
{Object.keys(project?.links ?? []).map((website, index) => {
|
||||
// @ts-ignore
|
||||
const url: string | undefined = project.links?.[website] ?? undefined;
|
||||
|
||||
const icon: any = IconMapping[website as WebsiteType];
|
||||
|
||||
if (!url) return null;
|
||||
if (!icon) return null;
|
||||
|
||||
return (
|
||||
<AppLink key={index} href={url} external>
|
||||
{icon}
|
||||
</AppLink>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</Card.Base>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</Section>
|
||||
</AppContainer>
|
||||
</div>
|
||||
<Banner
|
||||
title={LABELS.USE_CASES.BANNER.TITLE}
|
||||
description={LABELS.USE_CASES.BANNER.DESCRIPTION}
|
||||
descriptionClass="text-center"
|
||||
actions={
|
||||
<AppLink href={LINKS.DISCORD} external>
|
||||
<Button variant="primary">{LABELS.COMMON.JOIN_DISCORD}</Button>
|
||||
</AppLink>
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
import { classed } from "@tw-classed/react";
|
||||
|
||||
export const AppContainer = classed.div("px-6 mx-auto w-full", {
|
||||
variants: {
|
||||
size: {
|
||||
small: "max-w-[700px] md:px-0",
|
||||
medium: "max-w-screen-2xl md:px-16",
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
size: "medium",
|
||||
},
|
||||
});
|
||||
@@ -1,87 +0,0 @@
|
||||
import { AppContainer } from "./AppContainer";
|
||||
import { Icons } from "./Icons";
|
||||
import { classed } from "@tw-classed/react";
|
||||
import { NAVIGATION, SOCIALS_FOOTER } from "../app/settings";
|
||||
import Link from "next/link";
|
||||
import { LABELS } from "../content";
|
||||
|
||||
const NavLabel = classed.span("flex gap-2 items-center font-sans text-white-100 text-sm duration-300", {
|
||||
variants: {
|
||||
hover: {
|
||||
true: "hover:text-gold",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export const AppFooter = () => {
|
||||
return (
|
||||
<div className="bg-primary">
|
||||
<AppContainer className="py-8 px-8 flex gap-10 flex-col justify-between md:flex-row md:gap-0 md:px-0 ">
|
||||
<div className="flex flex-col md:flex-row items-center gap-[34px] my-auto order-2 md:order-1">
|
||||
<Link href="/">
|
||||
<Icons.Logo className="text-gray" />
|
||||
</Link>
|
||||
<NavLabel className="text-center px-4 font-normal text-xs font-inter md:px-0 md:text-left md:max-w-[250px]">
|
||||
{LABELS.COMMON.FOOTER.TITLE}
|
||||
</NavLabel>
|
||||
</div>
|
||||
<div className="flex flex-col md:flex-row gap-10 md:gap-[100px] order-1 md:order-1">
|
||||
<div className="flex flex-col gap-6">
|
||||
{NAVIGATION.map(({ label, href, external }, index) => {
|
||||
if (external) return null;
|
||||
return (
|
||||
<Link
|
||||
className="flex md:block uppercase"
|
||||
key={index}
|
||||
href={href}
|
||||
target={external ? "_blank" : undefined}
|
||||
>
|
||||
<NavLabel className="md:mx-auto" hover>
|
||||
{label}
|
||||
</NavLabel>
|
||||
</Link>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<div className="flex flex-col gap-6">
|
||||
{NAVIGATION.map(({ label, href, external }, index) => {
|
||||
if (!external) return null;
|
||||
return (
|
||||
<Link
|
||||
className="flex gap-1 items-center md:block uppercase group"
|
||||
key={index}
|
||||
href={href}
|
||||
target={external ? "_blank" : undefined}
|
||||
>
|
||||
<NavLabel className="md:mx-auto" hover>
|
||||
<div className="flex items-center gap-1">
|
||||
<Icons.ExternalLink className="text-white group-hover:text-brown-50 duration-200" />
|
||||
{label}
|
||||
</div>
|
||||
</NavLabel>
|
||||
</Link>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<div className="flex flex-col gap-6">
|
||||
{SOCIALS_FOOTER.map(({ label, href, external, icon }, index) => {
|
||||
return (
|
||||
<Link
|
||||
className="flex md:block uppercase"
|
||||
key={index}
|
||||
href={href}
|
||||
target={external ? "_blank" : undefined}
|
||||
>
|
||||
<NavLabel className="md:mx-auto" hover>
|
||||
{icon}
|
||||
{label}
|
||||
</NavLabel>
|
||||
</Link>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</AppContainer>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -1,148 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import Link from "next/link";
|
||||
import { AppContainer } from "./AppContainer";
|
||||
import { Icons } from "./Icons";
|
||||
import { NAVIGATION, SOCIALS_HEADER } from "../app/settings";
|
||||
import { classed } from "@tw-classed/react";
|
||||
import { usePathname } from "next/navigation";
|
||||
import { useState } from "react";
|
||||
import { cn } from "../shared/utils";
|
||||
import { LABELS } from "../content";
|
||||
|
||||
const NavLabel = classed.span(
|
||||
"relative overflow-hidden text-base md:text-lg text-primary font-semibold group-hover:text-brown-50 hover:text-gold duration-300 after:content-[''] after:h-1 after:w-full after:bottom-0 after:left-0 after:absolute p-2 duration-200",
|
||||
{
|
||||
variants: {
|
||||
active: {
|
||||
false: "after:bg-transparent",
|
||||
true: "after:bg-brown-50",
|
||||
},
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
const AppMobileNav = () => {
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
|
||||
return (
|
||||
<div className="relative flex items-center lg:hidden">
|
||||
<AppContainer className="flex w-full justify-between items-center py-4">
|
||||
<Link href="/" type="button" aria-label="logo">
|
||||
<Icons.Logo className="text-primary" size={48} />
|
||||
</Link>
|
||||
<button type="button" aria-label="burgher menu" onClick={() => setIsOpen(true)}>
|
||||
<Icons.Burgher className="text-primary" />
|
||||
</button>
|
||||
</AppContainer>
|
||||
{isOpen && (
|
||||
<div
|
||||
className="z-20 absolute inset-0 flex justify-end h-screen bg-black opacity-50"
|
||||
onClick={() => setIsOpen(false)}
|
||||
></div>
|
||||
)}
|
||||
<div
|
||||
className={cn(
|
||||
"fixed h-screen overflow-hidden duration-200 inset-y-0 right-0 z-30 flex flex-col bg-white dark:bg-gray-1000 text-white",
|
||||
{
|
||||
"w-full": isOpen,
|
||||
"w-0": !isOpen,
|
||||
}
|
||||
)}
|
||||
>
|
||||
<div className="flex justify-end p-6">
|
||||
<button type="button" onClick={() => setIsOpen(false)} aria-label="toggle menu">
|
||||
<Icons.Close className="text-primary dark:text-white" />
|
||||
</button>
|
||||
</div>
|
||||
<div className="flex w-full flex-col px-[16px] text-base font-medium">
|
||||
{NAVIGATION.map((item, index) => {
|
||||
return (
|
||||
<Link
|
||||
key={index}
|
||||
href={`${item.href}`}
|
||||
onClick={() => setIsOpen(false)}
|
||||
className="flex items-center py-3 gap-3"
|
||||
>
|
||||
<span className="capitalize text-primary text-lg dark:text-white duration-200 font-semibold hover:text-gray-900">
|
||||
{item.label}
|
||||
</span>
|
||||
{item.external && <Icons.ExternalLink className="text-primary" />}
|
||||
</Link>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<div className="flex h-full w-full flex-col items-center justify-end gap-5 py-[40px] text-sm">
|
||||
<div className="flex gap-5">
|
||||
{SOCIALS_HEADER.map(({ href, external, icon }, index) => {
|
||||
return (
|
||||
<Link
|
||||
className="text-primary hover:text-gold duration-300"
|
||||
key={index}
|
||||
href={href}
|
||||
target={external ? "_blank" : undefined}
|
||||
>
|
||||
{icon}
|
||||
</Link>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<span className="text-center font-sans text-primary text-sm px-8">{LABELS.COMMON.FOOTER.TITLE}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const AppDesktopNav = () => {
|
||||
const pathname = usePathname();
|
||||
|
||||
return (
|
||||
<AppContainer className="hidden lg:py-[25px] lg:grid items-center grid-cols-[200px_1fr_200px]">
|
||||
<Link href="/">
|
||||
<Icons.Logo className="text-primary" />
|
||||
</Link>
|
||||
<div className="mx-auto flex items-center gap-16">
|
||||
{NAVIGATION.map(({ label, href, external }, index) => {
|
||||
const pathParts = href.split("/").filter(Boolean);
|
||||
const isHome = pathname === "/" && href === "/";
|
||||
|
||||
// is home or the first part of the path matches the first part of the href
|
||||
const isActive = isHome || (pathname !== null && pathParts[0] === pathname.split("/")[1]);
|
||||
|
||||
return (
|
||||
<Link className="flex items-center group" key={index} href={href} target={external ? "_blank" : undefined}>
|
||||
<NavLabel active={isActive}>{label}</NavLabel>
|
||||
{external && <Icons.ExternalLink className="text-primary group-hover:text-brown-50 duration-200" />}
|
||||
</Link>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<div className="ml-auto">
|
||||
<div className="flex gap-4">
|
||||
{SOCIALS_HEADER.map(({ href, external, icon }, index) => {
|
||||
return (
|
||||
<Link
|
||||
className="text-primary hover:text-gold duration-300"
|
||||
key={index}
|
||||
href={href}
|
||||
target={external ? "_blank" : undefined}
|
||||
>
|
||||
{icon}
|
||||
</Link>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</AppContainer>
|
||||
);
|
||||
};
|
||||
|
||||
export const AppHeader = () => {
|
||||
return (
|
||||
<header className="sticky right-0 left-0 top-0 bg-gray backdrop-blur-xl z-10">
|
||||
<AppDesktopNav />
|
||||
<AppMobileNav />
|
||||
</header>
|
||||
);
|
||||
};
|
||||
@@ -1,35 +0,0 @@
|
||||
import Link from "next/link";
|
||||
import React from "react";
|
||||
import { Icons } from "./Icons";
|
||||
import { cn } from "@/shared/utils";
|
||||
|
||||
interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
|
||||
children: React.ReactNode;
|
||||
href: string;
|
||||
external?: boolean;
|
||||
showExternalIcon?: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* This component easily manages internal and external links and adds the necessary attributes.
|
||||
*
|
||||
* @param {string} href - The URL of the link.
|
||||
* @param {React.ReactNode} children - The content of the link.
|
||||
* @param {boolean} external - If the link is external, in this case it will open in a new tab and also add rel="noreferrer noopener nofollow".
|
||||
*/
|
||||
export const AppLink = ({ href, children, external, className, showExternalIcon = false, ...props }: LinkProps) => {
|
||||
return (
|
||||
<Link
|
||||
href={href}
|
||||
target={external ? "_blank" : undefined}
|
||||
rel={external ? "noreferrer noopener nofollow" : undefined}
|
||||
className={cn(className, "flex items-center group")}
|
||||
{...props}
|
||||
>
|
||||
{children}
|
||||
{showExternalIcon && external && (
|
||||
<Icons.ExternalLink className="text-brown-50 group-hover:text-brown-70 duration-300" />
|
||||
)}
|
||||
</Link>
|
||||
);
|
||||
};
|
||||
@@ -1,65 +0,0 @@
|
||||
import ReactMarkdown, { Components } from "react-markdown";
|
||||
import remarkGfm from "remark-gfm";
|
||||
import rehypeRaw from "rehype-raw";
|
||||
import { Label } from "./ui/Label";
|
||||
import { createElement } from "react";
|
||||
|
||||
export const createMarkdownElement = (tag: keyof JSX.IntrinsicElements, props: any) =>
|
||||
createElement(tag, {
|
||||
...props,
|
||||
});
|
||||
|
||||
// Styling for HTML attributes for markdown component
|
||||
const REACT_MARKDOWN_CONFIG: Components = {
|
||||
img: ({ node, className, ...props }) =>
|
||||
createMarkdownElement("img", {
|
||||
className: `${className} py-10`,
|
||||
...props,
|
||||
}),
|
||||
a: ({ node, ...props }) =>
|
||||
createMarkdownElement("a", {
|
||||
className: "text-orange",
|
||||
target: "_blank",
|
||||
...props,
|
||||
}),
|
||||
u: ({ node, ...props }) =>
|
||||
createMarkdownElement("span", {
|
||||
className: "underline",
|
||||
...props,
|
||||
}),
|
||||
ins: ({ node, ...props }) =>
|
||||
createMarkdownElement("span", {
|
||||
className: "underline",
|
||||
...props,
|
||||
}),
|
||||
strong: ({ node, ...props }) =>
|
||||
createMarkdownElement("span", {
|
||||
className: "font-bold",
|
||||
...props,
|
||||
}),
|
||||
b: ({ node, ...props }) =>
|
||||
createMarkdownElement("b", {
|
||||
className: "font-bold",
|
||||
...props,
|
||||
}),
|
||||
span: ({ ...props }: any) => <Label.Paragraph {...props} />,
|
||||
p: ({ ...props }: any) => <Label.Paragraph {...props} />,
|
||||
};
|
||||
|
||||
interface MarkdownProps {
|
||||
children: string;
|
||||
customComponents?: Components;
|
||||
}
|
||||
|
||||
export const AppMarkdown = ({ children, customComponents, ...props }: MarkdownProps) => {
|
||||
return (
|
||||
<ReactMarkdown
|
||||
skipHtml={false}
|
||||
components={{ ...REACT_MARKDOWN_CONFIG, ...customComponents }}
|
||||
remarkPlugins={[remarkGfm]}
|
||||
rehypePlugins={[rehypeRaw]}
|
||||
>
|
||||
{children}
|
||||
</ReactMarkdown>
|
||||
);
|
||||
};
|
||||
@@ -1,197 +0,0 @@
|
||||
interface IconProps extends React.SVGProps<SVGSVGElement> {
|
||||
size?: number | string;
|
||||
}
|
||||
|
||||
export const Icons: Record<string, any> = {
|
||||
ExternalLink: (props: IconProps) => (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width={props?.size || 20}
|
||||
height={props?.size || 21}
|
||||
viewBox="0 0 20 21"
|
||||
fill="none"
|
||||
{...props}
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M3.06704 17.2267C3.25735 17.4169 3.53223 17.5331 3.81769 17.5331L3.80606 17.5204C4.08094 17.5204 4.35583 17.4042 4.5567 17.214L4.55776 17.2151L13.3348 8.44422V15.4201C13.3348 16.0011 13.7999 16.4766 14.392 16.4766C14.9735 16.4766 15.4492 16.0011 15.4492 15.4201V5.9115C15.4492 5.66553 15.367 5.44146 15.2291 5.26361C15.1993 5.22394 15.1664 5.18588 15.1302 5.14977C14.8641 4.88451 14.5017 4.78617 14.1669 4.855H4.87679C4.28473 4.855 3.81954 5.31986 3.81954 5.9115C3.81954 6.49258 4.28473 6.96801 4.87679 6.96801H11.8105L3.05647 15.7159V15.7265C2.64414 16.1385 2.64414 16.8147 3.06704 17.2267Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
Logo: (props: IconProps) => (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width={props?.size || "88"}
|
||||
height={props?.size || "89"}
|
||||
viewBox="0 0 88 89"
|
||||
fill="none"
|
||||
{...props}
|
||||
>
|
||||
<path
|
||||
d="M25.5484 1.20899C25.5484 0.67436 26.1196 0.332624 26.5923 0.58442L33.6891 4.36446C33.9202 4.48756 34.0645 4.72766 34.0645 4.98902V9.94049H37.6129C38.0048 9.94049 38.3226 10.2575 38.3226 10.6485V21.9766L36.1936 20.5606V12.0645H34.0645V81.4919C34.0645 81.6134 34.0332 81.7328 33.9735 81.8388L30.4251 88.1388C30.1539 88.6204 29.459 88.6204 29.1878 88.1388L25.6394 81.8388C25.5797 81.7328 25.5484 81.6134 25.5484 81.4919V1.20899Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path d="M21.2903 26.2246V77.2012H12.7742V34.7207H0V26.2246H21.2903Z" fill="currentColor" />
|
||||
<path d="M63.871 77.2012H72.3871V34.7207H76.6452V77.2012H85.1613V26.2246H63.871V77.2012Z" fill="currentColor" />
|
||||
<path
|
||||
d="M38.3226 26.2246H59.6129V34.7207H46.8387V47.4649H59.6129V77.2012H38.3226V68.7051H51.0968V55.9609H38.3226V26.2246Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
Close: (props: IconProps) => (
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}>
|
||||
<path
|
||||
id="Vector"
|
||||
d="M12.0007 10.586L16.9507 5.63599L18.3647 7.04999L13.4147 12L18.3647 16.95L16.9507 18.364L12.0007 13.414L7.05072 18.364L5.63672 16.95L10.5867 12L5.63672 7.04999L7.05072 5.63599L12.0007 10.586Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
Burgher: (props: IconProps) => (
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}>
|
||||
<path id="Vector" d="M18 18V20H6V18H18ZM21 11V13H3V11H21ZM18 4V6H6V4H18Z" fill="currentColor" />
|
||||
</svg>
|
||||
),
|
||||
Discord: (props: IconProps) => (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width={props?.size || "15"}
|
||||
height={props?.size || "13"}
|
||||
viewBox="0 0 15 13"
|
||||
fill="none"
|
||||
{...props}
|
||||
>
|
||||
<path
|
||||
d="M12.7105 1.75655C11.7595 1.32021 10.7398 0.998736 9.67358 0.814615C9.65416 0.811062 9.63476 0.819942 9.62476 0.837703C9.49361 1.07096 9.34834 1.37527 9.24661 1.61445C8.09983 1.44276 6.95893 1.44276 5.83567 1.61445C5.73392 1.36995 5.58337 1.07096 5.45164 0.837703C5.44163 0.820535 5.42224 0.811654 5.40282 0.814615C4.3372 0.998148 3.31745 1.31962 2.36591 1.75655C2.35767 1.7601 2.35061 1.76602 2.34592 1.77371C0.41167 4.66345 -0.118203 7.48215 0.141735 10.2659C0.142911 10.2795 0.150556 10.2926 0.161142 10.3008C1.43731 11.238 2.67349 11.807 3.88672 12.1841C3.90613 12.19 3.92671 12.1829 3.93906 12.1669C4.22605 11.775 4.48188 11.3618 4.70122 10.9272C4.71417 10.9018 4.70181 10.8716 4.67535 10.8615C4.26957 10.7076 3.88319 10.5199 3.51151 10.3068C3.48211 10.2896 3.47976 10.2475 3.5068 10.2274C3.58502 10.1688 3.66325 10.1078 3.73794 10.0462C3.75145 10.035 3.77028 10.0326 3.78616 10.0397C6.22792 11.1546 8.87141 11.1546 11.2843 10.0397C11.3002 10.032 11.3191 10.0344 11.3332 10.0457C11.4079 10.1072 11.4861 10.1688 11.5649 10.2274C11.5919 10.2475 11.5902 10.2896 11.5608 10.3068C11.1891 10.524 10.8027 10.7076 10.3963 10.8609C10.3699 10.871 10.3581 10.9018 10.3711 10.9272C10.5951 11.3612 10.8509 11.7744 11.1326 12.1663C11.1444 12.1829 11.1656 12.19 11.185 12.1841C12.4041 11.807 13.6403 11.238 14.9164 10.3008C14.9276 10.2926 14.9347 10.2801 14.9358 10.2665C15.2469 7.04817 14.4148 4.25258 12.7299 1.7743C12.7258 1.76602 12.7187 1.7601 12.7105 1.75655ZM5.06586 8.57089C4.33072 8.57089 3.72499 7.89598 3.72499 7.06712C3.72499 6.23826 4.31898 5.56335 5.06586 5.56335C5.8186 5.56335 6.41847 6.24419 6.4067 7.06712C6.4067 7.89598 5.81272 8.57089 5.06586 8.57089ZM10.0235 8.57089C9.28837 8.57089 8.68263 7.89598 8.68263 7.06712C8.68263 6.23826 9.2766 5.56335 10.0235 5.56335C10.7762 5.56335 11.3761 6.24419 11.3643 7.06712C11.3643 7.89598 10.7762 8.57089 10.0235 8.57089Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
Github: (props: IconProps) => (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width={props?.size || "18"}
|
||||
height={props?.size || "17"}
|
||||
viewBox="0 0 18 17"
|
||||
fill="none"
|
||||
{...props}
|
||||
>
|
||||
<path
|
||||
d="M8.58004 1.41669C4.6665 1.41669 1.49671 4.58648 1.49671 8.50002C1.4959 9.98701 1.96336 11.4365 2.83277 12.6428C3.70218 13.8492 4.92939 14.7511 6.34029 15.2207C6.69446 15.2823 6.82691 15.0698 6.82691 14.8835C6.82691 14.7156 6.81771 14.1582 6.81771 13.5646C5.03837 13.8926 4.57796 13.1311 4.43629 12.7323C4.35625 12.5283 4.01129 11.9 3.71025 11.7314C3.46233 11.599 3.10816 11.271 3.70104 11.2625C4.25921 11.2533 4.65729 11.7761 4.79046 11.9886C5.42796 13.0596 6.44654 12.7585 6.85312 12.5729C6.91546 12.1125 7.10104 11.803 7.30504 11.6259C5.729 11.4488 4.08212 10.8375 4.08212 8.12815C4.08212 7.35748 4.35625 6.72069 4.80816 6.22414C4.73733 6.04706 4.48941 5.32102 4.879 4.34706C4.879 4.34706 5.47187 4.16148 6.82691 5.07381C7.40354 4.91377 7.99932 4.83322 8.59775 4.8344C9.19983 4.8344 9.80191 4.91373 10.3686 5.0731C11.7229 4.15227 12.3165 4.34777 12.3165 4.34777C12.7061 5.32173 12.4582 6.04777 12.3873 6.22485C12.8385 6.72069 13.1134 7.34898 13.1134 8.12815C13.1134 10.8467 11.458 11.4488 9.88196 11.6259C10.1384 11.8469 10.3601 12.2719 10.3601 12.9363C10.3601 13.8834 10.3509 14.6448 10.3509 14.8842C10.3509 15.0698 10.484 15.2908 10.8382 15.22C12.2443 14.7453 13.4661 13.8416 14.3316 12.6361C15.1972 11.4306 15.663 9.98406 15.6634 8.50002C15.6634 4.58648 12.4936 1.41669 8.58004 1.41669Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
Twitter: (props: IconProps) => (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width={props?.size || "18"}
|
||||
height={props?.size || "17"}
|
||||
viewBox="0 0 18 17"
|
||||
fill="none"
|
||||
{...props}
|
||||
>
|
||||
<path
|
||||
d="M15.7782 4.00634C15.2374 4.24554 14.6639 4.40264 14.0768 4.47243C14.6957 4.10227 15.1589 3.51973 15.3801 2.83334C14.7993 3.17901 14.1625 3.42126 13.4988 3.5523C13.0529 3.07529 12.462 2.75894 11.8178 2.65242C11.1737 2.54591 10.5124 2.65519 9.93673 2.96329C9.36109 3.27139 8.90336 3.76104 8.63471 4.35611C8.36606 4.95119 8.30153 5.61835 8.45117 6.25388C7.27329 6.19485 6.12099 5.88876 5.06908 5.35548C4.01717 4.8222 3.08918 4.07367 2.34533 3.15847C2.08204 3.6107 1.94368 4.12479 1.94442 4.64809C1.94442 5.67518 2.46717 6.58255 3.26192 7.1138C2.79159 7.09899 2.33162 6.97198 1.92033 6.74334V6.78018C1.92048 7.46421 2.15718 8.12715 2.59031 8.65659C3.02344 9.18603 3.62634 9.54939 4.29679 9.68505C3.86019 9.80337 3.40239 9.82081 2.95804 9.73605C3.14707 10.3248 3.51551 10.8398 4.01175 11.2088C4.508 11.5777 5.10722 11.7823 5.7255 11.7938C5.11101 12.2764 4.40742 12.6331 3.65496 12.8436C2.9025 13.0541 2.11593 13.1143 1.34021 13.0206C2.69433 13.8914 4.27065 14.3538 5.88063 14.3523C11.3298 14.3523 14.3098 9.83805 14.3098 5.92309C14.3098 5.79559 14.3063 5.66668 14.3006 5.54059C14.8806 5.12138 15.3812 4.60206 15.7789 4.00705L15.7782 4.00634Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
Website: (props: IconProps) => (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="17" viewBox="0 0 18 17" fill="none" {...props}>
|
||||
<path
|
||||
d="M9.24984 16.9179C4.64734 16.9179 0.916504 13.1871 0.916504 8.58459C0.916504 3.98208 4.64734 0.251251 9.24984 0.251251C13.8523 0.251251 17.5832 3.98208 17.5832 8.58459C17.5832 13.1871 13.8523 16.9179 9.24984 16.9179ZM7.3415 14.9738C6.51935 13.2298 6.04306 11.3431 5.939 9.41792H2.63484C2.79699 10.7003 3.32811 11.9081 4.16364 12.8943C4.99918 13.8806 6.10318 14.603 7.3415 14.9738ZM7.60817 9.41792C7.734 11.4504 8.31484 13.3596 9.24984 15.0446C10.2101 13.315 10.771 11.3925 10.8915 9.41792H7.60817ZM15.8648 9.41792H12.5607C12.4566 11.3431 11.9803 13.2298 11.1582 14.9738C12.3965 14.603 13.5005 13.8806 14.336 12.8943C15.1716 11.9081 15.7027 10.7003 15.8648 9.41792ZM2.63484 7.75125H5.939C6.04306 5.82607 6.51935 3.93932 7.3415 2.19542C6.10318 2.56615 4.99918 3.28855 4.16364 4.27483C3.32811 5.26112 2.79699 6.46884 2.63484 7.75125ZM7.609 7.75125H10.8907C10.7705 5.77675 10.2098 3.85419 9.24984 2.12458C8.28957 3.85413 7.72863 5.77669 7.60817 7.75125H7.609ZM11.1582 2.19542C11.9803 3.93932 12.4566 5.82607 12.5607 7.75125H15.8648C15.7027 6.46884 15.1716 5.26112 14.336 4.27483C13.5005 3.28855 12.3965 2.56615 11.1582 2.19542Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
DiscordCircle: (props: IconProps) => (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none" {...props}>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M17.744 18.8C17.984 19.104 18.272 19.448 18.272 19.448C20.04 19.392 20.72 18.232 20.72 18.232C20.72 15.656 19.568 13.568 19.568 13.568C18.416 12.704 17.32 12.728 17.32 12.728L17.208 12.856C18.568 13.272 19.2 13.872 19.2 13.872C18.368 13.416 17.552 13.192 16.792 13.104C16.216 13.04 15.664 13.056 15.176 13.12C15.1341 13.12 15.0983 13.1261 15.0579 13.133L15.04 13.136C14.76 13.16 14.08 13.264 13.224 13.64C12.928 13.776 12.752 13.872 12.752 13.872C12.752 13.872 13.416 13.24 14.856 12.824L14.776 12.728C14.776 12.728 13.68 12.704 12.528 13.568C12.528 13.568 11.376 15.656 11.376 18.232C11.376 18.232 12.048 19.392 13.816 19.448C13.816 19.448 14.112 19.088 14.352 18.784C13.336 18.48 12.952 17.84 12.952 17.84C12.952 17.84 13.032 17.896 13.176 17.976C13.184 17.984 13.192 17.992 13.208 18C13.22 18.008 13.232 18.014 13.244 18.02C13.256 18.026 13.268 18.032 13.28 18.04C13.48 18.152 13.68 18.24 13.864 18.312C14.192 18.44 14.584 18.568 15.04 18.656C15.64 18.768 16.344 18.808 17.112 18.664C17.488 18.6 17.872 18.488 18.272 18.32C18.552 18.216 18.864 18.064 19.192 17.848C19.192 17.848 18.792 18.504 17.744 18.8ZM13.736 16.6C13.736 16.112 14.096 15.712 14.552 15.712C15.008 15.712 15.376 16.112 15.368 16.6C15.368 17.088 15.008 17.488 14.552 17.488C14.104 17.488 13.736 17.088 13.736 16.6ZM16.656 16.6C16.656 16.112 17.016 15.712 17.472 15.712C17.928 15.712 18.288 16.112 18.288 16.6C18.288 17.088 17.928 17.488 17.472 17.488C17.024 17.488 16.656 17.088 16.656 16.6Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M16 0C24.8366 0 32 7.16344 32 16C32 24.8366 24.8366 32 16 32C7.16344 32 0 24.8366 0 16C0 7.16344 7.16344 0 16 0ZM9 10.648C9 9.736 9.736 9 10.64 9H21.36C22.264 9 23 9.736 23 10.648V25L21.28 23.48L20.312 22.584L19.288 21.632L19.712 23.112H10.64C9.736 23.112 9 22.376 9 21.464V10.648Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
ChromeIcon: (props: IconProps) => (
|
||||
<svg xmlns="http://www.w3.org/2000/svg"width="32" height="32" viewBox="0 0 48 48" {...props}>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
fill="currentColor"
|
||||
d="M44,24c0,11.044-8.956,20-20,20S4,35.044,4,24S12.956,4,24,4S44,12.956,44,24z"></path>
|
||||
<path fill="#ffc107" d="M24,4v20l8,4l-8.843,16c0.317,0,0.526,0,0.843,0c11.053,0,20-8.947,20-20S35.053,4,24,4z"></path>
|
||||
<path fill="#4caf50" d="M44,24c0,11.044-8.956,20-20,20S4,35.044,4,24S12.956,4,24,4S44,12.956,44,24z"></path>
|
||||
<path fill="#ffc107" d="M24,4v20l8,4l-8.843,16c0.317,0,0.526,0,0.843,0c11.053,0,20-8.947,20-20S35.053,4,24,4z"></path>
|
||||
<path fill="#f44336" d="M41.84,15H24v13l-3-1L7.16,13.26H7.14C10.68,7.69,16.91,4,24,4C31.8,4,38.55,8.48,41.84,15z"></path>
|
||||
<path fill="#dd2c00" d="M7.158,13.264l8.843,14.862L21,27L7.158,13.264z"></path>
|
||||
<path fill="#558b2f" d="M23.157,44l8.934-16.059L28,25L23.157,44z"></path>
|
||||
<path fill="#f9a825" d="M41.865,15H24l-1.579,4.58L41.865,15z"></path>
|
||||
<path fill="#fff" d="M33,24c0,4.969-4.031,9-9,9s-9-4.031-9-9s4.031-9,9-9S33,19.031,33,24z"></path>
|
||||
<path fill="#2196f3" d="M31,24c0,3.867-3.133,7-7,7s-7-3.133-7-7s3.133-7,7-7S31,20.133,31,24z"></path>
|
||||
</svg>
|
||||
),
|
||||
TwitterCircle: (props: IconProps) => (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="33" height="33" viewBox="0 0 33 33" fill="none" {...props}>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M0.532715 16.834C0.532715 8.00056 7.69367 0.8396 16.5272 0.8396C25.3606 0.8396 32.5216 8.00056 32.5216 16.834C32.5216 25.6675 25.3606 32.8285 16.5272 32.8285C7.69367 32.8285 0.532715 25.6675 0.532715 16.834ZM22.625 12.3356C23.3248 12.2356 23.9246 12.1357 24.5244 11.8358C24.1245 12.5355 23.5247 13.1353 22.825 13.5352C23.0249 18.2336 19.6261 23.3318 13.5282 23.3318C11.7288 23.3318 10.0294 22.732 8.52994 21.8323C10.2293 22.0322 12.0287 21.5324 13.2283 20.6327C11.7288 20.6327 10.5292 19.6331 10.1294 18.3335C10.6292 18.4335 11.129 18.3335 11.6289 18.2336C10.1294 17.8337 9.02976 16.4342 9.02976 14.9347C9.52959 15.1346 10.0294 15.3346 10.5292 15.3346C9.12973 14.3349 8.6299 12.4356 9.52959 10.9361C11.229 12.9354 13.6282 14.2349 16.3272 14.3349C15.8274 12.3356 17.4268 10.3363 19.5261 10.3363C20.4258 10.3363 21.3255 10.7362 21.9253 11.336C22.725 11.136 23.4248 10.9361 24.0246 10.5362C23.8246 11.336 23.3248 11.9357 22.625 12.3356Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
ArrowUp: (props: IconProps) => (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" {...props}>
|
||||
<path
|
||||
d="M12 10.828L7.04999 15.778L5.63599 14.364L12 8L18.364 14.364L16.95 15.778L12 10.828Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
GithubCircle: (props: IconProps) => (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="none" {...props}>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M0 16C0 7.16344 7.16344 0 16 0C24.8366 0 32 7.16344 32 16C32 24.8366 24.8366 32 16 32C7.16344 32 0 24.8366 0 16ZM8 16.1675C8 11.7639 11.5718 8.192 15.9755 8.192C20.3792 8.192 23.951 11.7639 24 16.1675C24 19.6905 21.7492 22.6752 18.5688 23.7516C18.1774 23.8006 18.0306 23.5559 18.0306 23.3602V21.1584C18.0306 20.4244 17.7859 19.9351 17.4924 19.6905C19.2538 19.4948 21.1132 18.8587 21.1132 15.7761C21.1132 14.8954 20.7706 14.1614 20.2814 13.6232C20.2852 13.6078 20.2906 13.5885 20.297 13.5655C20.3719 13.2953 20.5892 12.5111 20.1835 11.5192C20.1835 11.5192 19.4985 11.3235 17.9816 12.351C17.3456 12.2042 16.6605 12.1064 15.9755 12.1064C15.2905 12.1064 14.6055 12.1553 13.9694 12.351C12.4526 11.3235 11.7676 11.5192 11.7676 11.5192C11.3351 12.5763 11.6105 13.3975 11.6669 13.5657L11.6697 13.5743C11.1315 14.1614 10.8379 14.8464 10.8379 15.7272C10.8379 18.8097 12.6973 19.4948 14.4587 19.6905C14.263 19.8862 14.0184 20.2287 13.9694 20.7669C13.5291 20.9626 12.4037 21.3052 11.6697 20.0819C11.6697 20.0819 11.2294 19.299 10.4465 19.2501C10.4465 19.2501 9.66364 19.2501 10.3976 19.7394C10.3976 19.7394 10.9358 19.9841 11.2783 20.9137C11.2783 20.9137 11.7676 22.4795 13.9694 21.9902V23.3602C13.9694 23.5559 13.8226 23.8006 13.4312 23.7516C10.2997 22.6752 8 19.6905 8 16.1675Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
DividerHomepage: (props: IconProps) => (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="766" height="112" viewBox="0 0 766 112" fill="none" {...props}>
|
||||
<path
|
||||
d="M7.08083 111.735C2.43838 111.735 -0.529098 106.775 1.65739 102.67L34.4815 41.045C35.5504 39.0382 37.6354 37.7849 39.9049 37.7849H82.9012V6.97233C82.9012 3.56887 85.6537 0.809822 89.0492 0.809822H187.417L175.121 19.2973H101.345V37.7849H704.221C705.276 37.7849 706.313 38.057 707.233 38.5749L761.94 69.3875C766.121 71.7428 766.121 77.7771 761.94 80.1324L707.233 110.945C706.313 111.463 705.276 111.735 704.221 111.735H7.08083Z"
|
||||
fill="#243F5F"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
Check: (props: IconProps) => (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25" fill="none" {...props}>
|
||||
<path
|
||||
d="M17.3445 8.03185C17.5557 7.83075 17.8368 7.71957 18.1284 7.72178C18.4201 7.72399 18.6994 7.8394 18.9076 8.04367C19.1158 8.24794 19.2364 8.52509 19.2441 8.81663C19.2518 9.10818 19.146 9.39131 18.9489 9.6063L12.966 17.0887C12.8631 17.1995 12.739 17.2884 12.6009 17.3502C12.4629 17.4119 12.3138 17.4451 12.1627 17.4479C12.0115 17.4507 11.8613 17.423 11.7211 17.3665C11.5808 17.3099 11.4535 17.2256 11.3466 17.1187L7.37893 13.1511C7.26844 13.0481 7.17982 12.924 7.11835 12.786C7.05689 12.6481 7.02384 12.4991 7.02117 12.3481C7.01851 12.1971 7.04628 12.0471 7.10285 11.9071C7.15941 11.7671 7.2436 11.6399 7.35039 11.5331C7.45718 11.4263 7.58438 11.3421 7.72442 11.2855C7.86445 11.229 8.01444 11.2012 8.16545 11.2039C8.31645 11.2065 8.46537 11.2396 8.60332 11.301C8.74127 11.3625 8.86542 11.4511 8.96838 11.5616L12.1083 14.7L17.316 8.06483C17.3254 8.05329 17.3354 8.04228 17.346 8.03185H17.3445Z"
|
||||
fill="#12E700"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
X: (props: IconProps) => (
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25" fill="none" {...props}>
|
||||
<path
|
||||
d="M7.86138 7.48757C7.93102 7.41775 8.01376 7.36236 8.10484 7.32456C8.19593 7.28677 8.29358 7.26731 8.39219 7.26731C8.49081 7.26731 8.58846 7.28677 8.67954 7.32456C8.77063 7.36236 8.85336 7.41775 8.92301 7.48757L12.8906 11.4567L16.8583 7.48757C16.928 7.41787 17.0107 7.36257 17.1018 7.32485C17.1929 7.28712 17.2905 7.2677 17.3891 7.2677C17.4876 7.2677 17.5853 7.28712 17.6763 7.32485C17.7674 7.36257 17.8502 7.41787 17.9199 7.48757C17.9896 7.55728 18.0449 7.64004 18.0826 7.73111C18.1203 7.82219 18.1398 7.91981 18.1398 8.01839C18.1398 8.11697 18.1203 8.21459 18.0826 8.30567C18.0449 8.39674 17.9896 8.4795 17.9199 8.54921L13.9508 12.5168L17.9199 16.4844C17.9896 16.5542 18.0449 16.6369 18.0826 16.728C18.1203 16.8191 18.1398 16.9167 18.1398 17.0153C18.1398 17.1138 18.1203 17.2115 18.0826 17.3025C18.0449 17.3936 17.9896 17.4764 17.9199 17.5461C17.8502 17.6158 17.7674 17.6711 17.6763 17.7088C17.5853 17.7465 17.4876 17.766 17.3891 17.766C17.2905 17.766 17.1929 17.7465 17.1018 17.7088C17.0107 17.6711 16.928 17.6158 16.8583 17.5461L12.8906 13.577L8.92301 17.5461C8.8533 17.6158 8.77055 17.6711 8.67947 17.7088C8.58839 17.7465 8.49077 17.766 8.39219 17.766C8.29361 17.766 8.19599 17.7465 8.10492 17.7088C8.01384 17.6711 7.93108 17.6158 7.86138 17.5461C7.79167 17.4764 7.73637 17.3936 7.69865 17.3025C7.66092 17.2115 7.64151 17.1138 7.64151 17.0153C7.64151 16.9167 7.66092 16.8191 7.69865 16.728C7.73637 16.6369 7.79167 16.5542 7.86138 16.4844L11.8305 12.5168L7.86138 8.54921C7.79156 8.47956 7.73616 8.39683 7.69836 8.30574C7.66057 8.21466 7.64111 8.11701 7.64111 8.01839C7.64111 7.91977 7.66057 7.82213 7.69836 7.73104C7.73616 7.63995 7.79156 7.55722 7.86138 7.48757Z"
|
||||
fill="#FF0000"
|
||||
/>
|
||||
</svg>
|
||||
),
|
||||
};
|
||||
@@ -1,20 +0,0 @@
|
||||
import { HTMLAttributes, ReactNode } from "react";
|
||||
import { Label } from "./ui/Label";
|
||||
import { AppMarkdown } from "./AppMarkdown";
|
||||
|
||||
interface SectionProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
||||
title: ReactNode;
|
||||
description?: string;
|
||||
}
|
||||
|
||||
export const Section = ({ title, description, children }: SectionProps) => {
|
||||
return (
|
||||
<div className="flex flex-col gap-4 md:gap-16">
|
||||
<div className="flex flex-col gap-4 md:gap-8">
|
||||
{typeof title === "string" ? <Label.SectionTitle className="text-center">{title}</Label.SectionTitle> : title}
|
||||
{description && <AppMarkdown>{description}</AppMarkdown>}
|
||||
{children && <div className="flex">{children}</div>}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -1,53 +0,0 @@
|
||||
"use client";
|
||||
import { ReactNode, useState } from "react";
|
||||
import { Icons } from "../Icons";
|
||||
import { cn } from "../../shared/utils";
|
||||
|
||||
interface AccordionProps {
|
||||
label: string;
|
||||
children?: ReactNode;
|
||||
}
|
||||
|
||||
const Accordion = ({ label, children }: AccordionProps) => {
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
|
||||
return (
|
||||
<div
|
||||
className="flex flex-col py-3 px-6 rounded-lg bg-gray border border-gray-100 hover:bg-gray-100 duration-200"
|
||||
aria-expanded={isOpen}
|
||||
>
|
||||
<div
|
||||
className="grid grid-cols-[1fr_20px] gap-1 justify-between items-center cursor-pointer"
|
||||
onClick={() => {
|
||||
setIsOpen(!isOpen);
|
||||
}}
|
||||
>
|
||||
<span className="font-inter leading-5 text-base text-primary font-bold">{label}</span>
|
||||
<Icons.ArrowUp
|
||||
className={cn("duration-200", {
|
||||
"transform rotate-180": !isOpen,
|
||||
})}
|
||||
/>
|
||||
</div>
|
||||
<div className="overflow-hidden box-border transition-all duration-300 ease-in-out">
|
||||
<div
|
||||
className={cn(
|
||||
"block overflow-hidden max-h-0 duration-200 ease-in-out",
|
||||
isOpen ? "grid-rows-[1fr] opacity-100 max-h-full" : "grid-rows-[0fr] opacity-0"
|
||||
)}
|
||||
>
|
||||
{typeof children === "string" ? (
|
||||
<p className="block overflow-hidden pt-4 text-primary text-sm leading-5 font-sans font-normal">
|
||||
{children}
|
||||
</p>
|
||||
) : (
|
||||
children
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
Accordion.displayName = "Accordion";
|
||||
export { Accordion };
|
||||
@@ -1,100 +0,0 @@
|
||||
import { ReactNode } from "react";
|
||||
import remarkGfm from "remark-gfm";
|
||||
import rehypeRaw from "rehype-raw";
|
||||
import type * as Classed from "@tw-classed/react";
|
||||
import { classed } from "@tw-classed/react";
|
||||
import { cn } from "../../shared/utils";
|
||||
import ReactMarkdown from "react-markdown";
|
||||
import { createMarkdownElement } from "../AppMarkdown";
|
||||
import { AppContainer } from "../AppContainer";
|
||||
|
||||
export const BannerWrapper = classed.div("relative md:py-[120px]", {
|
||||
variants: {
|
||||
color: {
|
||||
brown: "bg-brown-50",
|
||||
gray: "bg-gray",
|
||||
},
|
||||
spacing: {
|
||||
small: "py-8",
|
||||
medium: "py-16",
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
color: "brown",
|
||||
spacing: "small",
|
||||
},
|
||||
});
|
||||
|
||||
export const BannerTitle = classed.h4("text-gold", {
|
||||
variants: {
|
||||
titleSize: {
|
||||
small: "text-[32px] font-semibold",
|
||||
medium: "text-2xl md:text-4xl lg:text-5xl md:leading-[49px] font-bold",
|
||||
},
|
||||
variant: {
|
||||
brown: "text-gold",
|
||||
primary: "text-primary",
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
titleSize: "medium",
|
||||
},
|
||||
});
|
||||
|
||||
type BannerProps = Classed.VariantProps<typeof BannerTitle> &
|
||||
Classed.VariantProps<typeof BannerWrapper> & {
|
||||
title: string;
|
||||
description?: string;
|
||||
actions?: ReactNode;
|
||||
children?: ReactNode;
|
||||
descriptionClass?: string;
|
||||
};
|
||||
|
||||
export const Banner = ({ title, description, actions, descriptionClass, color }: BannerProps) => {
|
||||
return (
|
||||
<BannerWrapper spacing="medium" color={color}>
|
||||
<AppContainer>
|
||||
<div className="mx-auto py-10 md:py-16 px-8 md:px-[120px] bg-white rounded-3xl w-full md:max-w-[900px]">
|
||||
<div className={cn("flex flex-col gap-8")}>
|
||||
<div className="flex flex-col gap-4 md:gap-6">
|
||||
<span className=" text-primary font-inter font-bold text-2xl text-center md:text-5xl">{title}</span>
|
||||
{description && (
|
||||
<ReactMarkdown
|
||||
remarkPlugins={[remarkGfm]}
|
||||
rehypePlugins={[rehypeRaw]}
|
||||
skipHtml={false}
|
||||
components={{
|
||||
strong: ({ node, ...props }) =>
|
||||
createMarkdownElement("span", {
|
||||
className: "font-medium",
|
||||
...props,
|
||||
}),
|
||||
a: ({ node, ...props }) =>
|
||||
createMarkdownElement("a", {
|
||||
className: "text-primary font-medium leading-5 text-sm font-inter md:text-xl md:leading-6",
|
||||
target: "_blank",
|
||||
...props,
|
||||
}),
|
||||
span: ({ ...props }: any) => (
|
||||
<span className="text-primary font-normal text-lg md:text-xl md:leading-6" {...props} />
|
||||
),
|
||||
p: ({ ...props }: any) => (
|
||||
<span
|
||||
className="text-primary font-inter font-medium text-sm leading-5 md:font-normal md:text-xl md:leading-6"
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
className={cn(descriptionClass, "text-primary font-normal text-lg md:text-xl md:leading-6")}
|
||||
>
|
||||
{description}
|
||||
</ReactMarkdown>
|
||||
)}
|
||||
</div>
|
||||
<div className="mx-auto">{actions}</div>
|
||||
</div>
|
||||
</div>
|
||||
</AppContainer>
|
||||
</BannerWrapper>
|
||||
);
|
||||
};
|
||||
@@ -1,45 +0,0 @@
|
||||
import { classed } from "@tw-classed/react";
|
||||
import type * as Classed from "@tw-classed/react";
|
||||
import React, { forwardRef, HTMLAttributes } from "react";
|
||||
|
||||
const ButtonComponent = classed.button(
|
||||
"relative overflow-hidden font-medium cursor-pointer justify-center flex items-center gap-2 border rounded-[32px] inline-block disabled:opacity-50 disabled:cursor-not-allowed transition-all duration-300 ease-in-out",
|
||||
{
|
||||
variants: {
|
||||
variant: {
|
||||
transparent: "border-transparent bg-transparent text-brown-50 hover:text-brown-70 !p-2",
|
||||
primary: "bg-primary border-primary text-white hover:bg-brown-70 hover:border-brown-70 hover:text-white",
|
||||
},
|
||||
size: {
|
||||
medium: "text-sm md:text-base lg:text-xl md:leading-6 py-2 md:py-[14px] px-8",
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
variant: "primary",
|
||||
size: "medium",
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
type ButtonVariants = Classed.VariantProps<typeof ButtonComponent>;
|
||||
|
||||
interface ButtonProps extends ButtonVariants, HTMLAttributes<HTMLButtonElement> {
|
||||
children?: React.ReactNode;
|
||||
icon?: React.ReactNode;
|
||||
disabled?: boolean;
|
||||
}
|
||||
|
||||
const Button = forwardRef<HTMLButtonElement, ButtonProps>((props, ref) => {
|
||||
const { children, variant, size, icon } = props;
|
||||
|
||||
return (
|
||||
<ButtonComponent ref={ref} variant={variant} size={size} {...props}>
|
||||
{icon}
|
||||
<span className="z-[2]">{children}</span>
|
||||
</ButtonComponent>
|
||||
);
|
||||
});
|
||||
|
||||
Button.displayName = "Button";
|
||||
|
||||
export { Button };
|
||||
@@ -1,29 +0,0 @@
|
||||
import { classed } from "@tw-classed/react";
|
||||
|
||||
const CardBase = classed.div("bg-primary border border-gray-100 rounded-[16px] overflow-hidden", {
|
||||
variants: {
|
||||
spacing: {
|
||||
small: "p-8",
|
||||
medium: "py-8 px-10 md:px-16",
|
||||
},
|
||||
shadow: {
|
||||
true: "shadow-card",
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
shadow: true,
|
||||
spacing: "small",
|
||||
},
|
||||
});
|
||||
|
||||
const CardImage = classed.div("min-h-[155px] bg-gray-300 bg-cover bg-center");
|
||||
const CardContent = classed.div("p-4");
|
||||
|
||||
const Card = {
|
||||
displayName: "Card",
|
||||
Base: CardBase,
|
||||
Image: CardImage,
|
||||
Content: CardContent,
|
||||
};
|
||||
|
||||
export { Card };
|
||||
@@ -1,27 +0,0 @@
|
||||
import { classed } from "@tw-classed/react";
|
||||
|
||||
const Title = classed.h1(
|
||||
"text-2xl font-extrabold leading-1 text-primary md:text-6xl md:font-black lg:text-[96px] lg:leading-[101px]"
|
||||
);
|
||||
|
||||
const Subtitle = classed.h6(
|
||||
"text-brown-50 font-extrabold text-sm leading-none md:font-black md:text-2xl lg:text-7xl md:leading-6"
|
||||
);
|
||||
|
||||
const SectionTitle = classed.h6(
|
||||
"font-semibold font-inter text-primary text-2xl leading-[24px] md:text-[56px] md:leading-[56px]"
|
||||
);
|
||||
|
||||
const Paragraph = classed.span(
|
||||
"text-primary leading-5 font-medium fon-inter text-sm md:font-normal md:text-xl md:leading-6"
|
||||
);
|
||||
|
||||
const Label = {
|
||||
displayName: "Label",
|
||||
Title,
|
||||
Subtitle,
|
||||
SectionTitle,
|
||||
Paragraph,
|
||||
};
|
||||
|
||||
export { Label };
|
||||
@@ -1,43 +0,0 @@
|
||||
import { Icons } from "../components/Icons";
|
||||
|
||||
/**
|
||||
Markdown supported for description
|
||||
*/
|
||||
|
||||
export const ABOUT_CONTENT = {
|
||||
WHO_WE_ARE: {
|
||||
TITLE: "Who we are",
|
||||
DESCRIPTION: `TLSNotary is an open-source protocol developed by the **Privacy and Scaling Exploration (PSE)** research lab of the Ethereum Foundation.
|
||||
\nTLSNotary is not a new project; in fact, it has been around for **more than a decade**. In 2022, TLSNotary was rebuilt from the ground up in **Rust** incorporating state-of-the-art cryptographic protocols. This renewed version of the TLSNotary protocol offers enhanced security, privacy, and performance.
|
||||
`,
|
||||
},
|
||||
HOW_IT_WORKS: {
|
||||
TITLE: "How it works",
|
||||
DESCRIPTION: `TLSNotary is a protocol which allows people to export data from any web application and prove facts about it to a third-party in a privacy-preserving way by leveraging secure multi-party computation (MPC) to authenticate data communicated between a Prover and a TLS-enabled web server.
|
||||
<img class="w-full" src="/images/tlsnotary-diagram.svg" />
|
||||
`,
|
||||
|
||||
STEPS: [
|
||||
{
|
||||
TITLE: "Step 1: Multiparty TLS Request",
|
||||
DESCRIPTION:
|
||||
"The Prover requests data from a Server over TLS. The verifier cooperates in secure and privacy-preserving multi-party computation (MPC). This cooperation guaranties that the Prover can not cheat and allows the Verifier to check the authenticity of the data in step 3.",
|
||||
},
|
||||
{
|
||||
TITLE: "Step 2: Selective Disclosure",
|
||||
DESCRIPTION:
|
||||
"The Prover selectively discloses the data to the Verifier by redacting sensitive information prior to sharing it. Selective disclosure may involve simple redactions, or more advanced techniques such as a zero-knowledge proofs that can prove properties of redacted data without revealing the data itself.",
|
||||
},
|
||||
{
|
||||
TITLE: "Step 3: Data Verification",
|
||||
DESCRIPTION:
|
||||
"The Verifier verifies that the prover did not tamper with the data and also verifiers the data origin, by inspecting the Server certificate through trusted certificate authorities (CAs). The Verifier can now make assertions about the non-redacted content of the transcript.",
|
||||
},
|
||||
],
|
||||
},
|
||||
GET_INVOLVED: {
|
||||
TITLE: "Get involved",
|
||||
DESCRIPTION:
|
||||
"An alpha version of the TLSNotary protocol is available for testing. We welcome folks to start playing around with it, including trying to break it!\n\nBoth codebases are 100% Rust and compile to WASM targets with an eye on deployment into browser environments. All our code is and always will be open source! Dual-licensed under Apache 2 and MIT, at your choice.\n\nWe've invested effort into making sure our code is modular and capable of evolving. We hope that others may find some of the components independently interesting and useful. Contributions are welcome!",
|
||||
},
|
||||
};
|
||||
@@ -1,21 +0,0 @@
|
||||
export const COMMON_CONTENT = {
|
||||
VIEW_DOCUMENTATION: "View Documentation",
|
||||
FORK_REPO: "Fork github repo",
|
||||
AND_MORE: "... and more!",
|
||||
CHECKOUT_GITHUB: "Check out our Github",
|
||||
CHECKOUT_DOCS: "Check out our documentation",
|
||||
CHECKOUT_DEMO: "Try TLSNotary",
|
||||
LEARN_THE_BASICS: "Learn the basics",
|
||||
SERVER_AUTHENTICATION: "Server Authentication",
|
||||
DATA_PORTABILITY: "Data Portability",
|
||||
FAQ: "FAQ",
|
||||
JOIN_DISCORD: "Join Our Discord",
|
||||
CONNECT_WITH_US: {
|
||||
TITLE: "Connect with us",
|
||||
DESCRIPTION:
|
||||
"Our team believes in open-source development with a strong emphasis on trustlessness. We are committed to transparency and community-driven improvements. Come find us in our public Discord to learn more and collaborate!",
|
||||
},
|
||||
FOOTER: {
|
||||
TITLE: "TLSNotary is a project of Privacy and Scaling Explorations, an Ethereum Foundation supported team.",
|
||||
},
|
||||
};
|
||||
@@ -1,63 +0,0 @@
|
||||
interface FAQItem {
|
||||
question: string;
|
||||
answer: string;
|
||||
}
|
||||
|
||||
/**
|
||||
Markdown supported for answer
|
||||
*/
|
||||
export const FAQS: FAQItem[] = [
|
||||
{
|
||||
question: "Why is TLS not sufficient for data portability?",
|
||||
answer:
|
||||
"TLS indeed signs a checksum (a Message Authentication Code, MAC) to check data integrity. However, in TLS, both the Server and the User use symmetric keys for data exchange, meaning the same key is employed for both encryption and decryption. This symmetric key usage allows a User to modify the data and retroactively compute a new checksum. As a result, this checksum alone is insufficient to guarantee data authenticity to a third party.",
|
||||
},
|
||||
{
|
||||
question: "How can I verify the data origin in a TLSNotary proof?",
|
||||
answer:
|
||||
"The proof contains the domain name and ephemeral public key of the server. A standard certificate verifier can verify whether the key is valid for the provided server name and that it chains to at least one trusted root certificate.",
|
||||
},
|
||||
{
|
||||
question: "What does “privacy-centric” exactly mean for TLSNotary?",
|
||||
answer:
|
||||
"TLSNotary does not compromise on privacy for performance reasons. It prioritizes user privacy in all its operations. The verifier only sees the data the prover decides to share. <br /><br/> If a generic notary is used to verify the TLS session, this notary only sees encrypted data and does not know what Server the Prover communicates with. The only information the Notary can see is: the time of the TLS-session, the length of the requests and responses, the number or round trips, and which cipher suite is used.",
|
||||
},
|
||||
{
|
||||
question: "What is the overhead of using TLSNotary?",
|
||||
answer:
|
||||
"The Multi-Party Computation (MPC) between the Prover and the Verifier requires significant bandwidth, orders of magnitude more than the Server's data size.",
|
||||
},
|
||||
{
|
||||
question: "Can the server detect that a TLS session is being notarized?",
|
||||
answer: "To the server, the TLS connection appears the same as any other connection. Only the User communicates with the Server, not the Notary or the Verifier. However, the timing patterns of TLS communication might have a different fingerprint, so through statistical analysis, specific identifying patterns might be uncovered.",
|
||||
},
|
||||
{
|
||||
question: "Can TLSNotary be used for public data?",
|
||||
answer:
|
||||
"Yes, but for public data, a less-resource-intensive man-in-the-middle approach is more economical since the privacy features of TLSNotary are superfluous in this scenario.",
|
||||
},
|
||||
{
|
||||
question: "How can I inspect and verify a TLSNotary proof?",
|
||||
answer:
|
||||
"The easiest way is to use the proof-of-concept [TLSNotary Explorer](https://explorer.tlsnotary.org)",
|
||||
},
|
||||
{
|
||||
question: "Which TLS versions are supported?",
|
||||
answer: "TLSNotary currently supports TLS 1.2. Support for TLS 1.3 is on the roadmap.",
|
||||
},
|
||||
{
|
||||
question: "How can I use TLSNotary to verify data on-chain?",
|
||||
answer:
|
||||
"At the moment the most practical way to verify data on-chain is to prove the data directly to an off-chain application specific verifier. There are planned upgrades to make TLSNotary proofs directly verifiable on-chain.",
|
||||
},
|
||||
{
|
||||
question: "Why can a verifier trust a TLSNotary proof?",
|
||||
answer:
|
||||
"A TLSNotary proof is trustworthy because of its cryptographic integrity and its inclusion of an ephemeral key, allowing verifiers to confirm the data's origin from the claimed domain. This trust also hinges on the verifier's confidence in the data source (the server) and the validity of any redactions. Additionally, if the verifier did not conduct the TLS-MPC process themselves, they must trust in the notary's neutrality, ensuring it has not been influenced or compromised by the Prover.",
|
||||
},
|
||||
{
|
||||
question: "How does TLSNotary differ from other TLS portability approaches?",
|
||||
answer:
|
||||
"TLSNotary distinguishes itself with its dedication to open-source development and a strong emphasis on trustlessness. Developed as a public good without a business model, it fosters transparency and allows for community-driven improvements. Unlike other solutions, TLSNotary is designed to prioritize trustlessness, thereby guaranteeing superior levels of privacy and security. It achieves this without depending on particular network assumptions or compromising on privacy or security to enhance performance. This strategy positions TLSNotary as the go-to choice for projects that place a high value on security and privacy in their TLS portability needs.",
|
||||
},
|
||||
];
|
||||
@@ -1,17 +0,0 @@
|
||||
export const HOMEPAGE_CONTENT = {
|
||||
TITLE: "Privacy-preserving data portability",
|
||||
SUBTITLE: "TLSNotary",
|
||||
DESCRIPTION:
|
||||
" TLSNotary is an open-source protocol that can verify the authenticity of TLS data while protecting privacy. If you're looking for a way to make data portable without compromising on security, check out the protocol and integrate it into your applications!",
|
||||
BUILD_WITH_US: {
|
||||
TITLE: "Build with us",
|
||||
DESCRIPTION:
|
||||
"Interested in using TLSNotary, contributing, or just learning more about how it works? Join the conversation on our [Discord server](https://discord.gg/9XwESXtcN7), check out our [Github](https://github.com/tlsnotary/tlsn), or use our Quick Start guide to try it out!",
|
||||
},
|
||||
WHY_USE_TLSNOTARY: {
|
||||
TITLE: "Why use TLSNotary?",
|
||||
DESCRIPTION: `TLS (Transport Layer Security), also known as the "s" in "https" 🔐, can secure communication between a server and a user. But what if you want to credibly share data with others without compromising security, privacy, or control? </br> </br>TLSNotary solves this by adding a Verifier to the TLS connection using secure Multi-Party Computation (MPC). MPC provides cryptographic guarantees, allowing the Verifier to authenticate the TLS transcript without requiring external trust or revealing the complete data to anyone. TLSNotary can sign (aka notarize) data and make it portable in a privacy preserving way.
|
||||
</br></br> With TLSNotary, users are in full control over the data they choose to share.
|
||||
`,
|
||||
},
|
||||
};
|
||||
@@ -1,11 +0,0 @@
|
||||
import { ABOUT_CONTENT } from "./about";
|
||||
import { COMMON_CONTENT } from "./common";
|
||||
import { HOMEPAGE_CONTENT } from "./homepage";
|
||||
import { USE_CASES_CONTENT } from "./useCases";
|
||||
|
||||
export const LABELS = {
|
||||
ABOUT: ABOUT_CONTENT,
|
||||
HOMEPAGE: HOMEPAGE_CONTENT,
|
||||
COMMON: COMMON_CONTENT,
|
||||
USE_CASES: USE_CASES_CONTENT,
|
||||
};
|
||||
@@ -1,60 +0,0 @@
|
||||
export type WebsiteType = "website" | "twitter" | "github";
|
||||
|
||||
type Project = {
|
||||
title: string;
|
||||
tldr: string;
|
||||
links?: Partial<Record<WebsiteType, string>>;
|
||||
};
|
||||
|
||||
export const ProjectList: Project[] = [
|
||||
|
||||
{
|
||||
title: "ZKP2P",
|
||||
tldr: "Completely peer-to-peer leveraging everyday payment networks",
|
||||
links: {
|
||||
website: "https://zkp2p.xyz",
|
||||
twitter: "https://x.com/zkp2p",
|
||||
github: "https://github.com/zkp2p",
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "OpenLayer (Jomo)",
|
||||
tldr: "Scale web3 through optimistic verifiable computation",
|
||||
links: {
|
||||
website: "https://www.openlayer.tech/",
|
||||
twitter: "https://x.com/OpenLayerHQ",
|
||||
github: "https://github.com/0xJomo"
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "Opacity Labs",
|
||||
tldr: "The ZKP protocol for proving anything without revealing the details",
|
||||
links: {
|
||||
website: "https://www.opacity.network/",
|
||||
twitter: "https://warpcast.com/~/channel/opacity"
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "vlayer",
|
||||
tldr: "Empowering web3 with Verifiable Data",
|
||||
links: {
|
||||
website: "https://www.vlayer.xyz",
|
||||
twitter: "https://x.com/vlayer_xyz",
|
||||
github: "https://github.com/vlayer-xyz"
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "ZeroTrustBounty",
|
||||
tldr: "A trustless bug bounty platform with redacted bug reports & guaranteed payments to whitehats.",
|
||||
links: {
|
||||
github: "https://github.com/antojoseph/ZeroTrustBounty",
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "RealReturn",
|
||||
tldr: "An open leaderboard of verified real investment returns, enabled by TLSNotary and Jomo.",
|
||||
links: {
|
||||
github: "https://github.com/chcharcharlie/realreturn",
|
||||
},
|
||||
},
|
||||
];
|
||||
@@ -1,19 +0,0 @@
|
||||
export const USE_CASES_CONTENT = {
|
||||
USE_CASES: {
|
||||
TITLE: "Use Cases",
|
||||
DESCRIPTION: `You can use TLSNotary for: </br></br>- <b>Identity Verification</b>: verify your name, age, or citizenship from online government services
|
||||
</br></br>- <b>Reputation Verification</b>: verify user experience or trustworthiness on platforms like AirBnb, Uber, Strava
|
||||
</br></br>- <b>Real World Asset Ownership Verification</b>: confirm ownership of tangible assets (e.g. vehicles, real estate)
|
||||
</br></br>- <b>Health Information Verification</b>: verify personal health records from platforms like MyHealth, HealthVault etc
|
||||
</br></br>- <b>Account Ownership Verification</b>: confirm control over online accounts (e.g. Google, Microsoft, Apple, Twitter)
|
||||
</br></br>- <b>Financial Verification</b>: verify your financial standing or prove financial dealings from your bank or other service
|
||||
</br></br>- <b>User Restriction Verification</b>: confirm if a user is barred from accessing specific applications or services
|
||||
</br></br> <span class="text-center">...and more!</span>
|
||||
`,
|
||||
},
|
||||
BUILD_WITH_TLSNOTARY: "Projects using TLSNotary",
|
||||
BANNER: {
|
||||
TITLE: "Share what you're building with TLSNotary.",
|
||||
DESCRIPTION: "Are you using TLSNotary in your project? Reach out on Discord and tell us about your work!",
|
||||
},
|
||||
};
|
||||
@@ -1,7 +0,0 @@
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
// basePath: "/landing-page",
|
||||
output: 'export', // compatible with GitHub Pages
|
||||
};
|
||||
|
||||
export default nextConfig;
|
||||
6835
old/package-lock.json
generated
@@ -1,49 +0,0 @@
|
||||
{
|
||||
"name": "tlsn-landingpage",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"homepage": "https://tlsnotary.github.io/landing-page",
|
||||
"dependencies": {
|
||||
"@tw-classed/react": "^1.7.0",
|
||||
"clsx": "^2.1.0",
|
||||
"next": "14.1.4",
|
||||
"react": "^18.1.0",
|
||||
"react-dom": "^18.1.0",
|
||||
"react-markdown": "^9.0.1",
|
||||
"react-router-dom": "^6.3.0",
|
||||
"rehype-raw": "^7.0.0",
|
||||
"remark-gfm": "^4.0.0",
|
||||
"tailwind-merge": "^2.2.2"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint",
|
||||
"test": "jest"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^27.5.1",
|
||||
"@types/node": "^20",
|
||||
"@types/react": "^18",
|
||||
"@types/react-dom": "^18",
|
||||
"autoprefixer": "^10.0.1",
|
||||
"eslint": "^8",
|
||||
"eslint-config-next": "14.1.4",
|
||||
"postcss": "^8",
|
||||
"tailwindcss": "^3.4.3",
|
||||
"typescript": "^5"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
};
|
||||
@@ -1,4 +0,0 @@
|
||||
<svg width="121" height="121" viewBox="0 0 121 121" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M120.5 60.5C120.5 27.3629 93.6371 0.5 60.5 0.5C27.3629 0.5 0.5 27.3629 0.5 60.5C0.5 93.6371 27.3629 120.5 60.5 120.5C93.6371 120.5 120.5 93.6371 120.5 60.5Z" fill="#243F5F"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M60.5 0.5V60.5H0.5C0.5 93.637 27.363 120.5 60.5 120.5V60.5H120.5C120.5 27.363 93.637 0.5 60.5 0.5Z" fill="#B59963"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 457 B |
@@ -1,3 +0,0 @@
|
||||
<svg width="1440" height="528" viewBox="0 0 1440 528" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1440 132.971L0 0V132.971V528H1440V132.971Z" fill="#243F5F"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 180 B |
@@ -1,19 +0,0 @@
|
||||
<svg width="983" height="417" viewBox="0 0 983 417" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 105.017L982.32 0V105.017V417H0V105.017Z" fill="#243F5F"/>
|
||||
<mask id="mask0_1166_379" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="983" height="417">
|
||||
<path d="M0 105.017L982.32 0V105.017V417H0V105.017Z" fill="#243F5F"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_1166_379)">
|
||||
<path d="M222.309 58.6457V237.993H192.418V58.6457H222.309Z" fill="#FAFBFC"/>
|
||||
<path d="M162.527 58.6457V237.993H132.635V58.6457H162.527Z" fill="#FAFBFC"/>
|
||||
<path d="M102.744 58.6457L102.744 237.993H72.8529L72.8529 58.6457H102.744Z" fill="#FAFBFC"/>
|
||||
<path d="M42.9617 237.993C42.9617 287.518 83.1101 327.667 132.635 327.667V237.993H42.9617Z" fill="#B59963"/>
|
||||
<path d="M222.309 237.993C222.309 287.518 182.161 327.667 132.635 327.667V237.993H222.309Z" fill="#A27F3C"/>
|
||||
<path d="M222.309 417.341C222.309 367.815 182.161 327.667 132.635 327.667V417.341H222.309Z" fill="#B59963"/>
|
||||
<path d="M42.9617 417.341C42.9617 367.815 83.1101 327.667 132.635 327.667V417.341H42.9617Z" fill="#A27F3C"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M401.657 148.319C401.657 197.845 361.508 237.993 311.983 237.993C262.458 237.993 222.309 197.845 222.309 148.319H267.146C267.146 173.082 287.22 193.156 311.983 193.156C336.746 193.156 356.82 173.082 356.82 148.319H401.657Z" fill="#B59963"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M401.657 148.319C401.657 98.794 361.508 58.6456 311.983 58.6456C262.458 58.6456 222.309 98.794 222.309 148.319H267.146C267.146 123.557 287.22 103.482 311.983 103.482C336.746 103.482 356.82 123.557 356.82 148.319H401.657Z" fill="#A27F3C"/>
|
||||
<path d="M222.309 237.993H401.657V297.776H222.309V237.993Z" fill="#FAFBFC"/>
|
||||
<path d="M222.309 357.559H401.657V417.341H222.309V357.559Z" fill="#FAFBFC"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.8 KiB |
@@ -1,19 +0,0 @@
|
||||
<svg width="1441" height="612" viewBox="0 0 1441 612" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 154L1440.5 0V154V611.5H0V154Z" fill="#243F5F" />
|
||||
<mask id="mask0_1166_255" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="1441" height="612">
|
||||
<path d="M0 154L1440.5 0V154V611.5H0V154Z" fill="#243F5F" />
|
||||
</mask>
|
||||
<g mask="url(#mask0_1166_255)">
|
||||
<path d="M326 86V349H282.167V86H326Z" fill="#FAFBFC" />
|
||||
<path d="M238.333 86L238.333 349H194.5V86H238.333Z" fill="#FAFBFC" />
|
||||
<path d="M150.667 86L150.667 349H106.833L106.833 86H150.667Z" fill="#FAFBFC" />
|
||||
<path d="M63 349C63 421.625 121.875 480.5 194.5 480.5V349H63Z" fill="#B59963" />
|
||||
<path d="M326 349C326 421.625 267.125 480.5 194.5 480.5V349H326Z" fill="#A27F3C" />
|
||||
<path d="M326 612C326 539.375 267.125 480.5 194.5 480.5V612H326Z" fill="#B59963" />
|
||||
<path d="M63 612C63 539.375 121.875 480.5 194.5 480.5V612H63Z" fill="#A27F3C" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M589 217.5C589 290.125 530.125 349 457.5 349C384.875 349 326 290.125 326 217.5L391.75 217.5C391.75 253.813 421.187 283.25 457.5 283.25C493.813 283.25 523.25 253.813 523.25 217.5H589Z" fill="#B59963" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M589 217.5C589 144.875 530.125 86 457.5 86C384.875 86 326 144.875 326 217.5L391.75 217.5C391.75 181.187 421.187 151.75 457.5 151.75C493.813 151.75 523.25 181.187 523.25 217.5H589Z" fill="#A27F3C" />
|
||||
<path d="M326 349H589V436.667H326V349Z" fill="#FAFBFC" />
|
||||
<path d="M326 524.333H589V612H326V524.333Z" fill="#FAFBFC" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
@@ -1,11 +0,0 @@
|
||||
<svg width="529" height="548" viewBox="0 0 529 548" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M153.581 4.41505C153.581 1.08579 157.014 -1.04229 159.856 0.525709L202.517 24.065C203.907 24.8316 204.774 26.3268 204.774 27.9544V58.7885H226.105C228.461 58.7885 230.371 60.7624 230.371 63.1974V133.741L217.573 124.923V72.0154H204.774V504.359C204.774 505.115 204.586 505.859 204.227 506.519L182.897 545.751C181.266 548.75 177.089 548.75 175.458 545.751L154.128 506.519C153.769 505.859 153.581 505.115 153.581 504.359V4.41505Z"
|
||||
fill="#243f5f" />
|
||||
<path d="M127.984 160.194V477.639H76.7903V213.102H0V160.194H127.984Z" fill="#243f5f" />
|
||||
<path d="M383.952 477.639H435.145V213.102H460.742V477.639H511.935V160.194H383.952V477.639Z"
|
||||
fill="#243f5f" />
|
||||
<path
|
||||
d="M230.371 160.194H358.355V213.102H281.565V292.463H358.355V477.639H230.371V424.732H307.161V345.37H230.371V160.194Z"
|
||||
fill="#243f5f" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 942 B |
@@ -1,11 +0,0 @@
|
||||
<svg width="529" height="548" viewBox="0 0 529 548" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M153.581 4.41505C153.581 1.08579 157.014 -1.04229 159.856 0.525709L202.517 24.065C203.907 24.8316 204.774 26.3268 204.774 27.9544V58.7885H226.105C228.461 58.7885 230.371 60.7624 230.371 63.1974V133.741L217.573 124.923V72.0154H204.774V504.359C204.774 505.115 204.586 505.859 204.227 506.519L182.897 545.751C181.266 548.75 177.089 548.75 175.458 545.751L154.128 506.519C153.769 505.859 153.581 505.115 153.581 504.359V4.41505Z"
|
||||
fill="#FCFCFC" />
|
||||
<path d="M127.984 160.194V477.639H76.7903V213.102H0V160.194H127.984Z" fill="#FCFCFC" />
|
||||
<path d="M383.952 477.639H435.145V213.102H460.742V477.639H511.935V160.194H383.952V477.639Z"
|
||||
fill="#FCFCFC" />
|
||||
<path
|
||||
d="M230.371 160.194H358.355V213.102H281.565V292.463H358.355V477.639H230.371V424.732H307.161V345.37H230.371V160.194Z"
|
||||
fill="#FCFCFC" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 942 B |
|
Before Width: | Height: | Size: 32 KiB |
@@ -1,17 +0,0 @@
|
||||
<svg width="529" height="548" viewBox="-15 -1 550 550" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect
|
||||
fill="#243f5f"
|
||||
width="550"
|
||||
height="550"
|
||||
x="-15"
|
||||
y="-1" />
|
||||
<path
|
||||
d="M153.581 4.41505C153.581 1.08579 157.014 -1.04229 159.856 0.525709L202.517 24.065C203.907 24.8316 204.774 26.3268 204.774 27.9544V58.7885H226.105C228.461 58.7885 230.371 60.7624 230.371 63.1974V133.741L217.573 124.923V72.0154H204.774V504.359C204.774 505.115 204.586 505.859 204.227 506.519L182.897 545.751C181.266 548.75 177.089 548.75 175.458 545.751L154.128 506.519C153.769 505.859 153.581 505.115 153.581 504.359V4.41505Z"
|
||||
fill="#FCFCFC" />
|
||||
<path d="M127.984 160.194V477.639H76.7903V213.102H0V160.194H127.984Z" fill="#FCFCFC" />
|
||||
<path d="M383.952 477.639H435.145V213.102H460.742V477.639H511.935V160.194H383.952V477.639Z"
|
||||
fill="#FCFCFC" />
|
||||
<path
|
||||
d="M230.371 160.194H358.355V213.102H281.565V292.463H358.355V477.639H230.371V424.732H307.161V345.37H230.371V160.194Z"
|
||||
fill="#FCFCFC" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.0 KiB |
@@ -1,6 +0,0 @@
|
||||
import { clsx, type ClassValue } from "clsx";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs));
|
||||
}
|
||||
@@ -1,158 +0,0 @@
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="443px" height="190px" viewBox="-0.5 -0.5 443 190" content="<mxfile><diagram id="KXpQsmKgV8OItgqWGwwX" name="Page-1">7VrLcts2FP2WLjSTLqThU7KWtmwni2TiqTtpuupAJEhhBBEsCL3y9b0gAQokIZuu/GojecYi7sXznnMPAVIDf7bafeQoX3xhMaYDz4l3A/964Hn+xIH/0rBXBm9SGVJO4srkHgz35AdWRtUuXZMYF42KgjEqSN40RizLcCQaNsQ52zarJYw2R81RijuG+wjRrvUPEotFZb3Qq5D2T5ikCz2yO55WnhXSldVKigWK2dYw+TcDf8YZE9XVajfDVMZOx6Vqd3vEW0+M40z0aSB95TzEXi8Ox7BWVcxYBl9XC7GiUHLhEu+I+G5c/wnXzihUpWuJsKMLe13IBN9/NwtGK1k8NCtLul3CMnGLVoRKwydMN1iQCCmHYoWnK84YZbxcgX9bfsBeCM6WNURhaUFcXEoKgCGiqChIpM23hOpVdsOoIluwNY9UoDxfUQ/xFKtqXljZZBCNhir4HzFbYVghVOCYIkE2TUIhxcu0rneADi4UenYkfYXkBtG16vX3z/dWdD+jOeRjA1ZESZrJkMCCMYTxaoO5DDa9VI45E4KtwMFxQX6gedmfjH3OSCbKeYdXg/D6CDpHYTRgc8oP2Kmc3xWKliln6yzWVRQZu9hoEss5451NAdR8G0nWgEMJkUKvNziqozsZA6MKS5ICGNFGrx6vF6CaXgagA29MhQpcA9bx32umHcOijP0lVIAw7cqIaT9cpfL7HnMIlu4OZlL1WDm7nKEUlFXGfrsgAt/nqEyBLWh7i0VFXsltQnY4tiZgAklmYH5xfRnM3Lqm4fECPwmTJyT70Zzt0KILv/JqVd43i1tD45VpYci7tp2SvV7wjnXYguLpytxLh3EWdyuB8clSHVqkevpmUt3N7C93s59DqoP/pVSHLyfVd5y9olTbBPgF0v/YXeAZNNydTt5MxKcvR4NvmJOEnInQnwj+5OKtiOAHFiK0AJKCmVvUe0XimNrF81gI+munbuUGjdC4TtgrNq7zHFkyOTlL3OBIllwjgfpmCBy982pvJXqkyby+x31dC0rk7a20x4gvv0IrIsrd0sgJ328K+cduvl2ivAYRfNdChDZISyyihdq/sCrys/qpjiUs8Hcrh7tKOYoJPvjUlqQVrdajglblGBULqYnlQDpRyy3ZHSuIIKyx3WpnsmC5bbtmkMqA2PV0WS3esWlzuYPD/GaDq41ceXJSPF7tUvmwbYS2RTCK5FwSmI3Af61QhtJy6JMoob3NM5LbVVXPGXnjLme88Ugr8kmsse21emprDZVJGoV1xtRe++FTxeni603Hj4pvnV/Pn3TjHkn38yljeATdN1JG2y3yrIyvq4z9KfFelNF2/GixpszTGrhHMtuKfDNP3b7P6WHH2TtRkTdJ/OhlUAm6YjsOLGkcno5H4JzxeBSPsVtz34DEv3gZSHS/lrNHkaPMevaIqkDIcwdP5x+8EOYxk0d14+LXMjhOeUxJVORlAzP42m85xihHNbT0ZIyvEDV8G8QJgm+QTCTWXL78fLBehPJjVbYqptIZlA/x4IJiAeo5LOT9Oku7LRnPFyhTXXqVDQAXQyXi0lzruPYRoHamRtLPNSqP4NBZAv3rkdTjQsmB8u2sMcyW8bg5sbovWMt8SaA72WeVCEPFou6YMY4YR/LWNBQLEi0zXKiBSAZ3LL3Sdl0DlQfrGTRp1EsoQ6K9zJgUOUV7Xb3cNXnOL2SVMy5QJqyH299wjCIBYnE44Fak1QfcyjznVhrPIYyAsDFN4MqH4dC0KxqfGX9m/L9nfJu2Z4E90+2/IbCtp4dNcW1t3OTsHt+x2TZcT3q/Zu7E1Oqe+srt5C2aD8eTyfTwmXS2a6HlIBw8/RwMxcMvn6rXcIefj/k3/wA=</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<path d="M 95.84 42 L 165.16 42" fill="none" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 87.59 42 L 98.59 36.5 L 95.84 42 L 98.59 47.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 173.41 42 L 162.41 47.5 L 165.16 42 L 162.41 36.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 34px; margin-left: 131px;">
|
||||
<div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">
|
||||
TLS
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="131" y="34" fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
|
||||
TLS
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<ellipse cx="42" cy="42" rx="40" ry="40" fill="#8da4c1" stroke="#243f5f" stroke-width="5" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 42px; margin-left: 3px;">
|
||||
<div data-drawio-colors="color: #FFFFFF; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<font style="font-size: 20px;">
|
||||
Server
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="42" y="48" fill="#FFFFFF" font-family="Helvetica" font-size="20px" text-anchor="middle">
|
||||
Server
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 272.84 42 L 346.16 42" fill="none" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 264.59 42 L 275.59 36.5 L 272.84 42 L 275.59 47.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 354.41 42 L 343.41 47.5 L 346.16 42 L 343.41 36.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 34px; margin-left: 310px;">
|
||||
<div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">
|
||||
MPC
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="310" y="34" fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
|
||||
MPC
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<ellipse cx="219" cy="42" rx="40" ry="40" fill="#8da4c1" stroke="#243f5f" stroke-width="5" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 42px; margin-left: 180px;">
|
||||
<div data-drawio-colors="color: #FFFFFF; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<font style="font-size: 20px;">
|
||||
Prover
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="219" y="48" fill="#FFFFFF" font-family="Helvetica" font-size="20px" text-anchor="middle">
|
||||
Prover
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<ellipse cx="400" cy="42" rx="40" ry="40" fill="#8da4c1" stroke="#243f5f" stroke-width="5" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 42px; margin-left: 361px;">
|
||||
<div data-drawio-colors="color: #FFFFFF; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<font style="font-size: 20px;">
|
||||
Verifier
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="400" y="48" fill="#FFFFFF" font-family="Helvetica" font-size="20px" text-anchor="middle">
|
||||
Verifier
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 96 87 L 146 87 L 176 117 L 176 187 L 96 187 L 96 87 Z" fill="#8da4c1" stroke="#243f5f" stroke-width="5" stroke-miterlimit="10" pointer-events="none"/>
|
||||
<path d="M 146 87 L 146 117 L 176 117 Z" fill-opacity="0.05" fill="#000000" stroke="none" pointer-events="none"/>
|
||||
<path d="M 146 87 L 146 117 L 176 117" fill="none" stroke="#243f5f" stroke-width="5" stroke-miterlimit="10" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 137px; margin-left: 97px;">
|
||||
<div data-drawio-colors="color: #FFFFFF; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
<font style="font-size: 14px;">
|
||||
Data
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="136" y="143" fill="#FFFFFF" font-family="Helvetica" font-size="20px" text-anchor="middle">
|
||||
Data
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 119.66 116.94 L 120.85 116.94 L 120.85 122.87 C 120.85 123.09 120.73 123.29 120.53 123.4 C 120.44 123.44 120.35 123.47 120.25 123.47 C 120.13 123.47 120.02 123.43 119.92 123.36 L 116.13 120.76 L 112.34 123.36 C 112.16 123.49 111.93 123.5 111.73 123.4 C 111.53 123.29 111.41 123.09 111.41 122.87 L 111.41 116.94 L 112.6 116.94 L 112.6 121.74 L 115.79 119.55 C 116 119.41 116.26 119.41 116.47 119.55 L 119.66 121.74 Z M 107.19 107.41 C 107.19 102.48 111.2 98.47 116.13 98.47 C 121.06 98.47 125.07 102.48 125.07 107.41 C 125.07 112.34 121.06 116.35 116.13 116.35 C 111.2 116.35 107.19 112.34 107.19 107.41 Z M 106 107.41 C 106 112.99 110.54 117.54 116.13 117.54 C 121.72 117.54 126.26 112.99 126.26 107.41 C 126.26 101.82 121.72 97.28 116.13 97.28 C 110.54 97.28 106 101.82 106 107.41 Z M 110.92 107.67 C 110.92 107.39 111.15 107.16 111.42 107.16 C 111.7 107.16 111.93 107.39 111.93 107.67 C 111.93 107.94 111.7 108.17 111.42 108.17 C 111.15 108.17 110.92 107.94 110.92 107.67 Z M 109.73 107.67 C 109.73 108.6 110.49 109.36 111.42 109.36 C 112.36 109.36 113.12 108.6 113.12 107.67 C 113.12 106.73 112.36 105.97 111.42 105.97 C 110.49 105.97 109.73 106.73 109.73 107.67 Z M 122.46 108.1 L 115.96 108.1 C 115.7 108.1 115.46 108.27 115.39 108.52 C 115 109.81 113.85 110.68 112.52 110.68 C 110.86 110.68 109.51 109.33 109.51 107.67 C 109.51 106.01 110.86 104.65 112.52 104.65 C 113.85 104.65 115 105.52 115.39 106.81 C 115.46 107.06 115.7 107.23 115.96 107.23 L 117.07 107.23 C 117.24 107.23 117.39 107.16 117.51 107.04 L 118.01 106.5 L 118.52 107.04 C 118.63 107.16 118.79 107.23 118.95 107.23 L 119.58 107.23 C 119.75 107.23 119.9 107.16 120.02 107.04 L 120.52 106.5 L 121.03 107.04 C 121.14 107.16 121.3 107.23 121.46 107.23 L 122.19 107.23 L 122.8 107.73 Z M 122.78 106.18 C 122.68 106.09 122.54 106.04 122.4 106.04 L 121.72 106.04 L 120.96 105.22 C 120.73 104.98 120.31 104.98 120.09 105.22 L 119.32 106.04 L 119.21 106.04 L 118.45 105.22 C 118.33 105.1 118.18 105.03 118.01 105.03 C 117.85 105.03 117.69 105.1 117.58 105.22 L 116.81 106.04 L 116.37 106.04 C 115.72 104.48 114.23 103.46 112.52 103.46 C 110.2 103.46 108.32 105.35 108.32 107.67 C 108.32 109.98 110.2 111.87 112.52 111.87 C 114.23 111.87 115.72 110.85 116.37 109.29 L 122.72 109.29 C 122.89 109.29 123.04 109.22 123.16 109.1 L 124.1 108.07 C 124.21 107.95 124.26 107.79 124.25 107.62 C 124.24 107.46 124.16 107.31 124.04 107.21 Z" fill="#ffffff" stroke="none" pointer-events="none"/>
|
||||
<path d="M 278 87 L 328 87 L 358 117 L 358 187 L 278 187 L 278 87 Z" fill="#8da4c1" stroke="#243f5f" stroke-width="5" stroke-miterlimit="10" pointer-events="none"/>
|
||||
<path d="M 328 87 L 328 117 L 358 117 Z" fill-opacity="0.05" fill="#000000" stroke="none" pointer-events="none"/>
|
||||
<path d="M 328 87 L 328 117 L 358 117" fill="none" stroke="#243f5f" stroke-width="5" stroke-miterlimit="10" pointer-events="none"/>
|
||||
<path d="M 301.66 116.94 L 302.85 116.94 L 302.85 122.87 C 302.85 123.09 302.73 123.29 302.53 123.4 C 302.44 123.44 302.35 123.47 302.25 123.47 C 302.13 123.47 302.02 123.43 301.92 123.36 L 298.13 120.76 L 294.34 123.36 C 294.16 123.49 293.93 123.5 293.73 123.4 C 293.53 123.29 293.41 123.09 293.41 122.87 L 293.41 116.94 L 294.6 116.94 L 294.6 121.74 L 297.79 119.55 C 298 119.41 298.26 119.41 298.47 119.55 L 301.66 121.74 Z M 289.19 107.41 C 289.19 102.48 293.2 98.47 298.13 98.47 C 303.06 98.47 307.07 102.48 307.07 107.41 C 307.07 112.34 303.06 116.35 298.13 116.35 C 293.2 116.35 289.19 112.34 289.19 107.41 Z M 288 107.41 C 288 112.99 292.54 117.54 298.13 117.54 C 303.72 117.54 308.26 112.99 308.26 107.41 C 308.26 101.82 303.72 97.28 298.13 97.28 C 292.54 97.28 288 101.82 288 107.41 Z M 292.92 107.67 C 292.92 107.39 293.15 107.16 293.42 107.16 C 293.7 107.16 293.93 107.39 293.93 107.67 C 293.93 107.94 293.7 108.17 293.42 108.17 C 293.15 108.17 292.92 107.94 292.92 107.67 Z M 291.73 107.67 C 291.73 108.6 292.49 109.36 293.42 109.36 C 294.36 109.36 295.12 108.6 295.12 107.67 C 295.12 106.73 294.36 105.97 293.42 105.97 C 292.49 105.97 291.73 106.73 291.73 107.67 Z M 304.46 108.1 L 297.96 108.1 C 297.7 108.1 297.46 108.27 297.39 108.52 C 297 109.81 295.85 110.68 294.52 110.68 C 292.86 110.68 291.51 109.33 291.51 107.67 C 291.51 106.01 292.86 104.65 294.52 104.65 C 295.85 104.65 297 105.52 297.39 106.81 C 297.46 107.06 297.7 107.23 297.96 107.23 L 299.07 107.23 C 299.24 107.23 299.39 107.16 299.51 107.04 L 300.01 106.5 L 300.52 107.04 C 300.63 107.16 300.79 107.23 300.95 107.23 L 301.58 107.23 C 301.75 107.23 301.9 107.16 302.02 107.04 L 302.52 106.5 L 303.03 107.04 C 303.14 107.16 303.3 107.23 303.46 107.23 L 304.19 107.23 L 304.8 107.73 Z M 304.78 106.18 C 304.68 106.09 304.54 106.04 304.4 106.04 L 303.72 106.04 L 302.96 105.22 C 302.73 104.98 302.31 104.98 302.09 105.22 L 301.32 106.04 L 301.21 106.04 L 300.45 105.22 C 300.33 105.1 300.18 105.03 300.01 105.03 C 299.85 105.03 299.69 105.1 299.58 105.22 L 298.81 106.04 L 298.37 106.04 C 297.72 104.48 296.23 103.46 294.52 103.46 C 292.2 103.46 290.32 105.35 290.32 107.67 C 290.32 109.98 292.2 111.87 294.52 111.87 C 296.23 111.87 297.72 110.85 298.37 109.29 L 304.72 109.29 C 304.89 109.29 305.04 109.22 305.16 109.1 L 306.1 108.07 C 306.21 107.95 306.26 107.79 306.25 107.62 C 306.24 107.46 306.16 107.31 306.04 107.21 Z" fill="#ffffff" stroke="none" pointer-events="none"/>
|
||||
<rect x="288" y="132" width="64" height="15" fill="#a27f3c" stroke="none" pointer-events="none"/>
|
||||
<rect x="288" y="148.78" width="38" height="15" fill="#a27f3c" stroke="none" pointer-events="none"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 48px; height: 1px; padding-top: 131px; margin-left: 290px;">
|
||||
<div data-drawio-colors="color: #000000; " style="box-sizing: border-box; font-size: 0px; text-align: left;">
|
||||
<div style="display: inline-block; font-size: 14px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
<span style="color: rgb(255, 255, 255); font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;">
|
||||
Redacted
|
||||
</span>
|
||||
<br style="border-color: var(--border-color); color: rgb(255, 255, 255); font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"/>
|
||||
<span style="color: rgb(255, 255, 255); font-family: Helvetica; font-size: 14px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;">
|
||||
Data
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="290" y="145" fill="#000000" font-family="Helvetica" font-size="14px">
|
||||
Redacte...
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Text is not SVG - cannot display
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 25 KiB |
@@ -1,122 +0,0 @@
|
||||
<svg host="65bd71144e" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="394px" height="254px" viewBox="-0.5 -0.5 394 254" content="<mxfile><diagram id="KXpQsmKgV8OItgqWGwwX" name="Page-1">7Vjbbts4EP0aPa6hiyXbj4kTtw9bJECA3fZpQUu0RIQSXYq+7dfvUCIlSpQTJXGaoNgYiDnD4W3mnOGYTrDMj1842mbfWIKp47vJ0QluHN+PwgX8l4pTrZiG81qRcpLUKq9VPJB/sVK6SrsjCS47hoIxKsi2q4xZUeBYdHSIc3bomm0Y7a66RSm2FA8xorb2b5KIrNbO/Vmr/4pJmumVvUgdOEfaWJ2kzFDCDoYquHWCJWdM1K38uMRU+k77pR63OtPbbIzjQowZoPxeipM+G07gqEosWAFf15nIKUgeNPGRiO9G+we03UmopBsZYFcLJy0Ugp++m4IxSortsErS4zasECuUEyoVXzHdY0FipDoUKHxtuGSU8eoEwar6A30pOHtsIhRWGsTFlUQAKGKKypLEWr0iVJ/S9qJybMl2PFaO8hXwEE+xsprWKulCY5jy/BfMcgznAwOOKRJk30UTUqBMG7s2btBQoRsOo9rLHtGdmtTxIyqUbzoBjn7umO74o6y8eAUGcNxjdXLdD61Ufj9gvsdcTwcbqWesO230UAoklKA5ZETghy2q3HWANNAFEiq3NTM35IgTK1hTuUMIiBHW+c3VdOk1lkaPPw024eYFwDgbXzipwMcnY6d6NYFPXfFgpAOlyoxMoHVvibX3mTlrU+4CLB7FWVwkthEoX0rrqU3r2UfRevp+tL7n7BfSeoisA4R/K1TOZYwL8N2bhR9F+MUr+d5y/IdJ8WG+g3CPOYHNYf6ZuKyO1xLZfSqel6OoGnrPSEU0jYJg3kFB1AtvnTXUILPsemYeb9abqM5I1kQVVJrjjEJPZOWQGySQBSkoRLc1nMQImq9R/JhytiuSu52gRIao0ieIP97BKCIqYE3c8HdKAa47HLRnckAz7k23/mWygPdkFnhvxqtdmnR3x13dTT3SCOPqkXgH1Wvykvt/Zt//Ote/d3Zp0okG2GJcegHnoZNhtpUG5fl1gllvnbD3I/G5fUVhD7r1Dl6bombvV+b8BXfahvxf6IzPckHwYb9s9FJPAEE/Bek4e2bI3bhxSasM/HgRh9iGhp56PQZg4TmAObe+s1g6i8BA2Lq/xHOog9CILry6aFJ504y6UiFK0kLmTQi4LNyuZaABS/RKdeQkSeg5PFc3eJUe7ezvXeQJ5hLXbtSrlUIbkcEAIoNLINIbQGS/cnrEIs6UD1ldDi2bh8cB58BnJZe7TjlKCG77BsJsP2f1jBNUZk0EdfD/RGtM71lJBGESBGsmBMsH0CHYdghEBhCNQHu+ltXh3aE8WF0+mN/usbyDFJpVcZkfU/kePEGHcjqJ5V42sBuB/8lRgdJq6UsAxutdV3MbML470ZWxiRk/mszmL4YNiO2LbX3/tc/ewe1/</diagram></mxfile>">
|
||||
<defs/>
|
||||
<g>
|
||||
<path d="M 95.84 42 L 143.16 42" fill="none" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 87.59 42 L 98.59 36.5 L 95.84 42 L 98.59 47.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 151.41 42 L 140.41 47.5 L 143.16 42 L 140.41 36.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<ellipse cx="42" cy="42" rx="40" ry="40" fill="#8da4c1" stroke="#243f5f" stroke-width="4" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 42px; margin-left: 3px;">
|
||||
<div data-drawio-colors="color: #FFFFFF; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<font style="font-size: 20px;">
|
||||
Server
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="42" y="48" fill="#FFFFFF" font-family="Helvetica" font-size="20px" text-anchor="middle">
|
||||
Server
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 250.84 42 L 298.16 42" fill="none" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 242.59 42 L 253.59 36.5 L 250.84 42 L 253.59 47.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 306.41 42 L 295.41 47.5 L 298.16 42 L 295.41 36.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<ellipse cx="197" cy="42" rx="40" ry="40" fill="#8da4c1" stroke="#243f5f" stroke-width="4" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 42px; margin-left: 158px;">
|
||||
<div data-drawio-colors="color: #FFFFFF; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<font style="font-size: 20px;">
|
||||
Prover
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="197" y="48" fill="#FFFFFF" font-family="Helvetica" font-size="20px" text-anchor="middle">
|
||||
Prover
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 120 138.16 L 120 42" fill="none" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 120 146.41 L 114.5 135.41 L 120 138.16 L 125.5 135.41 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 82 152 L 132 152 L 162 182 L 162 252 L 82 252 L 82 152 Z" fill="#8da4c1" stroke="#243f5f" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<path d="M 132 152 L 132 182 L 162 182 Z" fill-opacity="0.05" fill="#000000" stroke="none" pointer-events="all"/>
|
||||
<path d="M 132 152 L 132 182 L 162 182" fill="none" stroke="#243f5f" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 202px; margin-left: 83px;">
|
||||
<div data-drawio-colors="color: #FFFFFF; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
Data
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="122" y="208" fill="#FFFFFF" font-family="Helvetica" font-size="20px" text-anchor="middle">
|
||||
Data
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<path d="M 352 82 Q 352 132 297 139.5 Q 242 147 193.84 147" fill="none" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="stroke"/>
|
||||
<path d="M 185.59 147 L 196.59 141.5 L 193.84 147 L 196.59 152.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="5" stroke-miterlimit="10" pointer-events="all"/>
|
||||
<ellipse cx="352" cy="42" rx="40" ry="40" fill="#8da4c1" stroke="#243f5f" stroke-width="4" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 42px; margin-left: 313px;">
|
||||
<div data-drawio-colors="color: #FFFFFF; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<font style="font-size: 20px;">
|
||||
Verifier
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="352" y="48" fill="#FFFFFF" font-family="Helvetica" font-size="20px" text-anchor="middle">
|
||||
Verifier
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="150" y="132" width="30" height="30" fill="none" stroke="none" pointer-events="all"/>
|
||||
<g transform="translate(-0.5 -0.5)">
|
||||
<switch>
|
||||
<foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 147px; margin-left: 151px;">
|
||||
<div data-drawio-colors="color: #FFFFFF; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 20px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||
<font color="#2c9c5e" size="1">
|
||||
<b style="font-size: 50px;">
|
||||
✓
|
||||
</b>
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</foreignObject>
|
||||
<text x="165" y="153" fill="#FFFFFF" font-family="Helvetica" font-size="20px" text-anchor="middle">
|
||||
✓
|
||||
</text>
|
||||
</switch>
|
||||
</g>
|
||||
<rect x="92" y="162" width="20.26" height="26.78" fill="none" stroke="none" pointer-events="all"/>
|
||||
<path d="M 105.66 181.94 L 106.85 181.94 L 106.85 187.87 C 106.85 188.09 106.73 188.29 106.53 188.4 C 106.44 188.44 106.35 188.47 106.25 188.47 C 106.13 188.47 106.02 188.43 105.92 188.36 L 102.13 185.76 L 98.34 188.36 C 98.16 188.49 97.93 188.5 97.73 188.4 C 97.53 188.29 97.41 188.09 97.41 187.87 L 97.41 181.94 L 98.6 181.94 L 98.6 186.74 L 101.79 184.55 C 102 184.41 102.26 184.41 102.47 184.55 L 105.66 186.74 Z M 93.19 172.41 C 93.19 167.48 97.2 163.47 102.13 163.47 C 107.06 163.47 111.07 167.48 111.07 172.41 C 111.07 177.34 107.06 181.35 102.13 181.35 C 97.2 181.35 93.19 177.34 93.19 172.41 Z M 92 172.41 C 92 177.99 96.54 182.54 102.13 182.54 C 107.72 182.54 112.26 177.99 112.26 172.41 C 112.26 166.82 107.72 162.28 102.13 162.28 C 96.54 162.28 92 166.82 92 172.41 Z M 96.92 172.67 C 96.92 172.39 97.15 172.16 97.42 172.16 C 97.7 172.16 97.93 172.39 97.93 172.67 C 97.93 172.94 97.7 173.17 97.42 173.17 C 97.15 173.17 96.92 172.94 96.92 172.67 Z M 95.73 172.67 C 95.73 173.6 96.49 174.36 97.42 174.36 C 98.36 174.36 99.12 173.6 99.12 172.67 C 99.12 171.73 98.36 170.97 97.42 170.97 C 96.49 170.97 95.73 171.73 95.73 172.67 Z M 108.46 173.1 L 101.96 173.1 C 101.7 173.1 101.46 173.27 101.39 173.52 C 101 174.81 99.85 175.68 98.52 175.68 C 96.86 175.68 95.51 174.33 95.51 172.67 C 95.51 171.01 96.86 169.65 98.52 169.65 C 99.85 169.65 101 170.52 101.39 171.81 C 101.46 172.06 101.7 172.23 101.96 172.23 L 103.07 172.23 C 103.24 172.23 103.39 172.16 103.51 172.04 L 104.01 171.5 L 104.52 172.04 C 104.63 172.16 104.79 172.23 104.95 172.23 L 105.58 172.23 C 105.75 172.23 105.9 172.16 106.02 172.04 L 106.52 171.5 L 107.03 172.04 C 107.14 172.16 107.3 172.23 107.46 172.23 L 108.19 172.23 L 108.8 172.73 Z M 108.78 171.18 C 108.68 171.09 108.54 171.04 108.4 171.04 L 107.72 171.04 L 106.96 170.22 C 106.73 169.98 106.31 169.98 106.09 170.22 L 105.32 171.04 L 105.21 171.04 L 104.45 170.22 C 104.33 170.1 104.18 170.03 104.01 170.03 C 103.85 170.03 103.69 170.1 103.58 170.22 L 102.81 171.04 L 102.37 171.04 C 101.72 169.48 100.23 168.46 98.52 168.46 C 96.2 168.46 94.32 170.35 94.32 172.67 C 94.32 174.98 96.2 176.87 98.52 176.87 C 100.23 176.87 101.72 175.85 102.37 174.29 L 108.72 174.29 C 108.89 174.29 109.04 174.22 109.16 174.1 L 110.1 173.07 C 110.21 172.95 110.26 172.79 110.25 172.62 C 110.24 172.46 110.16 172.31 110.04 172.21 Z" fill="#ffffff" stroke="none" pointer-events="all"/>
|
||||
</g>
|
||||
<switch>
|
||||
<g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/>
|
||||
<a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank">
|
||||
<text text-anchor="middle" font-size="10px" x="50%" y="100%">
|
||||
Text is not SVG - cannot display
|
||||
</text>
|
||||
</a>
|
||||
</switch>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 20 KiB |
@@ -1,45 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="144"
|
||||
width="144"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="rust-logo-blk.svg"
|
||||
inkscape:version="1.3 (0e150ed, 2023-07-21)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="1.6388889"
|
||||
inkscape:cx="71.694915"
|
||||
inkscape:cy="72"
|
||||
inkscape:window-width="2216"
|
||||
inkscape:window-height="1207"
|
||||
inkscape:window-x="42"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg2" />
|
||||
<path
|
||||
d="m 72.880507,6.6838423 c -36.102773,0 -65.4864952,29.3975767 -65.4864952,65.4864957 0,36.088922 29.3975762,65.486492 65.4864952,65.486492 36.088923,0 65.486503,-29.39757 65.486503,-65.486492 0,-36.088919 -29.39758,-65.4864957 -65.486503,-65.4864957 z m -0.09698,5.8185587 a 4.2946507,4.3085044 0 0 1 4.183821,4.308505 4.3085044,4.3085044 0 0 1 -8.617008,0 4.3085044,4.3085044 0 0 1 4.433187,-4.308505 z m 9.863843,7.093101 a 53.018155,53.018155 0 0 1 36.29673,25.851026 l -5.08431,11.470874 c -0.87279,1.981081 0.0277,4.308504 1.99493,5.195142 l 9.78072,4.336211 a 53.018155,53.018155 0 0 1 0.11083,9.198865 h -5.44451 c -0.54029,0 -0.76195,0.360197 -0.76195,0.886638 v 2.493668 c 0,5.873974 -3.31104,7.162369 -6.22032,7.481004 -2.77074,0.318636 -5.83241,-1.163712 -6.22031,-2.853864 -1.63474,-9.185011 -4.35007,-11.138385 -8.644721,-14.532544 5.333681,-3.380306 10.875161,-8.381496 10.875161,-15.058985 0,-7.217784 -4.94577,-11.761801 -8.31222,-13.992249 -4.737973,-3.117085 -9.974676,-3.740502 -11.387755,-3.740502 H 33.383575 A 53.018155,53.018155 0 0 1 63.044372,19.595502 l 6.635928,6.954563 c 1.496201,1.56547 3.976015,1.634738 5.541485,0.124684 z M 21.413968,51.486747 a 4.3085044,4.3085044 0 0 1 4.183821,4.308504 4.3085045,4.3085045 0 0 1 -8.617009,0 4.3085044,4.3085044 0 0 1 4.433188,-4.308504 z m 102.725272,0.193952 a 4.3085044,4.3085044 0 0 1 4.18382,4.308504 4.308505,4.308505 0 0 1 -8.61701,0 4.3085044,4.3085044 0 0 1 4.43319,-4.308504 z m -94.606997,0.692685 h 7.508712 V 86.231856 H 21.884994 a 53.018155,53.018155 0 0 1 -1.71786,-20.240273 l 9.281987,-4.128406 c 1.98108,-0.886638 2.881572,-3.200208 1.994934,-5.181288 z m 31.337096,0.360197 h 17.885142 c 0.928199,0 6.525098,1.066736 6.525098,5.26441 0,3.477282 -4.29465,4.724116 -7.827347,4.724116 H 60.855485 Z m 0,24.327118 H 74.57066 c 1.246834,0 6.691343,0.360196 8.423057,7.31476 0.540295,2.133471 1.745568,9.088035 2.562937,11.318482 0.817369,2.493668 4.128406,7.481009 7.661102,7.481009 h 22.359894 a 53.018155,53.018155 0 0 1 -4.90422,5.68002 l -9.10189,-1.95338 c -2.119613,-0.45717 -4.211524,0.9005 -4.668696,3.02011 l -2.161179,10.08551 A 53.018155,53.018155 0 0 1 50.53447,119.7994 l -2.161179,-10.0855 c -0.457172,-2.11962 -2.535229,-3.47728 -4.654847,-3.02011 l -8.907937,1.91181 a 53.018155,53.018155 0 0 1 -4.599432,-5.43065 h 43.320557 c 0.48488,0 0.817369,-0.0831 0.817369,-0.5403 V 87.312446 c 0,-0.443319 -0.332489,-0.540295 -0.817369,-0.540295 H 60.855485 Z M 40.878433,112.15215 a 4.3085044,4.3085044 0 0 1 4.183821,4.30851 4.3085045,4.3085045 0 0 1 -8.617009,0 4.3085044,4.3085044 0 0 1 4.433188,-4.30851 z m 63.796347,0.19395 a 4.3085044,4.3085044 0 0 1 4.18382,4.30851 4.308505,4.308505 0 0 1 -8.61701,0 4.3085044,4.3085044 0 0 1 4.43319,-4.30851 z"
|
||||
id="path1"
|
||||
style="stroke-width:1.38537" />
|
||||
<path
|
||||
d="M 134.70962,72.170338 A 61.829116,61.829116 0 0 1 72.880507,133.99945 61.829116,61.829116 0 0 1 11.051392,72.170338 61.829116,61.829116 0 0 1 72.880507,10.341222 61.829116,61.829116 0 0 1 134.70962,72.170338 Z m -1.16371,-5.970949 9.64219,5.970949 -9.64219,5.97095 8.28453,7.744225 -10.61195,3.976016 6.62207,9.212718 -11.20765,1.828693 4.71026,10.33487 -11.34619,-0.40176 2.6045,11.05526 -11.05526,-2.6045 0.40175,11.34619 -10.33486,-4.71026 -1.828694,11.20765 -9.212719,-6.62207 -3.976015,10.61195 -7.744225,-8.28453 -5.97095,9.64219 -5.97095,-9.64219 -7.744224,8.28453 -3.976016,-10.61195 -9.212718,6.62207 -1.82869,-11.20765 -10.334869,4.71026 0.401758,-11.34619 -11.055263,2.6045 2.604498,-11.05526 -11.34619,0.40176 4.710262,-10.33487 L 7.9204529,99.074247 14.542527,89.861529 3.9305839,85.885513 12.215104,78.141288 2.5729201,72.170338 12.215104,66.199389 3.9305839,58.455164 14.542527,54.479148 7.9204529,45.26643 19.128105,43.43774 14.417843,33.102871 l 11.34619,0.401758 -2.604498,-11.055262 11.055263,2.604498 -0.401758,-11.346191 10.334869,4.710263 1.82869,-11.2076536 9.212718,6.6220746 3.976016,-10.6119436 7.744224,8.2845196 5.97095,-9.6421834 5.97095,9.6421834 7.744225,-8.2845196 3.976015,10.6119436 9.212719,-6.6220746 1.828694,11.2076536 10.33486,-4.710263 -0.40175,11.346191 11.05526,-2.604498 -2.6045,11.055262 11.34619,-0.401758 -4.71026,10.334869 11.20765,1.82869 -6.62207,9.212718 10.61195,3.976016 z"
|
||||
fill-rule="evenodd"
|
||||
stroke="#000000"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="4.15611"
|
||||
id="path2" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.3 KiB |
@@ -1,40 +0,0 @@
|
||||
import type { Config } from "tailwindcss";
|
||||
|
||||
const config: Config = {
|
||||
content: [
|
||||
"./pages/**/*.{js,ts,jsx,tsx,mdx}",
|
||||
"./components/**/*.{js,ts,jsx,tsx,mdx}",
|
||||
"./app/**/*.{js,ts,jsx,tsx,mdx}",
|
||||
],
|
||||
theme: {
|
||||
extend: {
|
||||
backgroundImage: {
|
||||
"gradient-radial": "radial-gradient(var(--tw-gradient-stops))",
|
||||
"gradient-conic": "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))",
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ["var(--font-sans)"],
|
||||
inter: ["var(--font-inter)"],
|
||||
},
|
||||
colors: {
|
||||
primary: "#243F5F", // nano-blue
|
||||
gold: "#E8C075", // nano-yellow
|
||||
// brown: "#A27F3C", // nano-brown
|
||||
white: {
|
||||
DEFAULT: "#FFFFFF",
|
||||
100: "#F6F7F7",
|
||||
},
|
||||
gray: {
|
||||
DEFAULT: "#F5F6F6",
|
||||
100: "#F0F0F0",
|
||||
},
|
||||
brown: {
|
||||
50: "#A27F3C",
|
||||
70: "#614C24",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [],
|
||||
};
|
||||
export default config;
|
||||
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
"noEmit": true,
|
||||
"esModuleInterop": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "bundler",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"jsx": "preserve",
|
||||
"incremental": true,
|
||||
"plugins": [
|
||||
{
|
||||
"name": "next"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"@/*": ["./*"]
|
||||
}
|
||||
},
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||