mirror of
https://github.com/privacy-scaling-explorations/pse.dev.git
synced 2026-01-09 14:18:02 -05:00
@@ -4,7 +4,6 @@ import Image from "next/image"
|
||||
import Link from "next/link"
|
||||
import PSELogo from "@/public/icons/archstar.webp"
|
||||
import { motion } from "framer-motion"
|
||||
import { Divide } from "lucide-react"
|
||||
|
||||
import { siteConfig } from "@/config/site"
|
||||
import { Button } from "@/components/ui/button"
|
||||
@@ -47,7 +46,7 @@ export default function IndexPage({ params: { lang } }: any) {
|
||||
</div>
|
||||
}
|
||||
actions={
|
||||
<Link href={`/projects`} className="group flex items-center gap-2">
|
||||
<Link href={`/projects`} className="flex items-center gap-2 group">
|
||||
<Button className="w-full sm:w-auto">
|
||||
<div className="flex items-center gap-1">
|
||||
<span className="text-base font-medium uppercase">
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
import { Metadata, ResolvingMetadata } from "next"
|
||||
import Image from "next/image"
|
||||
import Link from "next/link"
|
||||
import { projects } from "@/data/projects"
|
||||
import GithubVector from "@/public/social-medias/github-fill.svg"
|
||||
import GlobalVector from "@/public/social-medias/global-line.svg"
|
||||
import TwitterVector from "@/public/social-medias/twitter-fill.svg"
|
||||
|
||||
import { siteConfig } from "@/config/site"
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
import { AppContent } from "@/components/ui/app-content"
|
||||
import { Markdown, createMarkdownElement } from "@/components/ui/markdown"
|
||||
import { WikiCard } from "@/components/cards/wiki-card"
|
||||
@@ -16,7 +12,7 @@ import { Icons } from "@/components/icons"
|
||||
import DiscoverMoreProjects from "@/components/project/discover-more-projects"
|
||||
import { ProjectTags } from "@/components/project/project-detail-tags"
|
||||
import ProjectExtraLinks from "@/components/project/project-extra-links"
|
||||
import { ThemesStatusMapping } from "@/components/project/project-filters-bar"
|
||||
import { ProjectLinkIconMap } from "@/components/project/project-links"
|
||||
import { WikiSideNavigation } from "@/components/wiki-side-navigation"
|
||||
import { useTranslation } from "@/app/i18n"
|
||||
import { LocaleTypes } from "@/app/i18n/settings"
|
||||
@@ -69,7 +65,6 @@ export default async function ProjectDetailPage({ params }: PageProps) {
|
||||
"projects/" + currProject.id
|
||||
)
|
||||
|
||||
const { github, twitter, website } = currProject.links ?? {}
|
||||
const hasSocialLinks = Object.keys(currProject?.links ?? {}).length > 0
|
||||
|
||||
const editPageURL = siteConfig?.editProjectPage(currProject.id, lang)
|
||||
@@ -110,44 +105,25 @@ export default async function ProjectDetailPage({ params }: PageProps) {
|
||||
</div>
|
||||
{hasSocialLinks && (
|
||||
<div className="flex flex-wrap items-center justify-start gap-6 pt-4">
|
||||
{github && (
|
||||
<Link href={github} target="_blank" rel="noreferrer">
|
||||
<div className="flex items-center gap-2">
|
||||
<Image
|
||||
src={GithubVector}
|
||||
alt=""
|
||||
width={16}
|
||||
height={16}
|
||||
/>
|
||||
<p className="text-slate-600">Github</p>
|
||||
</div>
|
||||
</Link>
|
||||
)}
|
||||
{website && (
|
||||
<Link href={website} target="_blank" rel="noreferrer">
|
||||
<div className="flex items-center gap-2">
|
||||
<Image
|
||||
src={GlobalVector}
|
||||
alt=""
|
||||
width={16}
|
||||
height={16}
|
||||
/>
|
||||
<p className="text-slate-600">Website</p>
|
||||
</div>
|
||||
</Link>
|
||||
)}
|
||||
{twitter && (
|
||||
<Link href={twitter} target="_blank" rel="noreferrer">
|
||||
<div className="flex items-center gap-2">
|
||||
<Image
|
||||
src={TwitterVector}
|
||||
alt=""
|
||||
width={16}
|
||||
height={16}
|
||||
/>
|
||||
<p className="text-slate-600">Twitter</p>
|
||||
</div>
|
||||
</Link>
|
||||
{Object?.entries(currProject.links ?? {})?.map(
|
||||
([key, value]) => {
|
||||
return (
|
||||
<Link
|
||||
key={key}
|
||||
href={value ?? ""}
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
className="group"
|
||||
>
|
||||
<div className="flex items-center gap-2">
|
||||
{ProjectLinkIconMap?.[key]}
|
||||
<p className="capitalize duration-200 text-slate-600 group-hover:text-orange">
|
||||
{key}
|
||||
</p>
|
||||
</div>
|
||||
</Link>
|
||||
)
|
||||
}
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"description": "### Overview\nUniRep is a zero-knowledge protocol that securely manages user data through anonymous identifiers, enabling trustless interactions and enhanced user privacy in applications. UniRep expands the notion of reputation to include various user data aspects, such as preferences, activity, alignments, and ownership.\n\nUsing anonymous identifiers [(epoch keys)](https://developer.unirep.io/docs/protocol/epoch-key) the protocol allows for trustless engagement with applications while preserving user privacy. This approach promotes non-custodial applications that don't hold user data, reducing data breach risks and emphasizing security for both users and developers.\n\nUniRep was originally proposed by BarryWhiteHat in this [ethresear.ch](https://ethresear.ch) post\n\n### Features\n\nUniRep aims to be the ultimate foundation for constructing tailored, yet fully compatible, zero-knowledge (zk) applications. It functions as a powerful memory layer for zk, offering private, non-repudiable data storage and retrieval capabilities. With UniRep, users can effortlessly receive data, prove facts about their information, and store the results while enjoying robust privacy assurances. The protocol empowers developers to create bespoke zk applications without compromising on interoperability and efficiency.\n\nKey UniRep features include:\n\n| | |\n| -------- | ------- |\n| **Data Storage** | Unirep allows small amounts of data to be associated with anonymous users. Applications can conditionally associate data, like requiring a user to prove control of an Ethereum address before attesting to it. |\n| **Extensible Proofs** | The system is designed to be extended with custom application logic. For example, an application might require proof of Ethereum address control to [sign up](https://github.com/Unirep/zketh/blob/b7e0fdf3dcc1b3f97673da20837ed9c7d3e27c9f/packages/circuits/circuits/signupWithAddress.circom). |\n| **Trustless Interoperability** | Applications can interconnect by having users create proofs using publicly available state. |\n| **No Forced Data Sharing** | Unirep applications cannot see what data belongs to what user, unless the user reveals it. User data also cannot be changed unless the user provides the application with an [epoch key](https://developer.unirep.io/docs/protocol/epoch-key). |\n\n### Applications\n\n - Anon Transfer - [Website](https://anon-transfer.online/) | [GitHub](https://github.com/vivianjeng/anon-transfer)\n - Trustlist - [Website](https://trustlist.xyz/) | [GitHub](https://github.com/trustlist/trustlist)\n - Unirep Social TW - [GitHub](https://github.com/social-tw/social-tw-website)\n - Unirep Social - [Website](https://unirep.social/) | [GitHub](https://github.com/Unirep/Unirep-Social)\n - Sacred Protocol - [Website](https://www.sacredprotocol.com/)\n - My-Badge - [GitHub](https://github.com/kittybest/my-badge)\n - Voteathon - [Website](https://voteathon.org/) | [GitHub](https://github.com/NicoSerranoP/voteathon)",
|
||||
"description": "### Overview\n\nUniRep is a zero-knowledge protocol that securely manages user data through anonymous identifiers, enabling trustless interactions and enhanced user privacy in applications. UniRep expands the notion of reputation to include various user data aspects, such as preferences, activity, alignments, and ownership.\n\nUsing anonymous identifiers [(epoch keys)](https://developer.unirep.io/docs/protocol/epoch-key) the protocol allows for trustless engagement with applications while preserving user privacy. This approach promotes non-custodial applications that don't hold user data, reducing data breach risks and emphasizing security for both users and developers.\n\nUniRep was originally proposed by BarryWhiteHat in this [ethresear.ch](https://ethresear.ch) post\n\n### Features\n\nUniRep aims to be the ultimate foundation for constructing tailored, yet fully compatible, zero-knowledge (zk) applications. It functions as a powerful memory layer for zk, offering private, non-repudiable data storage and retrieval capabilities. With UniRep, users can effortlessly receive data, prove facts about their information, and store the results while enjoying robust privacy assurances. The protocol empowers developers to create bespoke zk applications without compromising on interoperability and efficiency.\n\nKey UniRep features include:\n\n- **Data Storage**: Unirep allows small amounts of data to be associated with anonymous users. Applications can conditionally associate data, like requiring a user to prove control of an Ethereum address before attesting to it.\n\n- **Extensible Proofs**: The system is designed to be extended with custom application logic. For example, an application might require proof of Ethereum address control to [sign up](https://github.com/Unirep/zketh/blob/b7e0fdf3dcc1b3f97673da20837ed9c7d3e27c9f/packages/circuits/circuits/signupWithAddress.circom).\n\n- **Trustless Interoperability**: Applications can interconnect by having users create proofs using publicly available state.\n\n- **No Forced Data Sharing**: Unirep applications cannot see what data belongs to what user, unless the user reveals it. User data also cannot be changed unless the user provides the application with an [epoch key](https://developer.unirep.io/docs/protocol/epoch-key).\n\n### Applications\n\n- Anon Transfer - [Website](https://anon-transfer.online/) | [GitHub](https://github.com/vivianjeng/anon-transfer)\n- Trustlist - [Website](https://trustlist.xyz/) | [GitHub](https://github.com/trustlist/trustlist)\n- Unirep Social TW - [GitHub](https://github.com/social-tw/social-tw-website)\n- Unirep Social - [Website](https://unirep.social/) | [GitHub](https://github.com/Unirep/Unirep-Social)\n- Sacred Protocol - [Website](https://www.sacredprotocol.com/)\n- My-Badge - [GitHub](https://github.com/kittybest/my-badge)\n- Voteathon - [Website](https://voteathon.org/) | [GitHub](https://github.com/NicoSerranoP/voteathon)",
|
||||
"tldr": "A Zero-Knowledge Protocol built to handle anonymous user data."
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import { ReactNode } from "react"
|
||||
import Image from "next/image"
|
||||
|
||||
import { ProjectInterface, ProjectSectionLabelMapping } from "@/lib/types"
|
||||
import { cn } from "@/lib/utils"
|
||||
import { cn, removeProtocol } from "@/lib/utils"
|
||||
import { useTranslation } from "@/app/i18n/client"
|
||||
|
||||
import { AppLink } from "../app-link"
|
||||
@@ -50,7 +50,7 @@ const WikiDetail = ({ label, value }: WikiDetailProps) => {
|
||||
const WikiLink = ({ href, external, children }: WikiLinkProps) => {
|
||||
return (
|
||||
<AppLink
|
||||
className="text-anakiwa-500 duration-200 hover:text-anakiwa-700"
|
||||
className="duration-200 text-anakiwa-500 hover:text-anakiwa-700"
|
||||
href={href}
|
||||
external={external}
|
||||
>
|
||||
@@ -86,10 +86,10 @@ export const WikiCard = ({
|
||||
alt={`${project.name} banner`}
|
||||
width={290}
|
||||
height={140}
|
||||
className=" bg-cover"
|
||||
className="bg-cover "
|
||||
/>
|
||||
{!project?.image && (
|
||||
<span className="absolute left-1/2 top-1/2 w-full -translate-x-1/2 -translate-y-1/2 px-5 text-center text-3xl font-bold text-black">
|
||||
<span className="absolute w-full px-5 text-3xl font-bold text-center text-black -translate-x-1/2 -translate-y-1/2 left-1/2 top-1/2">
|
||||
{project?.imageAlt || project?.name}
|
||||
</span>
|
||||
)}
|
||||
@@ -102,9 +102,12 @@ export const WikiCard = ({
|
||||
<WikiDetail
|
||||
label={t("filterLabels.builtWith")}
|
||||
value={
|
||||
<div className=" flex flex-col gap-1">
|
||||
<div className="flex flex-col gap-1 ">
|
||||
{builtWithKeys.map((key) => (
|
||||
<WikiLink href="#" key={key}>
|
||||
<WikiLink
|
||||
href={`/${lang}/projects?builtWith=${key}`}
|
||||
key={key}
|
||||
>
|
||||
{key}
|
||||
</WikiLink>
|
||||
))}
|
||||
@@ -125,7 +128,7 @@ export const WikiCard = ({
|
||||
label="Website"
|
||||
value={
|
||||
<WikiLink href={website} external>
|
||||
{website}
|
||||
{removeProtocol(website)}
|
||||
</WikiLink>
|
||||
}
|
||||
/>
|
||||
@@ -140,15 +143,15 @@ export const WikiCard = ({
|
||||
alt={`${project.name} banner`}
|
||||
width={290}
|
||||
height={140}
|
||||
className=" bg-cover"
|
||||
className="bg-cover "
|
||||
/>
|
||||
{!project?.image && (
|
||||
<span className="absolute left-1/2 top-1/2 w-full -translate-x-1/2 -translate-y-1/2 px-5 text-center text-3xl font-bold text-black">
|
||||
<span className="absolute w-full px-5 text-3xl font-bold text-center text-black -translate-x-1/2 -translate-y-1/2 left-1/2 top-1/2">
|
||||
{project?.imageAlt || project?.name}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
<div className="flex items-center justify-center bg-white py-4">
|
||||
<div className="flex items-center justify-center py-4 bg-white">
|
||||
<span className="text-xs font-normal text-black">
|
||||
{t("prevBrandImage")}
|
||||
</span>
|
||||
|
||||
@@ -40,8 +40,8 @@ export const Icons = {
|
||||
),
|
||||
discord: (props: LucideProps) => (
|
||||
<svg
|
||||
width={props?.size || 24}
|
||||
height={props?.size || 24}
|
||||
width={props?.size || 18}
|
||||
height={props?.size || 18}
|
||||
viewBox="0 0 24 24"
|
||||
fill="currentColor"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -61,7 +61,7 @@ export const Icons = {
|
||||
? props.height
|
||||
: typeof props.width === "number"
|
||||
? props.width - 1
|
||||
: 24
|
||||
: 18
|
||||
}
|
||||
viewBox="0 0 25 24"
|
||||
fill="currentColor"
|
||||
|
||||
@@ -38,8 +38,8 @@ export default function DiscoverMoreProjects({ project, lang }: ProjectProps) {
|
||||
return (
|
||||
<div className="w-full bg-cover-gradient">
|
||||
<div className="mx-auto flex w-full max-w-[644px] flex-col items-center justify-center gap-14 px-6 py-12 md:px-0 md:py-16">
|
||||
<h2 className="text-center text-3xl font-bold">{t("discoverMore")}</h2>
|
||||
<div className="grid grid-cols-1 flex-col gap-5 md:grid-cols-2 md:flex-row">
|
||||
<h2 className="text-3xl font-bold text-center">{t("discoverMore")}</h2>
|
||||
<div className="grid flex-col grid-cols-1 gap-5 md:grid-cols-2 md:flex-row">
|
||||
{suggestedProject?.map((project: ProjectInterface) => (
|
||||
<ProjectCard border project={project} lang={lang} />
|
||||
))}
|
||||
|
||||
@@ -65,10 +65,7 @@ export default function ProjectExtraLinks({
|
||||
return (
|
||||
<div className="flex flex-col gap-2">
|
||||
<div className="flex items-center gap-2">
|
||||
{icon && <span className="text-anakiwa-500">{icon}</span>}
|
||||
<p className="font-sans text-xl font-medium text-tuatara-700">
|
||||
{label}
|
||||
</p>
|
||||
<p className="py-2 text-[22px] font-bold text-tuatara-700">{label}</p>
|
||||
</div>
|
||||
<div className="flex flex-col items-start gap-2">
|
||||
{links.map(({ label, url }: ActionLinkTypeLink) => {
|
||||
@@ -76,7 +73,7 @@ export default function ProjectExtraLinks({
|
||||
<Link
|
||||
href={url}
|
||||
target="_blank"
|
||||
className="flex cursor-pointer items-center gap-1 overflow-hidden border-b-2 border-transparent font-sans font-normal text-tuatara-950 duration-200 ease-in-out hover:border-orange"
|
||||
className="flex items-center gap-1 overflow-hidden font-sans font-normal duration-200 ease-in-out border-b cursor-pointer border-anakiwa-400 text-tuatara-950 hover:border-orange"
|
||||
>
|
||||
{label}
|
||||
<Icons.externalUrl />
|
||||
|
||||
@@ -18,8 +18,8 @@ import { IThemeStatus, IThemesButton, LangProps } from "@/types/common"
|
||||
import {
|
||||
ProjectSectionLabelMapping,
|
||||
ProjectSections,
|
||||
ProjectStatus,
|
||||
ProjectStatusLabelMapping,
|
||||
ProjectStatusList,
|
||||
} from "@/lib/types"
|
||||
import { cn, queryStringToObject } from "@/lib/utils"
|
||||
import { useTranslation } from "@/app/i18n/client"
|
||||
@@ -288,8 +288,9 @@ export default function ProjectFiltersBar({ lang }: LangProps["params"]) {
|
||||
className="hidden"
|
||||
label={t("filterLabels.projectStatus")}
|
||||
>
|
||||
{ProjectStatusList.map((section) => {
|
||||
const label = ProjectStatusLabelMapping[section]
|
||||
{Object.keys(ProjectStatus).map((section: any) => {
|
||||
// @ts-ignore
|
||||
const label = ProjectStatusLabelMapping?.[section]
|
||||
return <Checkbox key={section} name={section} label={label} />
|
||||
})}
|
||||
</FilterWrapper>
|
||||
@@ -297,7 +298,7 @@ export default function ProjectFiltersBar({ lang }: LangProps["params"]) {
|
||||
</Modal>
|
||||
<div className="flex flex-col gap-6">
|
||||
<span className="text-lg font-medium">{t("whatDoYouWantDoToday")}</span>
|
||||
<div className="grid grid-cols-1 items-center justify-between gap-3 md:grid-cols-5 md:gap-12">
|
||||
<div className="grid items-center justify-between grid-cols-1 gap-3 md:grid-cols-5 md:gap-12">
|
||||
<FilterButtons lang={lang} />
|
||||
<div className="col-span-1 grid grid-cols-[1fr_auto] gap-2 md:col-span-3 md:gap-3">
|
||||
<Input
|
||||
@@ -325,7 +326,7 @@ export default function ProjectFiltersBar({ lang }: LangProps["params"]) {
|
||||
<button
|
||||
disabled={!hasActiveFilters}
|
||||
onClick={clearAllFilters}
|
||||
className="opacity-85 hidden cursor-pointer bg-transparent text-primary hover:opacity-100 disabled:pointer-events-none disabled:opacity-50 md:block"
|
||||
className="hidden bg-transparent cursor-pointer opacity-85 text-primary hover:opacity-100 disabled:pointer-events-none disabled:opacity-50 md:block"
|
||||
>
|
||||
<div className="flex items-center gap-2 border-b-2 border-black">
|
||||
<span className="text-sm font-medium">{t("clearAll")}</span>
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
"use client"
|
||||
|
||||
import Image from "next/image"
|
||||
import { ProjectLinkIconMap } from "@/data/projects"
|
||||
|
||||
import { ProjectLinkWebsite } from "@/lib/types"
|
||||
|
||||
import { ProjectLinkIconMap } from "./project-links"
|
||||
|
||||
interface ProjectLinkProps {
|
||||
url: string
|
||||
website: ProjectLinkWebsite
|
||||
}
|
||||
|
||||
export function ProjectLink({ website, url }: ProjectLinkProps) {
|
||||
const image = ProjectLinkIconMap?.[website as ProjectLinkWebsite]
|
||||
const icon = ProjectLinkIconMap?.[website as ProjectLinkWebsite]
|
||||
|
||||
// TODO: add support for youtube, discord and other links
|
||||
if (!image) return null
|
||||
if (!icon) return null
|
||||
return (
|
||||
<a
|
||||
href={url}
|
||||
@@ -25,13 +25,7 @@ export function ProjectLink({ website, url }: ProjectLinkProps) {
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Image
|
||||
src={image}
|
||||
alt={`${website}Vector`}
|
||||
className="h-5 cursor-pointer text-black"
|
||||
width={20}
|
||||
height={20}
|
||||
/>
|
||||
{icon}
|
||||
</a>
|
||||
)
|
||||
}
|
||||
|
||||
11
components/project/project-links.tsx
Normal file
11
components/project/project-links.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
import { RiTelegramLine as TelegramIcon } from "react-icons/ri"
|
||||
|
||||
import { Icons } from "../icons"
|
||||
|
||||
export const ProjectLinkIconMap: Record<string, any> = {
|
||||
github: <Icons.gitHub size={16} />,
|
||||
website: <Icons.globe />,
|
||||
twitter: <Icons.twitter size={18} />,
|
||||
telegram: <TelegramIcon size={16} />,
|
||||
discord: <Icons.discord size={16} />,
|
||||
}
|
||||
@@ -7,22 +7,22 @@ interface LabelProps {
|
||||
|
||||
const SectionTitle = ({ label, className = "" }: LabelProps) => {
|
||||
return (
|
||||
<h3
|
||||
<span
|
||||
className={cn(
|
||||
"font-sans text-base font-bold uppercase leading-[24px] tracking-[3.36px] text-tuatara-950",
|
||||
className
|
||||
)}
|
||||
>
|
||||
{label}
|
||||
</h3>
|
||||
</span>
|
||||
)
|
||||
}
|
||||
|
||||
const MainPageTitle = ({ label }: LabelProps) => {
|
||||
return (
|
||||
<h6 className="break-words font-display text-4xl font-bold text-tuatara-950 lg:text-6xl xl:text-7xl">
|
||||
<span className="text-4xl font-bold break-words font-display text-tuatara-950 lg:text-6xl xl:text-7xl">
|
||||
{label}
|
||||
</h6>
|
||||
</span>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
import GithubIcon from "@/public/social-medias/github-fill.svg"
|
||||
import GlobeIcon from "@/public/social-medias/global-line.svg"
|
||||
import TwitterIcon from "@/public/social-medias/twitter-fill.svg"
|
||||
|
||||
import { ProjectInterface, ProjectLinkType } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
import { anonAadhaar } from "./projects/anon-aadhaar"
|
||||
import { anonKlub } from "./projects/anon-klub"
|
||||
@@ -44,12 +40,6 @@ import { zkml } from "./projects/zkml"
|
||||
import { Zkopru } from "./projects/zkopru"
|
||||
import { zkp2p } from "./projects/zkp2p"
|
||||
|
||||
export const ProjectLinkIconMap: ProjectLinkType = {
|
||||
github: GithubIcon,
|
||||
website: GlobeIcon,
|
||||
twitter: TwitterIcon,
|
||||
}
|
||||
|
||||
/**
|
||||
* List of Projects
|
||||
*
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const anonAadhaar: ProjectInterface = {
|
||||
id: "anon-aadhaar",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "anon-aadhaar.svg",
|
||||
name: "Anon Aadhaar",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const anonKlub: ProjectInterface = {
|
||||
id: "anon-klub",
|
||||
section: "pse",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.INACTIVE,
|
||||
image: "anonklub.svg",
|
||||
name: "AnonKlub",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const bandada: ProjectInterface = {
|
||||
id: "bandada",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "bandada.webp",
|
||||
name: "Bandada",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const channel4: ProjectInterface = {
|
||||
id: "channel-4",
|
||||
section: "pse",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.INACTIVE,
|
||||
image: "channel4.svg",
|
||||
name: "Channel 4",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const chiquito: ProjectInterface = {
|
||||
id: "chiquito",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "",
|
||||
name: "chiquito",
|
||||
links: {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const Coco: ProjectInterface = {
|
||||
id: "coco",
|
||||
section: "pse",
|
||||
image: "coco.svg",
|
||||
name: "COCO",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.INACTIVE,
|
||||
tags: {
|
||||
keywords: ["prediction market", "scaling"],
|
||||
},
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const cryptkeeper: ProjectInterface = {
|
||||
id: "cryptkeeper",
|
||||
section: "pse",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.INACTIVE,
|
||||
image: "cryptkeeper.webp",
|
||||
name: "CryptKeeper",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const discreetly: ProjectInterface = {
|
||||
id: "discreetly",
|
||||
section: "pse",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "discreetly.svg",
|
||||
name: "Discreetly",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const dslWorkingGroup: ProjectInterface = {
|
||||
id: "dsl-working-group",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "",
|
||||
imageAlt: "DSL Working Group",
|
||||
name: "DSL Working Group",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const ECIPHalo2: ProjectInterface = {
|
||||
id: "ecip-halo2",
|
||||
@@ -6,7 +6,7 @@ export const ECIPHalo2: ProjectInterface = {
|
||||
image: "",
|
||||
imageAlt: "ECIP + Halo 2",
|
||||
name: "ECIP (Elliptic Curve Inner Products) Halo 2 Implementation",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
links: {
|
||||
github: "https://github.com/levs57/sage-circuits/",
|
||||
website: "https://perpetualpowersoftau.com/",
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const eigenTrust: ProjectInterface = {
|
||||
id: "eigen-trust",
|
||||
section: "pse",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.INACTIVE,
|
||||
image: "",
|
||||
name: "EigenTrust",
|
||||
links: {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const Interep: ProjectInterface = {
|
||||
id: "interep",
|
||||
section: "pse",
|
||||
image: "interep.svg",
|
||||
name: "Interep",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.INACTIVE,
|
||||
tags: {
|
||||
keywords: ["social", "reputation"],
|
||||
},
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const jubmoji: ProjectInterface = {
|
||||
id: "jubmoji",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "",
|
||||
name: "jubmoji.quest",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const maciPlatform: ProjectInterface = {
|
||||
id: "maci-platform",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "maci-rpgf.png",
|
||||
name: "MACI Platform",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const maci: ProjectInterface = {
|
||||
id: "maci",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "maci.png",
|
||||
name: "MACI",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const nfctap: ProjectInterface = {
|
||||
id: "nfctap",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "",
|
||||
name: "nfctap.xyz",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const OpenPassport: ProjectInterface = {
|
||||
id: "openpassport",
|
||||
section: "grant",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "openpassport.jpg",
|
||||
name: "OpenPassport",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const p0tion: ProjectInterface = {
|
||||
id: "p0tion",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "p0tion.png",
|
||||
name: "p0tion",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const p256: ProjectInterface = {
|
||||
id: "p256",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "",
|
||||
name: "P256",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const pollenLabs: ProjectInterface = {
|
||||
id: "pollen-labs",
|
||||
section: "collaboration",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.INACTIVE,
|
||||
image: "pollen-labs.svg",
|
||||
name: "Pollen Labs",
|
||||
links: {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const PerpetualPowersOfTau: ProjectInterface = {
|
||||
id: "perpetual-powers-of-tau",
|
||||
section: "pse",
|
||||
image: "powers-of-tau.png",
|
||||
name: "Perpetual Powers of Tau",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
tags: {
|
||||
keywords: ["scaling"],
|
||||
},
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const pseSecurity: ProjectInterface = {
|
||||
id: "pse-security",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "pse-security.png",
|
||||
name: "PSE Security",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const rln: ProjectInterface = {
|
||||
id: "rln",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "rln.svg",
|
||||
name: "Rate-Limiting Nullifier",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const semaphore: ProjectInterface = {
|
||||
id: "semaphore",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "semaphore.webp",
|
||||
previousBrandImage: "semaphorePrevious.jpg",
|
||||
license: "MIT",
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const summa: ProjectInterface = {
|
||||
id: "summa",
|
||||
section: "pse",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "summa.svg",
|
||||
name: "Summa",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const tlsn: ProjectInterface = {
|
||||
id: "tlsn",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "tlsn.webp",
|
||||
name: "TLSNotary",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const trustedSetups: ProjectInterface = {
|
||||
id: "trusted-setups",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "trusted-setups.svg",
|
||||
name: "Trusted Setups",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const unirepProtocol: ProjectInterface = {
|
||||
id: "unirep-protocol",
|
||||
section: "pse",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.INACTIVE,
|
||||
image: "unirep.svg",
|
||||
license: "MIT",
|
||||
previousBrandImage: "unirep-previousBrand.png",
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const voicedeck: ProjectInterface = {
|
||||
id: "voice-deck",
|
||||
section: "collaboration",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "voiceDeck.svg",
|
||||
name: "VoiceDeck",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const wax: ProjectInterface = {
|
||||
id: "wax",
|
||||
section: "pse",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "wax.webp",
|
||||
name: "Wallet Account eXperiments - WAX",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const zkemail: ProjectInterface = {
|
||||
id: "zk-email",
|
||||
section: "collaboration",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "zk-email.jpeg",
|
||||
name: "zk-email",
|
||||
links: {
|
||||
|
||||
@@ -1,19 +1,14 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const zkID: ProjectInterface = {
|
||||
id: "zk-id",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "",
|
||||
imageAlt: "ZK Identity Explorations",
|
||||
name: "ZK-ID",
|
||||
tags: {
|
||||
keywords: [
|
||||
"Identity",
|
||||
"Credentials",
|
||||
"Standards",
|
||||
"SSI"
|
||||
],
|
||||
keywords: ["Identity", "Credentials", "Standards", "SSI"],
|
||||
themes: ["research"],
|
||||
types: ["Legos/dev tools", "Lego sets/toolkits"],
|
||||
},
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const ZKKit: ProjectInterface = {
|
||||
id: "zk-kit",
|
||||
section: "pse",
|
||||
image: "zk-kit.svg",
|
||||
name: "ZK-Kit",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
links: {
|
||||
website: "https://zkkit.pse.dev",
|
||||
github: "https://github.com/privacy-scaling-explorations/zk-kit",
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const zk3: ProjectInterface = {
|
||||
id: "zk3",
|
||||
section: "grant",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "zk3.svg",
|
||||
name: "zk3",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const zkevmCommunity: ProjectInterface = {
|
||||
id: "zkevm-community",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "zkevm.jpg",
|
||||
name: "zkEVM Community Edition",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const zkitter: ProjectInterface = {
|
||||
id: "zkitter",
|
||||
section: "pse",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.INACTIVE,
|
||||
image: "zkitter.webp",
|
||||
name: "Zkitter",
|
||||
links: {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const zkml: ProjectInterface = {
|
||||
id: "zkml",
|
||||
section: "pse",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "zkml.png",
|
||||
name: "ZKML",
|
||||
links: {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const Zkopru: ProjectInterface = {
|
||||
id: "zkopru",
|
||||
section: "pse",
|
||||
image: "zkopru.svg",
|
||||
name: "ZKOPRU",
|
||||
projectStatus: "inactive",
|
||||
projectStatus: ProjectStatus.INACTIVE,
|
||||
links: {
|
||||
website: "https://zkopru.network/",
|
||||
github: "https://github.com/zkopru-network",
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { ProjectInterface } from "@/lib/types"
|
||||
import { ProjectInterface, ProjectStatus } from "@/lib/types"
|
||||
|
||||
export const zkp2p: ProjectInterface = {
|
||||
id: "zkp2p",
|
||||
section: "grant",
|
||||
projectStatus: "active",
|
||||
projectStatus: ProjectStatus.ACTIVE,
|
||||
image: "zkp2p.webp",
|
||||
name: "ZKP2P",
|
||||
links: {
|
||||
|
||||
13
lib/types.ts
13
lib/types.ts
@@ -4,20 +4,21 @@ import { ReactNode } from "react"
|
||||
export const ProjectSections = ["pse", "grant", "collaboration"] as const
|
||||
export type ProjectSection = (typeof ProjectSections)[number]
|
||||
|
||||
export enum ProjectStatus {
|
||||
ACTIVE = "active",
|
||||
INACTIVE = "inactive",
|
||||
}
|
||||
export interface Faq {
|
||||
question: string
|
||||
answer: ReactNode
|
||||
}
|
||||
|
||||
export const ProjectStatusList = ["active", "inactive"] as const
|
||||
export type ProjectStatusType = (typeof ProjectStatusList)[number]
|
||||
|
||||
export const ProjectSectionLabelMapping: Record<ProjectSection, string> = {
|
||||
pse: "PSE projects",
|
||||
grant: "Grants",
|
||||
collaboration: "Collaborations",
|
||||
}
|
||||
export const ProjectStatusLabelMapping: Record<ProjectStatusType, string> = {
|
||||
export const ProjectStatusLabelMapping: Record<ProjectStatus, string> = {
|
||||
active: "Active",
|
||||
inactive: "Not Currently Active",
|
||||
}
|
||||
@@ -53,7 +54,7 @@ export type ProjectLinkWebsite =
|
||||
| "youtube"
|
||||
| "telegram"
|
||||
|
||||
export type ProjectLinkType = Partial<Record<ProjectLinkWebsite, string>>
|
||||
export type ProjectLinkType = Partial<Record<ProjectLinkWebsite, any>>
|
||||
export type ProjectExtraLinkType = "buildWith" | "play" | "research" | "learn"
|
||||
export type TagType =
|
||||
| "types"
|
||||
@@ -82,7 +83,7 @@ export interface ProjectInterface {
|
||||
tldr?: string // this is managed by the specific translation file in /i18n/locales
|
||||
description?: string // this is managed by the specific translation file /i18n/locales
|
||||
links?: ProjectLinkType
|
||||
projectStatus: ProjectStatusType
|
||||
projectStatus: ProjectStatus
|
||||
tags?: ProjectTags
|
||||
extraLinks?: ActionLinkType
|
||||
}
|
||||
|
||||
@@ -40,3 +40,7 @@ export function convertDirtyStringToHtml(string: string) {
|
||||
.replace(pseudoUrlPattern, '$1<a href="http://$2">$2</a>')
|
||||
.toLowerCase()
|
||||
}
|
||||
|
||||
export function removeProtocol(url: string) {
|
||||
return url?.replace(/^https?:\/\//, "")
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
"react-cookie": "^7.0.1",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-i18next": "^14.0.0",
|
||||
"react-icons": "^5.3.0",
|
||||
"react-markdown": "^8.0.7",
|
||||
"react-use": "^17.4.0",
|
||||
"remark-gfm": "^3.0.1",
|
||||
|
||||
5993
pnpm-lock.yaml
generated
5993
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -1,10 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.99667 0.395996C7.63749 0.39722 5.35566 1.2328 3.5592 2.75332C1.76275 4.27384 0.568814 6.38015 0.190885 8.69562C-0.187044 11.0111 0.275672 13.3847 1.49631 15.3921C2.71694 17.3995 4.61589 18.9097 6.8536 19.6527C7.34727 19.7444 7.53323 19.4384 7.53323 19.1782C7.53323 18.9181 7.52335 18.1638 7.52006 17.3391C4.75547 17.9363 4.1713 16.1725 4.1713 16.1725C3.72041 15.0271 3.06875 14.7261 3.06875 14.7261C2.16697 14.1141 3.13623 14.1256 3.13623 14.1256C4.1351 14.1959 4.66004 15.1449 4.66004 15.1449C5.54536 16.6552 6.98524 16.2183 7.55132 15.963C7.64019 15.3233 7.89855 14.888 8.18323 14.641C5.97486 14.3923 3.65458 13.5447 3.65458 9.75848C3.64089 8.77654 4.00735 7.82695 4.67814 7.10616C4.57611 6.85745 4.23547 5.85281 4.77522 4.4882C4.77522 4.4882 5.60954 4.22313 7.50855 5.50102C9.13739 5.05812 10.8559 5.05812 12.4848 5.50102C14.3822 4.22313 15.2148 4.4882 15.2148 4.4882C15.7562 5.84954 15.4156 6.85418 15.3136 7.10616C15.9865 7.82706 16.3537 8.77831 16.3388 9.76175C16.3388 13.5562 14.0135 14.3923 11.8019 14.6361C12.1573 14.9437 12.4749 15.5442 12.4749 16.467C12.4749 17.7891 12.4634 18.8526 12.4634 19.1782C12.4634 19.4417 12.6428 19.7493 13.1463 19.6527C15.3843 18.9096 17.2834 17.3991 18.504 15.3914C19.7246 13.3837 20.1871 11.0097 19.8088 8.69401C19.4304 6.37832 18.2359 4.27199 16.4388 2.75173C14.6418 1.23147 12.3594 0.396444 9.99996 0.395996H9.99667Z" fill="#3A3B40" />
|
||||
<path d="M3.8218 14.5836C3.80041 14.6327 3.72142 14.6474 3.65724 14.613C3.59307 14.5787 3.54535 14.5149 3.56839 14.4641C3.59142 14.4134 3.66877 14.4003 3.73294 14.4347C3.79712 14.469 3.84649 14.5345 3.8218 14.5836Z" fill="#3A3B40" />
|
||||
<path d="M4.2249 15.0302C4.19082 15.0473 4.15183 15.0521 4.11461 15.0437C4.07739 15.0353 4.04425 15.0144 4.02085 14.9844C3.95667 14.9157 3.9435 14.8208 3.99287 14.7782C4.04224 14.7357 4.1311 14.7553 4.19528 14.8241C4.25946 14.8928 4.27427 14.9877 4.2249 15.0302Z" fill="#3A3B40" />
|
||||
<path d="M4.61725 15.5979C4.55636 15.6405 4.45268 15.5979 4.39509 15.5129C4.37916 15.4976 4.3665 15.4793 4.35784 15.4591C4.34919 15.4388 4.34473 15.417 4.34473 15.3951C4.34473 15.3731 4.34919 15.3513 4.35784 15.331C4.3665 15.3108 4.37916 15.2925 4.39509 15.2772C4.45597 15.2363 4.55965 15.2772 4.61725 15.3607C4.67484 15.4441 4.67649 15.5554 4.61725 15.5979Z" fill="#3A3B40" />
|
||||
<path d="M5.14883 16.1481C5.09453 16.2087 4.98428 16.1923 4.89377 16.1105C4.80326 16.0287 4.78186 15.9174 4.83617 15.8585C4.89047 15.7996 5.00073 15.816 5.09453 15.8962C5.18832 15.9763 5.20643 16.0892 5.14883 16.1481Z" fill="#3A3B40" />
|
||||
<path d="M5.89426 16.4688C5.86958 16.5457 5.75768 16.5801 5.64578 16.5474C5.53388 16.5147 5.45983 16.423 5.48122 16.3445C5.50261 16.266 5.61616 16.23 5.72971 16.266C5.84325 16.3019 5.91566 16.3887 5.89426 16.4688Z" fill="#3A3B40" />
|
||||
<path d="M6.70648 16.5244C6.70648 16.6046 6.61433 16.6733 6.49585 16.6749C6.37736 16.6766 6.28027 16.6111 6.28027 16.5309C6.28027 16.4508 6.37242 16.382 6.4909 16.3804C6.60939 16.3788 6.70648 16.4426 6.70648 16.5244Z" fill="#3A3B40" />
|
||||
<path d="M7.46365 16.3981C7.47846 16.4783 7.39618 16.5617 7.2777 16.5814C7.15921 16.601 7.05554 16.5536 7.04073 16.475C7.02592 16.3965 7.11149 16.3114 7.22668 16.2901C7.34187 16.2689 7.44884 16.3179 7.46365 16.3981Z" fill="#3A3B40" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.3 KiB |
@@ -1,10 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="21" viewBox="0 0 20 21" fill="none">
|
||||
<g clip-path="url(#clip0_7993_65541)">
|
||||
<path d="M13.5685 7.146C12.9839 3.65771 11.6048 1.2085 10 1.2085C8.39516 1.2085 7.01613 3.65771 6.43145 7.146H13.5685ZM6.12903 10.896C6.12903 11.7632 6.17742 12.5952 6.2621 13.396H13.7339C13.8185 12.5952 13.8669 11.7632 13.8669 10.896C13.8669 10.0288 13.8185 9.19678 13.7339 8.396H6.2621C6.17742 9.19678 6.12903 10.0288 6.12903 10.896ZM19.2218 7.146C18.0686 4.49365 15.7339 2.44287 12.8508 1.61475C13.8347 2.93506 14.5121 4.92334 14.8669 7.146H19.2218ZM7.14516 1.61475C4.26613 2.44287 1.92742 4.49365 0.778226 7.146H5.13306C5.48387 4.92334 6.16129 2.93506 7.14516 1.61475ZM19.6532 8.396H15.0282C15.1129 9.21631 15.1613 10.0562 15.1613 10.896C15.1613 11.7358 15.1129 12.5757 15.0282 13.396H19.6492C19.871 12.5952 19.996 11.7632 19.996 10.896C19.996 10.0288 19.871 9.19678 19.6532 8.396ZM4.83871 10.896C4.83871 10.0562 4.8871 9.21631 4.97177 8.396H0.346774C0.129032 9.19678 0 10.0288 0 10.896C0 11.7632 0.129032 12.5952 0.346774 13.396H4.96774C4.8871 12.5757 4.83871 11.7358 4.83871 10.896ZM6.43145 14.646C7.01613 18.1343 8.39516 20.5835 10 20.5835C11.6048 20.5835 12.9839 18.1343 13.5685 14.646H6.43145ZM12.8548 20.1772C15.7339 19.3491 18.0726 17.2983 19.2258 14.646H14.871C14.5161 16.8687 13.8387 18.8569 12.8548 20.1772ZM0.778226 14.646C1.93145 17.2983 4.26613 19.3491 7.14919 20.1772C6.16532 18.8569 5.4879 16.8687 5.13306 14.646H0.778226Z" fill="#3A3B40" />
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_7993_65541">
|
||||
<rect width="20" height="20" fill="white" transform="translate(0 0.895996)" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB |
@@ -1,10 +0,0 @@
|
||||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="twitter-fill" clip-path="url(#clip0_3593_4170)">
|
||||
<path id="Vector" d="M22.6828 5.65593C21.9194 5.99362 21.1098 6.2154 20.2808 6.31393C21.1546 5.79136 21.8085 4.96894 22.1208 3.99993C21.3008 4.48793 20.4018 4.82993 19.4648 5.01493C18.8354 4.34151 18.0012 3.89489 17.0918 3.74451C16.1824 3.59413 15.2487 3.74842 14.4361 4.18338C13.6234 4.61834 12.9772 5.30961 12.5979 6.14972C12.2186 6.98983 12.1276 7.93171 12.3388 8.82893C10.6759 8.74558 9.04914 8.31345 7.56409 7.56059C6.07905 6.80773 4.76893 5.75097 3.7188 4.45893C3.34709 5.09738 3.15176 5.82315 3.1528 6.56193C3.1528 8.01193 3.8908 9.29293 5.0128 10.0429C4.34881 10.022 3.69944 9.84271 3.1188 9.51993V9.57193C3.11901 10.5376 3.45317 11.4735 4.06465 12.221C4.67613 12.9684 5.52729 13.4814 6.4738 13.6729C5.85742 13.84 5.21111 13.8646 4.5838 13.7449C4.85067 14.5762 5.37081 15.3031 6.0714 15.824C6.77198 16.3449 7.61793 16.6337 8.4908 16.6499C7.62329 17.3313 6.62998 17.8349 5.56769 18.1321C4.50539 18.4293 3.39493 18.5142 2.2998 18.3819C4.2115 19.6114 6.4369 20.264 8.7098 20.2619C16.4028 20.2619 20.6098 13.8889 20.6098 8.36193C20.6098 8.18193 20.6048 7.99993 20.5968 7.82193C21.4157 7.23009 22.1224 6.49695 22.6838 5.65693L22.6828 5.65593Z" fill="#4A5754"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_3593_4170">
|
||||
<rect width="24" height="24" fill="white" transform="translate(0.520508)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB |
@@ -1,10 +0,0 @@
|
||||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="youtube-fill" clip-path="url(#clip0_3593_4175)">
|
||||
<path id="Vector" d="M22.0635 6.498C22.5205 8.28 22.5205 12 22.5205 12C22.5205 12 22.5205 15.72 22.0635 17.502C21.8095 18.487 21.0665 19.262 20.1255 19.524C18.4165 20 12.5205 20 12.5205 20C12.5205 20 6.62751 20 4.91551 19.524C3.97051 19.258 3.22851 18.484 2.97751 17.502C2.52051 15.72 2.52051 12 2.52051 12C2.52051 12 2.52051 8.28 2.97751 6.498C3.23151 5.513 3.97451 4.738 4.91551 4.476C6.62751 4 12.5205 4 12.5205 4C12.5205 4 18.4165 4 20.1255 4.476C21.0705 4.742 21.8125 5.516 22.0635 6.498ZM10.5205 15.5L16.5205 12L10.5205 8.5V15.5Z" fill="#4A5754"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_3593_4175">
|
||||
<rect width="24" height="24" fill="white" transform="translate(0.520508)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 853 B |
@@ -1,4 +1,4 @@
|
||||
import { ProjectStatusType } from "@/lib/types"
|
||||
import { ProjectStatus } from "@/lib/types"
|
||||
import { LocaleTypes } from "@/app/i18n/settings"
|
||||
|
||||
export interface LangProps {
|
||||
@@ -9,7 +9,7 @@ export interface LangProps {
|
||||
|
||||
export type IThemeStatus = Partial<
|
||||
Record<
|
||||
ProjectStatusType,
|
||||
ProjectStatus,
|
||||
{
|
||||
label: string
|
||||
icon: any
|
||||
|
||||
Reference in New Issue
Block a user