aboutsummaryrefslogtreecommitdiff
path: root/apps/web-v2/src
diff options
context:
space:
mode:
authorDhravya <[email protected]>2024-05-25 18:41:26 -0500
committerDhravya <[email protected]>2024-05-25 18:41:26 -0500
commit075f45986fd4d198292226e64afb71b3515576b4 (patch)
tree5c728356cd0310f1c1c012fd6618c72a836c314b /apps/web-v2/src
parentadded social material (diff)
downloadsupermemory-075f45986fd4d198292226e64afb71b3515576b4.tar.xz
supermemory-075f45986fd4d198292226e64afb71b3515576b4.zip
refactored UI, with shared components and UI, better rules and million lint
Diffstat (limited to 'apps/web-v2/src')
-rw-r--r--apps/web-v2/src/app/(landing)/Cta.tsx44
-rw-r--r--apps/web-v2/src/app/(landing)/EmailInput.tsx78
-rw-r--r--apps/web-v2/src/app/(landing)/FeatureContent.tsx59
-rw-r--r--apps/web-v2/src/app/(landing)/Features.tsx262
-rw-r--r--apps/web-v2/src/app/(landing)/Hero.tsx74
-rw-r--r--apps/web-v2/src/app/(landing)/Navbar.tsx37
-rw-r--r--apps/web-v2/src/app/(landing)/RotatingIcons.tsx91
-rw-r--r--apps/web-v2/src/app/(landing)/footer.tsx38
-rw-r--r--apps/web-v2/src/app/(landing)/formSubmitAction.ts47
-rw-r--r--apps/web-v2/src/app/(landing)/linkArrow.tsx34
-rw-r--r--apps/web-v2/src/app/(landing)/page.tsx102
-rw-r--r--apps/web-v2/src/app/api/hello/route.ts22
-rw-r--r--apps/web-v2/src/app/globals.css132
-rw-r--r--apps/web-v2/src/app/layout.tsx25
-rw-r--r--apps/web-v2/src/app/not-found.tsx58
-rw-r--r--apps/web-v2/src/components/ui/cardClick.tsx78
-rw-r--r--apps/web-v2/src/components/ui/toast.tsx129
-rw-r--r--apps/web-v2/src/components/ui/toaster.tsx35
-rw-r--r--apps/web-v2/src/components/ui/use-toast.ts191
-rw-r--r--apps/web-v2/src/lib/utils.ts6
-rw-r--r--apps/web-v2/src/utils/cn.ts6
-rw-r--r--apps/web-v2/src/utils/icons.tsx277
22 files changed, 0 insertions, 1825 deletions
diff --git a/apps/web-v2/src/app/(landing)/Cta.tsx b/apps/web-v2/src/app/(landing)/Cta.tsx
deleted file mode 100644
index be99bf99..00000000
--- a/apps/web-v2/src/app/(landing)/Cta.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import Image from "next/image";
-import React from "react";
-import EmailInput from "./EmailInput";
-
-function Cta() {
- return (
- <section
- id="try"
- className="relative mb-44 mt-60 flex w-full flex-col items-center justify-center gap-8"
- >
- <div className="absolute left-0 z-[-1] h-full w-full">
- {/* a blue gradient line that's slightly tilted with blur (a lotof blur)*/}
- <div className="overflow-hidden">
- <div
- className="absolute left-[20%] top-[-165%] h-32 w-full overflow-hidden bg-[#369DFD] bg-opacity-70 blur-[337.4px]"
- style={{ transform: "rotate(-30deg)" }}
- />
- </div>
- </div>
- <Image
- src="/landing-ui-2.png"
- alt="Landing page background"
- width={1512}
- height={1405}
- priority
- draggable="false"
- className="absolute z-[-2] hidden select-none rounded-3xl bg-black md:block lg:w-[80%]"
- />
- <h1 className="z-20 mt-4 text-center text-5xl font-medium tracking-tight text-white">
- Your bookmarks are collecting dust.
- </h1>
- <div className="text-center text-sm text-zinc-500">
- Launching July 1st, 2024
- </div>
- <p className="text-soft-foreground-text z-20 text-center">
- Time to change that. <br /> Sign up for the waitlist and be the first to
- try Supermemory
- </p>
- <EmailInput />
- </section>
- );
-}
-
-export default Cta;
diff --git a/apps/web-v2/src/app/(landing)/EmailInput.tsx b/apps/web-v2/src/app/(landing)/EmailInput.tsx
deleted file mode 100644
index 9fd175b7..00000000
--- a/apps/web-v2/src/app/(landing)/EmailInput.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-"use client";
-
-import { FormEvent, useState } from "react";
-import formSubmitAction from "./formSubmitAction";
-import { useToast } from "@/components/ui/use-toast";
-
-function EmailInput() {
- const [email, setEmail] = useState("");
- const { toast } = useToast();
-
- return (
- <form
- onSubmit={async (e: FormEvent<HTMLFormElement>) => {
- e.preventDefault();
-
- const value = await formSubmitAction(email, "token" as string);
-
- if (value.success) {
- setEmail("");
- toast({
- title: "You are now on the waitlist! 🎉",
- description:
- "We will notify you when we launch. Check your inbox and spam folder for a surprise! 🎁",
- });
- } else {
- console.error("email submission failed: ", value.value);
- toast({
- variant: "destructive",
- title: "Uh oh! Something went wrong.",
- description: `${value.value}`,
- });
- }
- }}
- className="flex w-full items-center justify-center gap-2"
- >
- <div
- className={`transition-width z-20 rounded-2xl bg-gradient-to-br from-gray-200/70 to-transparent p-[0.7px] duration-300 ease-in-out ${email ? "w-[90%] md:w-[42%]" : "w-full md:w-1/2"}`}
- >
- <input
- type="email"
- name="email"
- className={`transition-width flex w-full items-center rounded-2xl bg-[#37485E] px-4 py-2 outline-none duration-300 focus:outline-none`}
- placeholder="Enter your email"
- value={email}
- required
- onChange={(e) => setEmail(e.target.value)}
- />
- </div>
- <div
- className="cf-turnstile"
- data-sitekey="0x4AAAAAAAakohhUeXc99J7E"
- ></div>
- {email && (
- <button
- type="submit"
- className="transition-width rounded-xl bg-gray-700 p-2 text-white duration-300"
- >
- <svg
- xmlns="http://www.w3.org/2000/svg"
- fill="none"
- viewBox="0 0 24 24"
- strokeWidth={1.5}
- stroke="currentColor"
- className="h-6 w-6"
- >
- <path
- strokeLinecap="round"
- strokeLinejoin="round"
- d="M6 12 3.269 3.125A59.769 59.769 0 0 1 21.485 12 59.768 59.768 0 0 1 3.27 20.875L5.999 12Zm0 0h7.5"
- />
- </svg>
- </button>
- )}
- </form>
- );
-}
-
-export default EmailInput;
diff --git a/apps/web-v2/src/app/(landing)/FeatureContent.tsx b/apps/web-v2/src/app/(landing)/FeatureContent.tsx
deleted file mode 100644
index 7de64d53..00000000
--- a/apps/web-v2/src/app/(landing)/FeatureContent.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-export const features = [
- {
- title: "For Researchers",
- description:
- "Add content to collections and use it as a knowledge base for your research, link multiple sources together to get a better understanding of the topic.",
- svg: <ResearchSvg />,
- },
- {
- title: "For Content writers",
- description:
- "Save time and use the writing assistant to generate content based on your own saved collections and sources.",
- svg: <ContentSvg />,
- },
- {
- title: "For Developers",
- description:
- "Talk to documentation websites, code snippets, etc. so you never have to google the same thing a hundred times.",
- svg: <DeveloperSvg />,
- },
-];
-
-function ResearchSvg() {
- return (
- <svg
- className="mr-3 shrink-0 fill-zinc-400"
- xmlns="http://www.w3.org/2000/svg"
- width="24"
- height="24"
- >
- <path d="m7.951 14.537 6.296-7.196 1.506 1.318-7.704 8.804-3.756-3.756 1.414-1.414 2.244 2.244Zm11.296-7.196 1.506 1.318-7.704 8.804-1.756-1.756 1.414-1.414.244.244 6.296-7.196Z" />
- </svg>
- );
-}
-
-function ContentSvg() {
- return (
- <svg
- className="mr-3 shrink-0 fill-zinc-400"
- xmlns="http://www.w3.org/2000/svg"
- width="24"
- height="24"
- >
- <path d="m16.997 19.056-1.78-.912A13.91 13.91 0 0 0 16.75 11.8c0-2.206-.526-4.38-1.533-6.344l1.78-.912A15.91 15.91 0 0 1 18.75 11.8c0 2.524-.602 5.01-1.753 7.256Zm-3.616-1.701-1.77-.93A9.944 9.944 0 0 0 12.75 11.8c0-1.611-.39-3.199-1.14-4.625l1.771-.93c.9 1.714 1.37 3.62 1.369 5.555 0 1.935-.47 3.841-1.369 5.555Zm-3.626-1.693-1.75-.968c.49-.885.746-1.881.745-2.895a5.97 5.97 0 0 0-.745-2.893l1.75-.968a7.968 7.968 0 0 1 .995 3.861 7.97 7.97 0 0 1-.995 3.863Zm-3.673-1.65-1.664-1.11c.217-.325.333-.709.332-1.103 0-.392-.115-.776-.332-1.102L6.082 9.59c.437.655.67 1.425.668 2.21a3.981 3.981 0 0 1-.668 2.212Z" />
- </svg>
- );
-}
-
-function DeveloperSvg() {
- return (
- <svg
- className="mr-3 shrink-0 fill-zinc-400"
- xmlns="http://www.w3.org/2000/svg"
- width="24"
- height="24"
- >
- <path d="m11.293 5.293 1.414 1.414-8 8-1.414-1.414 8-8Zm7-1 1.414 1.414-8 8-1.414-1.414 8-8Zm0 6 1.414 1.414-8 8-1.414-1.414 8-8Z" />
- </svg>
- );
-}
diff --git a/apps/web-v2/src/app/(landing)/Features.tsx b/apps/web-v2/src/app/(landing)/Features.tsx
deleted file mode 100644
index f52f7523..00000000
--- a/apps/web-v2/src/app/(landing)/Features.tsx
+++ /dev/null
@@ -1,262 +0,0 @@
-"use client";
-
-import { useState, useRef, useEffect } from "react";
-import { Transition } from "@headlessui/react";
-import Image from "next/image";
-import CarouselIllustration from "@/../public/images/carousel-illustration-01.png";
-import { X } from "@/utils/icons";
-
-import { features } from "./FeatureContent";
-import { CardClick } from "@/components/ui/cardClick";
-
-export default function Features() {
- const [tab, setTab] = useState<number>(0);
-
- const tabs = useRef<HTMLDivElement>(null);
-
- const heightFix = () => {
- if (tabs.current && tabs.current.parentElement)
- tabs.current.parentElement.style.height = `${tabs.current.clientHeight}px`;
- };
-
- function handleClickIndex(tab: number) {
- setTab(tab);
- }
-
- useEffect(() => {
- heightFix();
- }, []);
-
- return (
- <section className="relative w-full overflow-hidden max-lg:after:hidden">
- <div className="py-12 md:pb-32">
- {/* Carousel */}
- <div
- id="use-cases"
- className="mx-auto max-w-xl px-4 sm:px-6 md:pt-40 lg:max-w-6xl"
- >
- <div className="space-y-12 lg:flex lg:space-x-12 lg:space-y-0 xl:space-x-24">
- {/* Content */}
- <div className="lg:min-w-[524px] lg:max-w-none">
- <div className="mb-8">
- <div className="mb-4 inline-flex rounded-full border border-transparent px-4 py-0.5 text-sm font-medium text-zinc-400 [background:linear-gradient(theme(colors.zinc.800),theme(colors.zinc.800))_padding-box,linear-gradient(120deg,theme(colors.zinc.700),theme(colors.zinc.700/0),theme(colors.zinc.700))_border-box]">
- Use cases
- </div>
- <h3 className="font-inter-tight mb-4 text-3xl font-bold text-zinc-200">
- Save time and keep things organised
- </h3>
- <p className="text-lg text-zinc-500">
- With Supermemory, it's really easy to save information from
- all over the internet, while training your own AI to help you
- do more with it.
- </p>
- </div>
- {/* Tabs buttons */}
- <div className="mb-8 space-y-2 md:mb-0">
- <CardClick
- tab={tab}
- items={features}
- handleClickIndex={handleClickIndex}
- />
- </div>
- </div>
-
- {/* Tabs items */}
- <div className="relative lg:max-w-none">
- <div className="relative flex flex-col" ref={tabs}>
- {/* Item 1 */}
- <Transition
- show={tab === 0}
- enter="transition ease-in-out duration-700 transform order-first"
- enterFrom="opacity-0 -translate-y-4"
- enterTo="opacity-100 translate-y-0"
- leave="transition ease-in-out duration-300 transform absolute"
- leaveFrom="opacity-100 translate-y-0"
- leaveTo="opacity-0 translate-y-4"
- beforeEnter={() => heightFix()}
- unmount={false}
- >
- <div>
- <Image
- className="mx-auto rounded-lg shadow-2xl lg:max-w-none"
- src={CarouselIllustration}
- width={700}
- height={520}
- alt="Carousel 01"
- />
- </div>
- </Transition>
- {/* Item 2 */}
- <Transition
- show={tab === 1}
- enter="transition ease-in-out duration-700 transform order-first"
- enterFrom="opacity-0 -translate-y-4"
- enterTo="opacity-100 translate-y-0"
- leave="transition ease-in-out duration-300 transform absolute"
- leaveFrom="opacity-100 translate-y-0"
- leaveTo="opacity-0 translate-y-4"
- beforeEnter={() => heightFix()}
- unmount={false}
- >
- <div>
- <Image
- className="mx-auto rounded-lg shadow-2xl lg:max-w-none"
- src={CarouselIllustration}
- width={700}
- height={520}
- alt="Carousel 02"
- />
- </div>
- </Transition>
- {/* Item 3 */}
- <Transition
- show={tab === 2}
- enter="transition ease-in-out duration-700 transform order-first"
- enterFrom="opacity-0 -translate-y-4"
- enterTo="opacity-100 translate-y-0"
- leave="transition ease-in-out duration-300 transform absolute"
- leaveFrom="opacity-100 translate-y-0"
- leaveTo="opacity-0 translate-y-4"
- beforeEnter={() => heightFix()}
- unmount={false}
- >
- <div>
- <Image
- className="mx-auto rounded-lg shadow-2xl lg:max-w-none"
- src={CarouselIllustration}
- width={700}
- height={520}
- alt="Carousel 03"
- />
- </div>
- </Transition>
- </div>
- </div>
- </div>
- </div>
-
- {/* Features blocks */}
- <div
- id="features"
- className="mx-auto mt-24 max-w-6xl px-4 sm:px-6 md:pt-40"
- >
- <div className="grid gap-8 sm:grid-cols-2 lg:grid-cols-3 lg:gap-16">
- {/* Block #1 */}
- <div>
- <div className="mb-1 flex items-center">
- <X className="mr-2" />
- <h3 className="font-inter-tight font-semibold text-zinc-200">
- Import all your Twitter bookmarks
- </h3>
- </div>
- <p className="text-sm text-zinc-500">
- Use all the knowledge you've saved on Twitter to train your own
- supermemory.
- </p>
- </div>
- {/* Block #2 */}
- <div>
- <div className="mb-1 flex items-center">
- <svg
- className="mr-2 fill-zinc-400"
- xmlns="http://www.w3.org/2000/svg"
- width="16"
- height="16"
- >
- <path d="M13 16c-.153 0-.306-.035-.447-.105l-3.851-1.926c-.231.02-.465.031-.702.031-4.411 0-8-3.14-8-7s3.589-7 8-7 8 3.14 8 7c0 1.723-.707 3.351-2 4.63V15a1.003 1.003 0 0 1-1 1Zm-4.108-4.054c.155 0 .308.036.447.105L12 13.382v-2.187c0-.288.125-.562.341-.752C13.411 9.506 14 8.284 14 7c0-2.757-2.691-5-6-5S2 4.243 2 7s2.691 5 6 5c.266 0 .526-.02.783-.048a1.01 1.01 0 0 1 .109-.006Z" />
- </svg>
- <h3 className="font-inter-tight font-semibold text-zinc-200">
- Chat with collections
- </h3>
- </div>
- <p className="text-sm text-zinc-500">
- Use collections to talk to specific knowledgebases like 'My
- twitter bookmarks', or 'Learning web development'
- </p>
- </div>
- {/* Block #3 */}
- <div>
- <div className="mb-1 flex items-center">
- <svg
- className="mr-2 fill-zinc-400"
- xmlns="http://www.w3.org/2000/svg"
- width="16"
- height="16"
- >
- <path d="M7 14c-3.86 0-7-3.14-7-7s3.14-7 7-7 7 3.14 7 7-3.14 7-7 7ZM7 2C4.243 2 2 4.243 2 7s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5Zm8.707 12.293a.999.999 0 1 1-1.414 1.414L11.9 13.314a8.019 8.019 0 0 0 1.414-1.414l2.393 2.393Z" />
- </svg>
- <h3 className="font-inter-tight font-semibold text-zinc-200">
- Powerful search
- </h3>
- </div>
- <p className="text-sm text-zinc-500">
- Look up anything you've saved in your supermemory, and get the
- information you need in seconds.
- </p>
- </div>
- {/* Block #4 */}
- <div>
- <div className="mb-1 flex items-center">
- <svg
- className="mr-2 fill-zinc-400"
- xmlns="http://www.w3.org/2000/svg"
- width="14"
- height="16"
- >
- <path d="M13 0H1C.4 0 0 .4 0 1v14c0 .6.4 1 1 1h8l5-5V1c0-.6-.4-1-1-1ZM2 2h10v8H8v4H2V2Z" />
- </svg>
- <h3 className="font-inter-tight font-semibold text-zinc-200">
- Knowledge canvas
- </h3>
- </div>
- <p className="text-sm text-zinc-500">
- Arrange your saved information in a way that makes sense to you
- in a 2d canvas.
- </p>
- </div>
- {/* Block #5 */}
- <div>
- <div className="mb-1 flex items-center">
- <svg
- className="mr-2 fill-zinc-400"
- xmlns="http://www.w3.org/2000/svg"
- width="16"
- height="16"
- >
- <path d="M14.6.085 8 2.885 1.4.085c-.5-.2-1.4-.1-1.4.9v11c0 .4.2.8.6.9l7 3c.3.1.5.1.8 0l7-3c.4-.2.6-.5.6-.9v-11c0-1-.9-1.1-1.4-.9ZM2 2.485l5 2.1v8.8l-5-2.1v-8.8Zm12 8.8-5 2.1v-8.7l5-2.1v8.7Z" />
- </svg>
- <h3 className="font-inter-tight font-semibold text-zinc-200">
- Just... bookmarks
- </h3>
- </div>
- <p className="text-sm text-zinc-500">
- AI is cool, but sometimes you just need a place to save your
- stuff. Supermemory is that place.
- </p>
- </div>
- {/* Block #6 */}
- <div>
- <div className="mb-1 flex items-center">
- <svg
- xmlns="http://www.w3.org/2000/svg"
- viewBox="0 0 20 20"
- fill="currentColor"
- className="mr-2 h-5 w-5 fill-zinc-400"
- >
- <path d="m2.695 14.762-1.262 3.155a.5.5 0 0 0 .65.65l3.155-1.262a4 4 0 0 0 1.343-.886L17.5 5.501a2.121 2.121 0 0 0-3-3L3.58 13.419a4 4 0 0 0-.885 1.343Z" />
- </svg>
- <h3 className="font-inter-tight font-semibold text-zinc-200">
- Writing assistant
- </h3>
- </div>
- <p className="text-sm text-zinc-500">
- Use our markdown editor to write content based on your saved
- data, with the help of AI.
- </p>
- </div>
- </div>
- </div>
- </div>
- </section>
- );
-}
diff --git a/apps/web-v2/src/app/(landing)/Hero.tsx b/apps/web-v2/src/app/(landing)/Hero.tsx
deleted file mode 100644
index 6867355b..00000000
--- a/apps/web-v2/src/app/(landing)/Hero.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-"use client";
-import React from "react";
-import { motion } from "framer-motion";
-import { Twitter } from "@/utils/icons";
-import EmailInput from "./EmailInput";
-import LinkArrow from "./linkArrow";
-
-const slap = {
- initial: {
- opacity: 0,
- scale: 1.1,
- },
- whileInView: { opacity: 1, scale: 1 },
- transition: {
- duration: 0.5,
- ease: "easeInOut",
- },
- viewport: { once: true },
-};
-
-function Hero() {
- return (
- <>
- <section className="mt-24 flex max-w-xl flex-col items-center justify-center gap-10 md:mt-56">
- <a
- className="group/anchor flex items-center justify-center gap-4 rounded-full bg-white/10 py-2 pl-10 pr-6 text-sm text-white/80"
- href="https://twitter.com/supermemoryai"
- target="_blank"
- >
- <Twitter className="h-4 w-4" />
- <div className="flex items-center">
- {" "}
- Follow us on Twitter{" "}
- <LinkArrow classname="group-hover/anchor:opacity-100 opacity-0 transition" />
- </div>
- </a>
- <motion.h1
- {...{
- ...slap,
- transition: { ...slap.transition, delay: 0.2 },
- }}
- className="text-center text-4xl font-semibold tracking-normal text-white/95 md:text-5xl"
- >
- Build your own second brain with Supermemory
- </motion.h1>
- <motion.p
- {...{
- ...slap,
- transition: { ...slap.transition, delay: 0.3 },
- }}
- className="text-soft-foreground-text text-center"
- >
- Bring saved information from all over the internet into one place
- where you can connect it, and ask AI about it
- </motion.p>
- <EmailInput />
- </section>
- <motion.img
- {...{
- ...slap,
- transition: { ...slap.transition, delay: 0.35 },
- }}
- src="/landing-ui.svg"
- alt="Landing page background"
- width={1512}
- height={1405}
- draggable="false"
- className="z-[-2] mt-28 h-full w-[80%] select-none"
- />
- </>
- );
-}
-
-export default Hero;
diff --git a/apps/web-v2/src/app/(landing)/Navbar.tsx b/apps/web-v2/src/app/(landing)/Navbar.tsx
deleted file mode 100644
index c7bc80d4..00000000
--- a/apps/web-v2/src/app/(landing)/Navbar.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import Logo from "@/../public/logo.svg";
-import { Github } from "@/utils/icons";
-import Image from "next/image";
-import Link from "next/link";
-import React from "react";
-
-function Navbar() {
- return (
- <nav className="fixed top-0 z-[99999] mt-12 hidden w-full px-24 text-sm md:flex">
- <div className="flex w-full flex-row justify-between rounded-2xl bg-white/10 shadow-[0px_2px_3px_-1px_rgba(0,0,0,0.1),0px_1px_0px_0px_rgba(25,28,33,0.02),0px_0px_0px_1px_rgba(25,28,33,0.08)] backdrop-blur-lg backdrop-filter">
- <Link href={"/"} className="flex items-center p-3 opacity-50">
- <Image src={Logo} alt="Supermemory logo" width={40} height={40} />
- </Link>
- <div className="absolute left-1/2 top-1/2 flex -translate-x-1/2 -translate-y-1/2 items-center gap-8 p-3">
- <Link href={"#use-cases"} className="text-soft-foreground-text">
- Use cases
- </Link>
- <Link href={"#features"} className="text-soft-foreground-text">
- Features
- </Link>
- <Link href={"#try"} className="text-soft-foreground-text">
- Try supermemory
- </Link>
- </div>
- <Link
- href="https://git.new/memory"
- className="m-2 flex items-center gap-3 rounded-xl bg-white/20 px-4 text-center text-white"
- >
- <Github className="h-4 w-4" />
- Open source
- </Link>
- </div>
- </nav>
- );
-}
-
-export default Navbar;
diff --git a/apps/web-v2/src/app/(landing)/RotatingIcons.tsx b/apps/web-v2/src/app/(landing)/RotatingIcons.tsx
deleted file mode 100644
index 27d4eaed..00000000
--- a/apps/web-v2/src/app/(landing)/RotatingIcons.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-"use client";
-
-import { motion } from "framer-motion";
-import { Github, Medium, Notion, Reddit, Twitter } from "@/utils/icons";
-import Image from "next/image";
-
-const icons = [
- <div className="rounded-full bg-purple-600/20 p-4">
- <Github className="h-8 w-8 text-purple-500" />
- </div>,
- <div className="rounded-full bg-blue-800/20 p-4">
- <Twitter className="h-8 w-8 text-blue-500" />
- </div>,
- <div className="rounded-full bg-green-800/20 p-4">
- <Medium className="h-8 w-8 text-green-500" />
- </div>,
- <div className="rounded-full bg-red-800/20 p-4">
- <Reddit className="h-8 w-8 text-red-500" />
- </div>,
- <div className="rounded-full bg-white/20 p-4">
- <Notion className="h-8 w-8 text-white" />
- </div>,
-];
-
-const RotatingIcons: React.FC = () => {
- return (
- <div className="relative flex w-full flex-col items-center justify-center gap-8 px-4 sm:px-6">
- <h3 className="font-inter-tight mb-4 mt-8 text-center text-3xl font-bold text-zinc-200">
- Collect data from <br />{" "}
- <span className="bg-gradient-to-r from-blue-500 to-blue-300 bg-clip-text italic text-transparent ">
- any website{" "}
- </span>{" "}
- on the internet
- </h3>
- <div className="flex items-center justify-center">
- <div className="relative m-2 mx-auto h-96 w-96 scale-[70%] md:scale-100 ">
- <div className="relative h-full w-full rounded-full border border-gray-800">
- {icons.map((icon, index) => (
- <motion.div
- key={index}
- className="absolute top-1/2 -translate-x-10 transform"
- style={{
- originX: "200px",
- originY: "-8px",
- }}
- animate={{
- rotate: [0, 360],
- }}
- transition={{
- repeat: Infinity,
- duration: 5,
- ease: "linear",
- delay: index,
- }}
- >
- <motion.div
- style={{
- rotate: index * 72,
- }}
- animate={{
- rotate: [0, -360],
- }}
- transition={{
- repeat: Infinity,
- duration: 5,
- ease: "linear",
- delay: index,
- }}
- >
- {icon}
- </motion.div>
- </motion.div>
- ))}
- <Image
- src="/logo.svg"
- alt="Supermemory logo"
- width={80}
- height={80}
- className="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 transform text-white"
- />
- </div>
- </div>
- </div>
- <p className="text-center text-sm text-zinc-500">
- ... and bring it into your second brain
- </p>
- </div>
- );
-};
-
-export default RotatingIcons;
diff --git a/apps/web-v2/src/app/(landing)/footer.tsx b/apps/web-v2/src/app/(landing)/footer.tsx
deleted file mode 100644
index 4ebfca0b..00000000
--- a/apps/web-v2/src/app/(landing)/footer.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import React from "react";
-import LinkArrow from "./linkArrow";
-
-function Footer() {
- return (
- <footer className="mt-20 flex w-full items-center justify-between gap-4 px-8 py-8 text-sm text-zinc-500">
- <p>© 2024 Supermemory.ai</p>
- <div className="flex gap-5">
- <a
- className="group/mail flex items-center"
- target="_blank"
- href="mailto:[email protected]"
- >
- Contact
- <LinkArrow classname="group-hover/mail:opacity-100 opacity-0 transition" />
- </a>
- <a
- className="group/twit flex items-center"
- target="_blank"
- href="https://twitter.com/supermemoryai"
- >
- Twitter{" "}
- <LinkArrow classname="group-hover/twit:opacity-100 opacity-0 transition" />
- </a>
- <a
- className="group/git flex items-center"
- target="_blank"
- href="https://github.com/dhravya/supermemory"
- >
- Github{" "}
- <LinkArrow classname="group-hover/git:opacity-100 opacity-0 transition" />
- </a>
- </div>
- </footer>
- );
-}
-
-export default Footer;
diff --git a/apps/web-v2/src/app/(landing)/formSubmitAction.ts b/apps/web-v2/src/app/(landing)/formSubmitAction.ts
deleted file mode 100644
index fa96b943..00000000
--- a/apps/web-v2/src/app/(landing)/formSubmitAction.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-"use server";
-import { headers } from "next/headers";
-
-const formSubmitAction = async (email: string, token: string) => {
- console.log("email submitted:", email);
- const formBody = `email=${encodeURIComponent(email)}`;
- const h = await headers();
- const ip = h.get("cf-connecting-ip");
-
- if (ip) {
- if (process.env.RATELIMITER) {
- const { success } = await process.env.RATELIMITER.limit({
- key: `waitlist-${ip}`,
- });
-
- if (!success) {
- console.error("rate limit exceeded");
- return { value: "Rate limit exceeded", success: false };
- }
- } else {
- console.info("RATELIMITER not found in env");
- }
- } else {
- console.info("cf-connecting-ip not found in headers");
- }
-
- const resp = await fetch(
- "https://app.loops.so/api/newsletter-form/clwcn8dde0059m6hobbdw2rwe",
- {
- method: "POST",
- body: formBody,
- headers: {
- "Content-Type": "application/x-www-form-urlencoded",
- },
- },
- );
-
- if (resp.ok) {
- console.log("email submitted successfully");
- return { value: await resp.json(), success: true };
- } else {
- console.error("email submission failed");
- return { value: await resp.text(), success: false };
- }
-};
-
-export default formSubmitAction;
diff --git a/apps/web-v2/src/app/(landing)/linkArrow.tsx b/apps/web-v2/src/app/(landing)/linkArrow.tsx
deleted file mode 100644
index def37e91..00000000
--- a/apps/web-v2/src/app/(landing)/linkArrow.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import React from "react";
-
-function LinkArrow({ classname }: { classname?: string }) {
- return (
- <svg
- className={classname}
- width="24px"
- height="24px"
- viewBox="-2.4 -2.4 28.80 28.80"
- fill="none"
- xmlns="http://www.w3.org/2000/svg"
- transform="matrix(1, 0, 0, 1, 0, 0)rotate(0)"
- >
- <g id="SVGRepo_bgCarrier" strokeWidth="0"></g>
- <g
- id="SVGRepo_tracerCarrier"
- strokeLinecap="round"
- strokeLinejoin="round"
- ></g>
- <g id="SVGRepo_iconCarrier">
- {" "}
- <path
- d="M7 17L17 7M17 7H8M17 7V16"
- stroke="currentColor"
- strokeWidth="0.792"
- strokeLinecap="round"
- strokeLinejoin="round"
- ></path>{" "}
- </g>
- </svg>
- );
-}
-
-export default LinkArrow;
diff --git a/apps/web-v2/src/app/(landing)/page.tsx b/apps/web-v2/src/app/(landing)/page.tsx
deleted file mode 100644
index 5351c51b..00000000
--- a/apps/web-v2/src/app/(landing)/page.tsx
+++ /dev/null
@@ -1,102 +0,0 @@
-import RotatingIcons from "./RotatingIcons";
-import Hero from "./Hero";
-import Navbar from "./Navbar";
-import Cta from "./Cta";
-import { Toaster } from "@/components/ui/toaster";
-import Features from "./Features";
-import Footer from "./footer";
-import { Metadata } from "next";
-
-export const runtime = "edge";
-
-export const metadata: Metadata = {
- title: "Supermemory - Your personal second brain.",
- description:
- "Bring saved information from all over the internet into one place where you can connect it, and ask AI about it",
- openGraph: {
- images: [
- {
- url: "https://supermemory.ai/og-image.png",
- width: 1200,
- height: 627,
- alt: "Supermemory - Your personal second brain.",
- },
- ],
- },
- metadataBase: {
- host: "https://supermemory.ai",
- href: "/",
- origin: "https://supermemory.ai",
- password: "supermemory",
- hash: "supermemory",
- pathname: "/",
- search: "",
- username: "supermemoryai",
- hostname: "supermemory.ai",
- port: "",
- protocol: "https:",
- searchParams: new URLSearchParams(""),
- toString: () => "https://supermemory.ai/",
- toJSON: () => "https://supermemory.ai/",
- },
- twitter: {
- card: "summary_large_image",
- site: "https://supermemory.ai",
- creator: "https://supermemory.ai",
- title: "Supermemory - Your personal second brain.",
- description:
- "Bring saved information from all over the internet into one place where you can connect it, and ask AI about it",
- images: [
- {
- url: "https://supermemory.ai/og-image.png",
- width: 1200,
- height: 627,
- alt: "Supermemory - Your personal second brain.",
- },
- ],
- },
-};
-
-export default function Home() {
- return (
- <main className="dark flex min-h-screen flex-col items-center overflow-x-hidden px-2 md:px-0">
- <Navbar />
-
- {/* Background gradients */}
- <div className="absolute left-0 top-0 z-[-1] h-full w-full">
- <div className="overflow-x-hidden">
- <div
- className="absolute left-0 h-32 w-[95%] overflow-x-hidden bg-[#369DFD] bg-opacity-70 blur-[337.4px]"
- style={{ transform: "rotate(-30deg)" }}
- />
- </div>
-
- {/* a blue gradient line that's slightly tilted with blur (a lotof blur)*/}
- <div className="overflow-x-hidden">
- <div
- className="absolute left-0 top-[100%] h-32 w-[90%] overflow-x-hidden bg-[#369DFD] bg-opacity-40 blur-[337.4px]"
- style={{ transform: "rotate(-30deg)" }}
- />
- </div>
-
- <div className="overflow-x-hidden">
- <div className="absolute right-0 top-[145%] h-40 w-[17%] overflow-x-hidden bg-[#369DFD] bg-opacity-20 blur-[110px]" />
- </div>
- </div>
-
- {/* Hero section */}
- <Hero />
-
- {/* Features section */}
- <Features />
-
- <RotatingIcons />
-
- <Cta />
-
- <Toaster />
-
- <Footer />
- </main>
- );
-}
diff --git a/apps/web-v2/src/app/api/hello/route.ts b/apps/web-v2/src/app/api/hello/route.ts
deleted file mode 100644
index 363d0704..00000000
--- a/apps/web-v2/src/app/api/hello/route.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import type { NextRequest } from "next/server";
-import { getRequestContext } from "@cloudflare/next-on-pages";
-
-export const runtime = "edge";
-
-export async function GET(request: NextRequest) {
- let responseText = "Hello World";
-
- // In the edge runtime you can use Bindings that are available in your application
- // (for more details see:
- // - https://developers.cloudflare.com/pages/framework-guides/deploy-a-nextjs-site/#use-bindings-in-your-nextjs-application
- // - https://developers.cloudflare.com/pages/functions/bindings/
- // )
- //
- // KV Example:
- // const myKv = getRequestContext().env.MY_KV_NAMESPACE
- // await myKv.put('suffix', ' from a KV store!')
- // const suffix = await myKv.get('suffix')
- // responseText += suffix
-
- return new Response(responseText);
-}
diff --git a/apps/web-v2/src/app/globals.css b/apps/web-v2/src/app/globals.css
deleted file mode 100644
index 67115e30..00000000
--- a/apps/web-v2/src/app/globals.css
+++ /dev/null
@@ -1,132 +0,0 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-
-@layer base {
- :root {
- --foreground-rgb: 255, 255, 255;
- --background-start-rgb: 0, 0, 0;
- --background-end-rgb: 0, 0, 0;
- --black-bg: #0f1114;
- --soft-foreground: #ffffff;
- --soft-foreground-text: #b2bcca;
-
- --background: 216, 14%, 7%;
- --foreground: 240 10% 3.9%;
-
- --card: 0 0% 100%;
- --card-foreground: 240 10% 3.9%;
-
- --popover: 0 0% 100%;
- --popover-foreground: 240 10% 3.9%;
-
- --primary: 240 5.9% 10%;
- --primary-foreground: 0 0% 98%;
-
- --secondary: 240 4.8% 95.9%;
- --secondary-foreground: 240 5.9% 10%;
-
- --muted: 240 4.8% 95.9%;
- --muted-foreground: 240 3.8% 46.1%;
-
- --accent: 240 4.8% 95.9%;
- --accent-foreground: 240 5.9% 10%;
-
- --destructive: 0 84.2% 60.2%;
- --destructive-foreground: 0 0% 98%;
-
- --border: 240 5.9% 90%;
- --input: 240 5.9% 90%;
- --ring: 240 10% 3.9%;
-
- --radius: 0.5rem;
- }
-
- .dark {
- --background: 216, 14%, 7%;
- --foreground: 0 0% 98%;
-
- --card: 240 10% 3.9%;
- --card-foreground: 0 0% 98%;
-
- --popover: 240 10% 3.9%;
- --popover-foreground: 0 0% 98%;
-
- --primary: 0 0% 98%;
- --primary-foreground: 240 5.9% 10%;
-
- --secondary: 240 3.7% 15.9%;
- --secondary-foreground: 0 0% 98%;
-
- --muted: 240 3.7% 15.9%;
- --muted-foreground: 240 5% 64.9%;
-
- --accent: 240 3.7% 15.9%;
- --accent-foreground: 0 0% 98%;
-
- --destructive: 0 62.8% 30.6%;
- --destructive-foreground: 0 0% 98%;
-
- --border: 240 3.7% 15.9%;
- --input: 240 3.7% 15.9%;
- --ring: 240 4.9% 83.9%;
- }
-}
-
-@layer base {
- * {
- @apply border-border;
- }
- body {
- @apply bg-background text-foreground;
- }
-}
-
-html {
- scroll-behavior: smooth;
-}
-
-/* width */
-::-webkit-scrollbar {
- width: 8px;
-}
-
-/* Track */
-::-webkit-scrollbar-track {
- background: transparent;
-}
-
-/* Handle */
-::-webkit-scrollbar-thumb {
- background: #131f2c;
-}
-
-/* Handle on hover */
-::-webkit-scrollbar-thumb:hover {
- background: #22303d;
-}
-
-body {
- color: rgb(var(--foreground-rgb));
- background: linear-gradient(to bottom, transparent, var(--black-bg))
- var(--black-bg);
-}
-
-@layer utilities {
- .text-balance {
- text-wrap: balance;
- }
-}
-
-@keyframes rotate {
- 0% {
- transform: rotate(0deg) translateX(130px); /* Adjust radius */
- }
- 100% {
- transform: rotate(360deg) translateX(130px); /* Adjust radius */
- }
-}
-
-.icon-container {
- animation: rotate 10s linear infinite;
-}
diff --git a/apps/web-v2/src/app/layout.tsx b/apps/web-v2/src/app/layout.tsx
deleted file mode 100644
index 4af34eee..00000000
--- a/apps/web-v2/src/app/layout.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import type { Metadata } from "next";
-import { Inter } from "next/font/google";
-import "./globals.css";
-import Script from "next/script";
-
-const inter = Inter({ subsets: ["latin"] });
-
-export const metadata: Metadata = {
- title: "Supermemory - Your personal second brain.",
- description:
- "Bring saved information from all over the internet into one place where you can connect it, and ask AI about it",
-};
-
-export default function RootLayout({
- children,
-}: Readonly<{
- children: React.ReactNode;
-}>) {
- return (
- <html lang="en">
- <Script src="https://challenges.cloudflare.com/turnstile/v0/api.js" />
- <body className={inter.className}>{children}</body>
- </html>
- );
-}
diff --git a/apps/web-v2/src/app/not-found.tsx b/apps/web-v2/src/app/not-found.tsx
deleted file mode 100644
index 3409889a..00000000
--- a/apps/web-v2/src/app/not-found.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-export const runtime = "edge";
-
-export default function NotFound() {
- return (
- <>
- <title>404: This page could not be found.</title>
- <div style={styles.error}>
- <div>
- <style
- dangerouslySetInnerHTML={{
- __html: `body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}`,
- }}
- />
- <h1 className="next-error-h1" style={styles.h1}>
- 404
- </h1>
- <div style={styles.desc}>
- <h2 style={styles.h2}>This page could not be found.</h2>
- </div>
- </div>
- </div>
- </>
- );
-}
-
-const styles = {
- error: {
- fontFamily:
- 'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',
- height: "100vh",
- textAlign: "center",
- display: "flex",
- flexDirection: "column",
- alignItems: "center",
- justifyContent: "center",
- },
-
- desc: {
- display: "inline-block",
- },
-
- h1: {
- display: "inline-block",
- margin: "0 20px 0 0",
- padding: "0 23px 0 0",
- fontSize: 24,
- fontWeight: 500,
- verticalAlign: "top",
- lineHeight: "49px",
- },
-
- h2: {
- fontSize: 14,
- fontWeight: 400,
- lineHeight: "49px",
- margin: 0,
- },
-} as const;
diff --git a/apps/web-v2/src/components/ui/cardClick.tsx b/apps/web-v2/src/components/ui/cardClick.tsx
deleted file mode 100644
index 10fb4a07..00000000
--- a/apps/web-v2/src/components/ui/cardClick.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-"use client";
-
-import { cn } from "@/utils/cn";
-import { AnimatePresence, motion } from "framer-motion";
-import React from "react";
-
-export const CardClick = ({
- tab,
- handleClickIndex,
- items,
-}: {
- tab: number;
- handleClickIndex: (tab: number) => void;
- items: {
- title: string;
- description: string;
- svg: React.ReactNode;
- }[];
-}) => {
- return (
- <div className={cn("flex flex-col")}>
- {items.map((item, idx) => (
- <div
- key={idx}
- className="group relative block h-full w-full cursor-pointer rounded-2xl p-2 transition-all hover:border"
- onMouseDown={() => handleClickIndex(idx)}
- >
- <AnimatePresence>
- {tab === idx && (
- <motion.span
- className="absolute inset-0 -z-[1] block h-full w-full rounded-3xl [background:linear-gradient(#2E2E32,#2E2E32),linear-gradient(120deg,theme(colors.zinc.700),theme(colors.zinc.700/0),theme(colors.zinc.700))]"
- layoutId="hoverBackground"
- initial={{ opacity: 0 }}
- animate={{
- opacity: 1,
- transition: { duration: 0.15 },
- }}
- exit={{
- opacity: 0,
- transition: { duration: 0.15, delay: 0.2 },
- }}
- />
- )}
- </AnimatePresence>
- <Card
- title={item.title}
- description={item.description}
- svg={item.svg}
- />
- </div>
- ))}
- </div>
- );
-};
-
-export const Card = ({
- title,
- description,
- svg,
-}: {
- title: string;
- description: string;
- svg: React.ReactNode;
-}) => {
- return (
- <div
- className={`flex items-center rounded-2xl border border-transparent px-6 py-4 text-left`}
- >
- {svg}
- <div>
- <div className="font-inter-tight mb-1 text-lg font-semibold text-zinc-200">
- {title}
- </div>
- <div className="text-zinc-500">{description}</div>
- </div>
- </div>
- );
-};
diff --git a/apps/web-v2/src/components/ui/toast.tsx b/apps/web-v2/src/components/ui/toast.tsx
deleted file mode 100644
index 56f4ebfd..00000000
--- a/apps/web-v2/src/components/ui/toast.tsx
+++ /dev/null
@@ -1,129 +0,0 @@
-"use client";
-
-import * as React from "react";
-import * as ToastPrimitives from "@radix-ui/react-toast";
-import { cva, type VariantProps } from "class-variance-authority";
-import { X } from "lucide-react";
-
-import { cn } from "@/lib/utils";
-
-const ToastProvider = ToastPrimitives.Provider;
-
-const ToastViewport = React.forwardRef<
- React.ElementRef<typeof ToastPrimitives.Viewport>,
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>
->(({ className, ...props }, ref) => (
- <ToastPrimitives.Viewport
- ref={ref}
- className={cn(
- "fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",
- className,
- )}
- {...props}
- />
-));
-ToastViewport.displayName = ToastPrimitives.Viewport.displayName;
-
-const toastVariants = cva(
- "group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",
- {
- variants: {
- variant: {
- default: "border bg-background text-foreground",
- destructive:
- "destructive group border-destructive bg-destructive text-destructive-foreground",
- },
- },
- defaultVariants: {
- variant: "default",
- },
- },
-);
-
-const Toast = React.forwardRef<
- React.ElementRef<typeof ToastPrimitives.Root>,
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &
- VariantProps<typeof toastVariants>
->(({ className, variant, ...props }, ref) => {
- return (
- <ToastPrimitives.Root
- ref={ref}
- className={cn(toastVariants({ variant }), className)}
- {...props}
- />
- );
-});
-Toast.displayName = ToastPrimitives.Root.displayName;
-
-const ToastAction = React.forwardRef<
- React.ElementRef<typeof ToastPrimitives.Action>,
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>
->(({ className, ...props }, ref) => (
- <ToastPrimitives.Action
- ref={ref}
- className={cn(
- "ring-offset-background hover:bg-secondary focus:ring-ring group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
- className,
- )}
- {...props}
- />
-));
-ToastAction.displayName = ToastPrimitives.Action.displayName;
-
-const ToastClose = React.forwardRef<
- React.ElementRef<typeof ToastPrimitives.Close>,
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>
->(({ className, ...props }, ref) => (
- <ToastPrimitives.Close
- ref={ref}
- className={cn(
- "text-foreground/50 hover:text-foreground absolute right-2 top-2 rounded-md p-1 opacity-0 transition-opacity focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",
- className,
- )}
- toast-close=""
- {...props}
- >
- <X className="h-4 w-4" />
- </ToastPrimitives.Close>
-));
-ToastClose.displayName = ToastPrimitives.Close.displayName;
-
-const ToastTitle = React.forwardRef<
- React.ElementRef<typeof ToastPrimitives.Title>,
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>
->(({ className, ...props }, ref) => (
- <ToastPrimitives.Title
- ref={ref}
- className={cn("text-sm font-semibold", className)}
- {...props}
- />
-));
-ToastTitle.displayName = ToastPrimitives.Title.displayName;
-
-const ToastDescription = React.forwardRef<
- React.ElementRef<typeof ToastPrimitives.Description>,
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>
->(({ className, ...props }, ref) => (
- <ToastPrimitives.Description
- ref={ref}
- className={cn("text-sm opacity-90", className)}
- {...props}
- />
-));
-ToastDescription.displayName = ToastPrimitives.Description.displayName;
-
-type ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;
-
-type ToastActionElement = React.ReactElement<typeof ToastAction>;
-
-export {
- type ToastProps,
- type ToastActionElement,
- ToastProvider,
- ToastViewport,
- Toast,
- ToastTitle,
- ToastDescription,
- ToastClose,
- ToastAction,
-};
diff --git a/apps/web-v2/src/components/ui/toaster.tsx b/apps/web-v2/src/components/ui/toaster.tsx
deleted file mode 100644
index 7d82ed55..00000000
--- a/apps/web-v2/src/components/ui/toaster.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-"use client";
-
-import {
- Toast,
- ToastClose,
- ToastDescription,
- ToastProvider,
- ToastTitle,
- ToastViewport,
-} from "@/components/ui/toast";
-import { useToast } from "@/components/ui/use-toast";
-
-export function Toaster() {
- const { toasts } = useToast();
-
- return (
- <ToastProvider>
- {toasts.map(function ({ id, title, description, action, ...props }) {
- return (
- <Toast key={id} {...props}>
- <div className="grid gap-1">
- {title && <ToastTitle>{title}</ToastTitle>}
- {description && (
- <ToastDescription>{description}</ToastDescription>
- )}
- </div>
- {action}
- <ToastClose />
- </Toast>
- );
- })}
- <ToastViewport />
- </ToastProvider>
- );
-}
diff --git a/apps/web-v2/src/components/ui/use-toast.ts b/apps/web-v2/src/components/ui/use-toast.ts
deleted file mode 100644
index 6555e795..00000000
--- a/apps/web-v2/src/components/ui/use-toast.ts
+++ /dev/null
@@ -1,191 +0,0 @@
-"use client";
-
-// Inspired by react-hot-toast library
-import * as React from "react";
-
-import type { ToastActionElement, ToastProps } from "@/components/ui/toast";
-
-const TOAST_LIMIT = 1;
-const TOAST_REMOVE_DELAY = 1000000;
-
-type ToasterToast = ToastProps & {
- id: string;
- title?: React.ReactNode;
- description?: React.ReactNode;
- action?: ToastActionElement;
-};
-
-const actionTypes = {
- ADD_TOAST: "ADD_TOAST",
- UPDATE_TOAST: "UPDATE_TOAST",
- DISMISS_TOAST: "DISMISS_TOAST",
- REMOVE_TOAST: "REMOVE_TOAST",
-} as const;
-
-let count = 0;
-
-function genId() {
- count = (count + 1) % Number.MAX_SAFE_INTEGER;
- return count.toString();
-}
-
-type ActionType = typeof actionTypes;
-
-type Action =
- | {
- type: ActionType["ADD_TOAST"];
- toast: ToasterToast;
- }
- | {
- type: ActionType["UPDATE_TOAST"];
- toast: Partial<ToasterToast>;
- }
- | {
- type: ActionType["DISMISS_TOAST"];
- toastId?: ToasterToast["id"];
- }
- | {
- type: ActionType["REMOVE_TOAST"];
- toastId?: ToasterToast["id"];
- };
-
-interface State {
- toasts: ToasterToast[];
-}
-
-const toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();
-
-const addToRemoveQueue = (toastId: string) => {
- if (toastTimeouts.has(toastId)) {
- return;
- }
-
- const timeout = setTimeout(() => {
- toastTimeouts.delete(toastId);
- dispatch({
- type: "REMOVE_TOAST",
- toastId: toastId,
- });
- }, TOAST_REMOVE_DELAY);
-
- toastTimeouts.set(toastId, timeout);
-};
-
-export const reducer = (state: State, action: Action): State => {
- switch (action.type) {
- case "ADD_TOAST":
- return {
- ...state,
- toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),
- };
-
- case "UPDATE_TOAST":
- return {
- ...state,
- toasts: state.toasts.map((t) =>
- t.id === action.toast.id ? { ...t, ...action.toast } : t,
- ),
- };
-
- case "DISMISS_TOAST": {
- const { toastId } = action;
-
- // ! Side effects ! - This could be extracted into a dismissToast() action,
- // but I'll keep it here for simplicity
- if (toastId) {
- addToRemoveQueue(toastId);
- } else {
- state.toasts.forEach((toast) => {
- addToRemoveQueue(toast.id);
- });
- }
-
- return {
- ...state,
- toasts: state.toasts.map((t) =>
- t.id === toastId || toastId === undefined
- ? {
- ...t,
- open: false,
- }
- : t,
- ),
- };
- }
- case "REMOVE_TOAST":
- if (action.toastId === undefined) {
- return {
- ...state,
- toasts: [],
- };
- }
- return {
- ...state,
- toasts: state.toasts.filter((t) => t.id !== action.toastId),
- };
- }
-};
-
-const listeners: Array<(state: State) => void> = [];
-
-let memoryState: State = { toasts: [] };
-
-function dispatch(action: Action) {
- memoryState = reducer(memoryState, action);
- listeners.forEach((listener) => {
- listener(memoryState);
- });
-}
-
-type Toast = Omit<ToasterToast, "id">;
-
-function toast({ ...props }: Toast) {
- const id = genId();
-
- const update = (props: ToasterToast) =>
- dispatch({
- type: "UPDATE_TOAST",
- toast: { ...props, id },
- });
- const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id });
-
- dispatch({
- type: "ADD_TOAST",
- toast: {
- ...props,
- id,
- open: true,
- onOpenChange: (open) => {
- if (!open) dismiss();
- },
- },
- });
-
- return {
- id: id,
- dismiss,
- update,
- };
-}
-
-function useToast() {
- const [state, setState] = React.useState<State>(memoryState);
-
- React.useEffect(() => {
- listeners.push(setState);
- return () => {
- const index = listeners.indexOf(setState);
- if (index > -1) {
- listeners.splice(index, 1);
- }
- };
- }, [state]);
-
- return {
- ...state,
- toast,
- dismiss: (toastId?: string) => dispatch({ type: "DISMISS_TOAST", toastId }),
- };
-}
-
-export { useToast, toast };
diff --git a/apps/web-v2/src/lib/utils.ts b/apps/web-v2/src/lib/utils.ts
deleted file mode 100644
index 365058ce..00000000
--- a/apps/web-v2/src/lib/utils.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { type ClassValue, clsx } from "clsx";
-import { twMerge } from "tailwind-merge";
-
-export function cn(...inputs: ClassValue[]) {
- return twMerge(clsx(inputs));
-}
diff --git a/apps/web-v2/src/utils/cn.ts b/apps/web-v2/src/utils/cn.ts
deleted file mode 100644
index cec6ac9e..00000000
--- a/apps/web-v2/src/utils/cn.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { ClassValue, clsx } from "clsx";
-import { twMerge } from "tailwind-merge";
-
-export function cn(...inputs: ClassValue[]) {
- return twMerge(clsx(inputs));
-}
diff --git a/apps/web-v2/src/utils/icons.tsx b/apps/web-v2/src/utils/icons.tsx
deleted file mode 100644
index da05d716..00000000
--- a/apps/web-v2/src/utils/icons.tsx
+++ /dev/null
@@ -1,277 +0,0 @@
-import * as React from "react";
-import type { SVGProps } from "react";
-export const Github = (props: SVGProps<SVGSVGElement>) => (
- <svg
- viewBox="0 0 256 250"
- width="1em"
- height="1em"
- fill="currentColor"
- xmlns="http://www.w3.org/2000/svg"
- preserveAspectRatio="xMidYMid"
- {...props}
- >
- <path d="M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z" />
- </svg>
-);
-
-export const Twitter = (props: SVGProps<SVGSVGElement>) => (
- <svg
- viewBox="0 0 256 209"
- width="1em"
- height="1em"
- xmlns="http://www.w3.org/2000/svg"
- preserveAspectRatio="xMidYMid"
- {...props}
- >
- <path
- d="M256 25.45c-9.42 4.177-19.542 7-30.166 8.27 10.845-6.5 19.172-16.793 23.093-29.057a105.183 105.183 0 0 1-33.351 12.745C205.995 7.201 192.346.822 177.239.822c-29.006 0-52.523 23.516-52.523 52.52 0 4.117.465 8.125 1.36 11.97-43.65-2.191-82.35-23.1-108.255-54.876-4.52 7.757-7.11 16.78-7.11 26.404 0 18.222 9.273 34.297 23.365 43.716a52.312 52.312 0 0 1-23.79-6.57c-.003.22-.003.44-.003.661 0 25.447 18.104 46.675 42.13 51.5a52.592 52.592 0 0 1-23.718.9c6.683 20.866 26.08 36.05 49.062 36.475-17.975 14.086-40.622 22.483-65.228 22.483-4.24 0-8.42-.249-12.529-.734 23.243 14.902 50.85 23.597 80.51 23.597 96.607 0 149.434-80.031 149.434-149.435 0-2.278-.05-4.543-.152-6.795A106.748 106.748 0 0 0 256 25.45"
- fill="currentColor"
- />
- </svg>
-);
-
-export const Medium = (props: SVGProps<SVGSVGElement>) => (
- <svg
- width="52"
- height="52"
- viewBox="0 0 52 52"
- fill="none"
- xmlns="http://www.w3.org/2000/svg"
- {...props}
- >
- <path
- d="M17.332 13C20.7798 13 24.0864 14.3696 26.5244 16.8076C28.9624 19.2456 30.332 22.5522 30.332 26C30.332 29.4478 28.9624 32.7544 26.5244 35.1924C24.0864 37.6304 20.7798 39 17.332 39C13.8842 39 10.5776 37.6304 8.13964 35.1924C5.70167 32.7544 4.33203 29.4478 4.33203 26C4.33203 22.5522 5.70167 19.2456 8.13964 16.8076C10.5776 14.3696 13.8842 13 17.332 13ZM36.832 15.1667C40.082 15.1667 42.2487 20.0178 42.2487 26C42.2487 31.9822 40.082 36.8333 36.832 36.8333C33.582 36.8333 31.4154 31.9822 31.4154 26C31.4154 20.0178 33.582 15.1667 36.832 15.1667ZM45.4987 16.25C46.322 16.25 47.0414 18.0418 47.4054 21.1163L47.5072 22.0762L47.5484 22.5853L47.6134 23.6557L47.635 24.2168L47.661 25.389L47.6654 26L47.661 26.611L47.635 27.7832L47.6134 28.3465L47.5484 29.4147L47.505 29.9238L47.4075 30.8837C47.0414 33.9603 46.3242 35.75 45.4987 35.75C44.6754 35.75 43.956 33.9582 43.592 30.8837L43.4902 29.9238C43.4753 29.7542 43.4616 29.5845 43.449 29.4147L43.384 28.3443C43.3756 28.1573 43.3684 27.9703 43.3624 27.7832L43.3364 26.611V25.389L43.3624 24.2168L43.384 23.6535L43.449 22.5853L43.4924 22.0762L43.5899 21.1163C43.956 18.0397 44.6732 16.25 45.4987 16.25Z"
- fill="currentColor"
- />
- </svg>
-);
-
-export const Reddit = (props: SVGProps<SVGSVGElement>) => (
- <svg
- xmlns="http://www.w3.org/2000/svg"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- className="_1O4jTk-dZ-VIxsCuYB6OR8"
- viewBox="0 0 216 216"
- width="1em"
- height="1em"
- {...props}
- >
- <defs>
- <radialGradient
- id="snoo-radial-gragient"
- cx={169.75}
- cy={92.19}
- r={50.98}
- fx={169.75}
- fy={92.19}
- gradientTransform="matrix(1 0 0 .87 0 11.64)"
- gradientUnits="userSpaceOnUse"
- >
- <stop offset={0} stopColor="#feffff" />
- <stop offset={0.4} stopColor="#feffff" />
- <stop offset={0.51} stopColor="#f9fcfc" />
- <stop offset={0.62} stopColor="#edf3f5" />
- <stop offset={0.7} stopColor="#dee9ec" />
- <stop offset={0.72} stopColor="#d8e4e8" />
- <stop offset={0.76} stopColor="#ccd8df" />
- <stop offset={0.8} stopColor="#c8d5dd" />
- <stop offset={0.83} stopColor="#ccd6de" />
- <stop offset={0.85} stopColor="#d8dbe2" />
- <stop offset={0.88} stopColor="#ede3e9" />
- <stop offset={0.9} stopColor="#ffebef" />
- </radialGradient>
- <radialGradient
- xlinkHref="#snoo-radial-gragient"
- id="snoo-radial-gragient-2"
- cx={47.31}
- r={50.98}
- fx={47.31}
- />
- <radialGradient
- xlinkHref="#snoo-radial-gragient"
- id="snoo-radial-gragient-3"
- cx={109.61}
- cy={85.59}
- r={153.78}
- fx={109.61}
- fy={85.59}
- gradientTransform="matrix(1 0 0 .7 0 25.56)"
- />
- <radialGradient
- id="snoo-radial-gragient-4"
- cx={-6.01}
- cy={64.68}
- r={12.85}
- fx={-6.01}
- fy={64.68}
- gradientTransform="matrix(1.07 0 0 1.55 81.08 27.26)"
- gradientUnits="userSpaceOnUse"
- >
- <stop offset={0} stopColor="#f60" />
- <stop offset={0.5} stopColor="#ff4500" />
- <stop offset={0.7} stopColor="#fc4301" />
- <stop offset={0.82} stopColor="#f43f07" />
- <stop offset={0.92} stopColor="#e53812" />
- <stop offset={1} stopColor="#d4301f" />
- </radialGradient>
- <radialGradient
- xlinkHref="#snoo-radial-gragient-4"
- id="snoo-radial-gragient-5"
- cx={-73.55}
- cy={64.68}
- r={12.85}
- fx={-73.55}
- fy={64.68}
- gradientTransform="matrix(-1.07 0 0 1.55 62.87 27.26)"
- />
- <radialGradient
- id="snoo-radial-gragient-6"
- cx={107.93}
- cy={166.96}
- r={45.3}
- fx={107.93}
- fy={166.96}
- gradientTransform="matrix(1 0 0 .66 0 57.4)"
- gradientUnits="userSpaceOnUse"
- >
- <stop offset={0} stopColor="#172e35" />
- <stop offset={0.29} stopColor="#0e1c21" />
- <stop offset={0.73} stopColor="#030708" />
- <stop offset={1} />
- </radialGradient>
- <radialGradient
- xlinkHref="#snoo-radial-gragient"
- id="snoo-radial-gragient-7"
- cx={147.88}
- cy={32.94}
- r={39.77}
- fx={147.88}
- fy={32.94}
- gradientTransform="matrix(1 0 0 .98 0 .54)"
- />
- <radialGradient
- id="snoo-radial-gragient-8"
- cx={131.31}
- cy={73.08}
- r={32.6}
- fx={131.31}
- fy={73.08}
- gradientUnits="userSpaceOnUse"
- >
- <stop offset={0.48} stopColor="#7a9299" />
- <stop offset={0.67} stopColor="#172e35" />
- <stop offset={0.75} />
- <stop offset={0.82} stopColor="#172e35" />
- </radialGradient>
- <style>
- {"\n .snoo-cls-11{strokeWidth:0;fill:#ffc49c}\n "}
- </style>
- </defs>
- <path
- fill="#ff4500"
- strokeWidth={0}
- d="M108 0C48.35 0 0 48.35 0 108c0 29.82 12.09 56.82 31.63 76.37l-20.57 20.57C6.98 209.02 9.87 216 15.64 216H108c59.65 0 108-48.35 108-108S167.65 0 108 0Z"
- />
- <circle
- cx={169.22}
- cy={106.98}
- r={25.22}
- fill="url(#snoo-radial-gragient)"
- strokeWidth={0}
- />
- <circle
- cx={46.78}
- cy={106.98}
- r={25.22}
- fill="url(#snoo-radial-gragient-2)"
- strokeWidth={0}
- />
- <ellipse
- cx={108.06}
- cy={128.64}
- fill="url(#snoo-radial-gragient-3)"
- strokeWidth={0}
- rx={72}
- ry={54}
- />
- <path
- fill="url(#snoo-radial-gragient-4)"
- strokeWidth={0}
- d="M86.78 123.48c-.42 9.08-6.49 12.38-13.56 12.38s-12.46-4.93-12.04-14.01c.42-9.08 6.49-15.02 13.56-15.02s12.46 7.58 12.04 16.66Z"
- />
- <path
- fill="url(#snoo-radial-gragient-5)"
- strokeWidth={0}
- d="M129.35 123.48c.42 9.08 6.49 12.38 13.56 12.38s12.46-4.93 12.04-14.01c-.42-9.08-6.49-15.02-13.56-15.02s-12.46 7.58-12.04 16.66Z"
- />
- <ellipse
- cx={79.63}
- cy={116.37}
- className="snoo-cls-11"
- rx={2.8}
- ry={3.05}
- />
- <ellipse
- cx={146.21}
- cy={116.37}
- className="snoo-cls-11"
- rx={2.8}
- ry={3.05}
- />
- <path
- fill="url(#snoo-radial-gragient-6)"
- strokeWidth={0}
- d="M108.06 142.92c-8.76 0-17.16.43-24.92 1.22-1.33.13-2.17 1.51-1.65 2.74 4.35 10.39 14.61 17.69 26.57 17.69s22.23-7.3 26.57-17.69c.52-1.23-.33-2.61-1.65-2.74-7.77-.79-16.16-1.22-24.92-1.22Z"
- />
- <circle
- cx={147.49}
- cy={49.43}
- r={17.87}
- fill="url(#snoo-radial-gragient-7)"
- strokeWidth={0}
- />
- <path
- fill="url(#snoo-radial-gragient-8)"
- strokeWidth={0}
- d="M107.8 76.92c-2.14 0-3.87-.89-3.87-2.27 0-16.01 13.03-29.04 29.04-29.04 2.14 0 3.87 1.73 3.87 3.87s-1.73 3.87-3.87 3.87c-11.74 0-21.29 9.55-21.29 21.29 0 1.38-1.73 2.27-3.87 2.27Z"
- />
- <path
- fill="#842123"
- strokeWidth={0}
- d="M62.82 122.65c.39-8.56 6.08-14.16 12.69-14.16 6.26 0 11.1 6.39 11.28 14.33.17-8.88-5.13-15.99-12.05-15.99s-13.14 6.05-13.56 15.2c-.42 9.15 4.97 13.83 12.04 13.83h.52c-6.44-.16-11.3-4.79-10.91-13.2Zm90.48 0c-.39-8.56-6.08-14.16-12.69-14.16-6.26 0-11.1 6.39-11.28 14.33-.17-8.88 5.13-15.99 12.05-15.99 7.07 0 13.14 6.05 13.56 15.2.42 9.15-4.97 13.83-12.04 13.83h-.52c6.44-.16 11.3-4.79 10.91-13.2Z"
- />
- </svg>
-);
-
-export const Notion = (props: SVGProps<SVGSVGElement>) => (
- <svg
- xmlns="http://www.w3.org/2000/svg"
- width="1em"
- height="1em"
- preserveAspectRatio="xMidYMid"
- viewBox="0 0 256 268"
- {...props}
- >
- <path
- fill="#FFF"
- d="M16.092 11.538 164.09.608c18.179-1.56 22.85-.508 34.28 7.801l47.243 33.282C253.406 47.414 256 48.975 256 55.207v182.527c0 11.439-4.155 18.205-18.696 19.24L65.44 267.378c-10.913.517-16.11-1.043-21.825-8.327L8.826 213.814C2.586 205.487 0 199.254 0 191.97V29.726c0-9.352 4.155-17.153 16.092-18.188Z"
- />
- <path d="M164.09.608 16.092 11.538C4.155 12.573 0 20.374 0 29.726v162.245c0 7.284 2.585 13.516 8.826 21.843l34.789 45.237c5.715 7.284 10.912 8.844 21.825 8.327l171.864-10.404c14.532-1.035 18.696-7.801 18.696-19.24V55.207c0-5.911-2.336-7.614-9.21-12.66l-1.185-.856L198.37 8.409C186.94.1 182.27-.952 164.09.608ZM69.327 52.22c-14.033.945-17.216 1.159-25.186-5.323L23.876 30.778c-2.06-2.086-1.026-4.69 4.163-5.207l142.274-10.395c11.947-1.043 18.17 3.12 22.842 6.758l24.401 17.68c1.043.525 3.638 3.637.517 3.637L71.146 52.095l-1.819.125Zm-16.36 183.954V81.222c0-6.767 2.077-9.887 8.3-10.413L230.02 60.93c5.724-.517 8.31 3.12 8.31 9.879v153.917c0 6.767-1.044 12.49-10.387 13.008l-161.487 9.361c-9.343.517-13.489-2.594-13.489-10.921ZM212.377 89.53c1.034 4.681 0 9.362-4.681 9.897l-7.783 1.542v114.404c-6.758 3.637-12.981 5.715-18.18 5.715-8.308 0-10.386-2.604-16.609-10.396l-50.898-80.079v77.476l16.1 3.646s0 9.362-12.989 9.362l-35.814 2.077c-1.043-2.086 0-7.284 3.63-8.318l9.351-2.595V109.823l-12.98-1.052c-1.044-4.68 1.55-11.439 8.826-11.965l38.426-2.585 52.958 81.113v-71.76l-13.498-1.552c-1.043-5.733 3.111-9.896 8.3-10.404l35.84-2.087Z" />
- </svg>
-);
-
-export const X = (props: SVGProps<SVGSVGElement>) => (
- <svg
- xmlns="http://www.w3.org/2000/svg"
- width="1em"
- height="1em"
- fill="none"
- viewBox="0 0 1200 1227"
- {...props}
- >
- <path
- fill="#fff"
- d="M714.163 519.284 1160.89 0h-105.86L667.137 450.887 357.328 0H0l468.492 681.821L0 1226.37h105.866l409.625-476.152 327.181 476.152H1200L714.137 519.284h.026ZM569.165 687.828l-47.468-67.894-377.686-540.24h162.604l304.797 435.991 47.468 67.894 396.2 566.721H892.476L569.165 687.854v-.026Z"
- />
- </svg>
-);