From 2a2341d9e86432b5567ba915d0e047df98a15dcb Mon Sep 17 00:00:00 2001 From: karooolis Date: Fri, 1 Nov 2024 17:15:42 +0200 Subject: [PATCH 01/47] initial scaffolding, tailwind setup --- docs/app/globals.css | 39 ++++ docs/app/layout.tsx | 7 +- docs/app/page.tsx | 291 +++-------------------------- docs/app/sections/Architecture.tsx | 10 + docs/app/sections/Changelog.tsx | 10 + docs/app/sections/Ecosystem.tsx | 10 + docs/app/sections/EmptySection.tsx | 10 + docs/app/sections/FindUs.tsx | 62 ++++++ docs/app/sections/Hero.tsx | 70 +++++++ docs/app/sections/Installation.tsx | 10 + docs/app/sections/Integrations.tsx | 10 + docs/app/sections/Newsletter.tsx | 10 + docs/app/sections/Projects.tsx | 91 +++++++++ docs/app/sections/Resources.tsx | 84 +++++++++ docs/app/sections/TrustedBy.tsx | 66 +++++++ docs/components/ui/Container.tsx | 7 + docs/components/ui/Paragraph.tsx | 27 +++ docs/components/ui/Section.tsx | 21 +++ docs/components/ui/Subtitle.tsx | 27 +++ docs/components/ui/Title.tsx | 25 +++ docs/lib/cn.ts | 6 + docs/package.json | 1 + docs/pnpm-lock.yaml | 52 +++--- docs/tailwind.config.ts | 7 +- 24 files changed, 658 insertions(+), 295 deletions(-) create mode 100644 docs/app/globals.css create mode 100644 docs/app/sections/Architecture.tsx create mode 100644 docs/app/sections/Changelog.tsx create mode 100644 docs/app/sections/Ecosystem.tsx create mode 100644 docs/app/sections/EmptySection.tsx create mode 100644 docs/app/sections/FindUs.tsx create mode 100644 docs/app/sections/Hero.tsx create mode 100644 docs/app/sections/Installation.tsx create mode 100644 docs/app/sections/Integrations.tsx create mode 100644 docs/app/sections/Newsletter.tsx create mode 100644 docs/app/sections/Projects.tsx create mode 100644 docs/app/sections/Resources.tsx create mode 100644 docs/app/sections/TrustedBy.tsx create mode 100644 docs/components/ui/Container.tsx create mode 100644 docs/components/ui/Paragraph.tsx create mode 100644 docs/components/ui/Section.tsx create mode 100644 docs/components/ui/Subtitle.tsx create mode 100644 docs/components/ui/Title.tsx create mode 100644 docs/lib/cn.ts diff --git a/docs/app/globals.css b/docs/app/globals.css new file mode 100644 index 0000000000..7683fcd29d --- /dev/null +++ b/docs/app/globals.css @@ -0,0 +1,39 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* Hide scrollbar for Chrome, Safari and Opera */ +body::-webkit-scrollbar, +div::-webkit-scrollbar, +pre::-webkit-scrollbar { + display: none; +} + +body, +div, +pre { + -ms-overflow-style: none; + scrollbar-width: none; +} + +html { + background-color: black; +} + +pre { + font-size: 0.5; + background-color: #222; + border-color: #222; + border-width: 1rem; + border-radius: 0.4rem; + overflow-x: scroll; + margin-bottom: 18px; +} + +summary { + margin-bottom: 16px; +} + +summary > p { + display: inline; +} diff --git a/docs/app/layout.tsx b/docs/app/layout.tsx index 8832457d20..a2b26fa481 100644 --- a/docs/app/layout.tsx +++ b/docs/app/layout.tsx @@ -1,9 +1,8 @@ -import "tailwindcss/tailwind.css"; - import { Metadata } from "next"; import { ReactNode } from "react"; -import { twMerge } from "tailwind-merge"; import localFont from "next/font/local"; +import "./globals.css"; +import { cn } from "../lib/cn"; const supplyMono = localFont({ src: "../public/fonts/PPSupplyMono-Regular.woff2", @@ -37,7 +36,7 @@ type Props = { children: ReactNode }; export default function Layout({ children }: Props) { return ( - {children} + {children} ); } diff --git a/docs/app/page.tsx b/docs/app/page.tsx index d8dfaa034a..0964da9b2f 100644 --- a/docs/app/page.tsx +++ b/docs/app/page.tsx @@ -1,13 +1,15 @@ -import { LatticeIcon } from "../src/icons/LatticeIcon"; import { Metadata } from "next"; -import Link from "next/link"; -import { twMerge } from "tailwind-merge"; -import { SourceIcon } from "../src/icons/SourceIcon"; -import { DocsIcon } from "../src/icons/DocsIcon"; -import { StatusIcon } from "../src/icons/StatusIcon"; -import { CalendarIcon } from "../src/icons/CalendarIcon"; -import { ContributeIcon } from "../src/icons/ContributeIcon"; -import { ChangelogIcon } from "../src/icons/ChangelogIcon"; +import Hero from "./sections/Hero"; +import FindUs from "./sections/FindUs"; +import Resources from "./sections/Resources"; +import TrustedBy from "./sections/TrustedBy"; +import Projects from "./sections/Projects"; +import Installation from "./sections/Installation"; +import Architecture from "./sections/Architecture"; +import Integrations from "./sections/Integrations"; +import Ecosystem from "./sections/Ecosystem"; +import Changelog from "./sections/Changelog"; +import Newsletter from "./sections/Newsletter"; export const metadata: Metadata = { title: "MUD | Framework for onchain applications", @@ -20,266 +22,17 @@ export const metadata: Metadata = { export default async function HomePage() { return ( <> -
-
-
-
MUD
- - - Built by - Lattice - - - -
-
-
- -
-
-
-
- Battle-tested onchain framework for developers. -
-

- MUD provides you with the tools to build ambitious onchain applications. -

-
-
- - Documentation - - - Source - -
-
-
-
-
- -
-
-
-
Resources
-

- Discover more about the open source framework powering complex games & apps on Ethereum. -

-
-
- - - Source code - - - - Changelog - - - - Documentation - - - - Contribute - - - - Status - - - - Roadmap - -
-
- -
-
-
Projects
-

Start using a wide ecosystem of projects powered by MUD.

-
-
- - - Sky Strife - An onchain strategy game - - - - - - OPCraft - Voxel crafting game on OP Stack - - - - - - Primodium - An onchain city-building game - - - - - - Words3 - Onchain scrabble - - - -
-
- -
-
-
Find us
-

Discover more MUD resources, and join our community online.

-
-
- - Newsletter - - - Discord - - - Twitter - - - YouTube - - - Reach out - -
-
-
+ + + + + + + + + + + ); } diff --git a/docs/app/sections/Architecture.tsx b/docs/app/sections/Architecture.tsx new file mode 100644 index 0000000000..9aa17aa80e --- /dev/null +++ b/docs/app/sections/Architecture.tsx @@ -0,0 +1,10 @@ +import { Container } from "../../components/ui/Container"; +import { Section } from "../../components/ui/Section"; + +export default function Architecture() { + return ( +
+ Architecture +
+ ); +} diff --git a/docs/app/sections/Changelog.tsx b/docs/app/sections/Changelog.tsx new file mode 100644 index 0000000000..08bc8228ea --- /dev/null +++ b/docs/app/sections/Changelog.tsx @@ -0,0 +1,10 @@ +import { Container } from "../../components/ui/Container"; +import { Section } from "../../components/ui/Section"; + +export default function Changelog() { + return ( +
+ Changelog +
+ ); +} diff --git a/docs/app/sections/Ecosystem.tsx b/docs/app/sections/Ecosystem.tsx new file mode 100644 index 0000000000..7de90eed82 --- /dev/null +++ b/docs/app/sections/Ecosystem.tsx @@ -0,0 +1,10 @@ +import { Container } from "../../components/ui/Container"; +import { Section } from "../../components/ui/Section"; + +export default function Ecosystem() { + return ( +
+ Ecosystem +
+ ); +} diff --git a/docs/app/sections/EmptySection.tsx b/docs/app/sections/EmptySection.tsx new file mode 100644 index 0000000000..e15a7e0c30 --- /dev/null +++ b/docs/app/sections/EmptySection.tsx @@ -0,0 +1,10 @@ +import { Container } from "../../components/ui/Container"; +import { Section } from "../../components/ui/Section"; + +export default function EmptySection() { + return ( +
+ Content +
+ ); +} diff --git a/docs/app/sections/FindUs.tsx b/docs/app/sections/FindUs.tsx new file mode 100644 index 0000000000..3f7c24d7f0 --- /dev/null +++ b/docs/app/sections/FindUs.tsx @@ -0,0 +1,62 @@ +import { Container } from "../../components/ui/Container"; +import { Section } from "../../components/ui/Section"; + +export default function FindUs() { + return ( +
+ +
+
+
Find us
+

Discover more MUD resources, and join our community online.

+
+ +
+
+
+ ); +} diff --git a/docs/app/sections/Hero.tsx b/docs/app/sections/Hero.tsx new file mode 100644 index 0000000000..d455802a02 --- /dev/null +++ b/docs/app/sections/Hero.tsx @@ -0,0 +1,70 @@ +import { LatticeIcon } from "../../src/icons/LatticeIcon"; +import Link from "next/link"; +import { cn } from "../../lib/cn"; +import { Section } from "../../components/ui/Section"; +import { Container } from "../../components/ui/Container"; + +export default function Hero() { + return ( +
+ +
+ +
+
+ +
+
+
+
+ Battle-tested onchain framework for developers. +
+

+ MUD provides you with the tools to build ambitious onchain applications. +

+
+
+ + Documentation + + + Source + +
+
+
+
+
+
+ ); +} diff --git a/docs/app/sections/Installation.tsx b/docs/app/sections/Installation.tsx new file mode 100644 index 0000000000..8a163b438f --- /dev/null +++ b/docs/app/sections/Installation.tsx @@ -0,0 +1,10 @@ +import { Container } from "../../components/ui/Container"; +import { Section } from "../../components/ui/Section"; + +export default function Installation() { + return ( +
+ Installation +
+ ); +} diff --git a/docs/app/sections/Integrations.tsx b/docs/app/sections/Integrations.tsx new file mode 100644 index 0000000000..a46c6cca98 --- /dev/null +++ b/docs/app/sections/Integrations.tsx @@ -0,0 +1,10 @@ +import { Container } from "../../components/ui/Container"; +import { Section } from "../../components/ui/Section"; + +export default function Integrations() { + return ( +
+ Integrations +
+ ); +} diff --git a/docs/app/sections/Newsletter.tsx b/docs/app/sections/Newsletter.tsx new file mode 100644 index 0000000000..9eae72dfa1 --- /dev/null +++ b/docs/app/sections/Newsletter.tsx @@ -0,0 +1,10 @@ +import { Container } from "../../components/ui/Container"; +import { Section } from "../../components/ui/Section"; + +export default function Newsletter() { + return ( +
+ Newsletter +
+ ); +} diff --git a/docs/app/sections/Projects.tsx b/docs/app/sections/Projects.tsx new file mode 100644 index 0000000000..b05385319a --- /dev/null +++ b/docs/app/sections/Projects.tsx @@ -0,0 +1,91 @@ +import { Container } from "../../components/ui/Container"; +import { Section } from "../../components/ui/Section"; + +export default function Projects() { + return ( +
+ + + +
+ ); +} diff --git a/docs/app/sections/Resources.tsx b/docs/app/sections/Resources.tsx new file mode 100644 index 0000000000..a788e42d3e --- /dev/null +++ b/docs/app/sections/Resources.tsx @@ -0,0 +1,84 @@ +import Link from "next/link"; +import { SourceIcon } from "../../src/icons/SourceIcon"; +import { DocsIcon } from "../../src/icons/DocsIcon"; +import { StatusIcon } from "../../src/icons/StatusIcon"; +import { CalendarIcon } from "../../src/icons/CalendarIcon"; +import { ContributeIcon } from "../../src/icons/ContributeIcon"; +import { ChangelogIcon } from "../../src/icons/ChangelogIcon"; +import { Section } from "../../components/ui/Section"; +import { Container } from "../../components/ui/Container"; + +export default function Resources() { + return ( +
+ +
+
+
Resources
+

+ Discover more about the open source framework powering complex games & apps on Ethereum. +

+
+
+ + + Source code + + + + Changelog + + + + Documentation + + + + Contribute + + + + Status + + + + Roadmap + +
+
+
+
+ ); +} diff --git a/docs/app/sections/TrustedBy.tsx b/docs/app/sections/TrustedBy.tsx new file mode 100644 index 0000000000..c1421c2b62 --- /dev/null +++ b/docs/app/sections/TrustedBy.tsx @@ -0,0 +1,66 @@ +"use client"; + +import { Container } from "../../components/ui/Container"; +import { Section } from "../../components/ui/Section"; +import Image from "next/image"; + +// TODO: fetch dynamically +const contributors = [ + "/avatars/alvarius.png", + "/avatars/tdot.png", + "/avatars/frolic.png", + "/avatars/kumpis.jpeg", + "/avatars/tux.jpg", + "/avatars/vdrg.png", + "/avatars/ludens.png", +]; + +export default function TrustedBy() { + return ( +
+ +
+
+
+ stars +
+

+ 3,325 + stars +

+
+ +
+
+ {contributors.map((contributor) => ( + frolic + ))} +
+ +

+ 146 + contributors +

+
+ +
+
+ graph +
+

+ 30+ + projects +

+
+
+
+
+ ); +} diff --git a/docs/components/ui/Container.tsx b/docs/components/ui/Container.tsx new file mode 100644 index 0000000000..09a94c32a3 --- /dev/null +++ b/docs/components/ui/Container.tsx @@ -0,0 +1,7 @@ +import { cn } from "../../lib/cn"; + +export const Container = ({ children, className }: { children: React.ReactNode; className?: string }) => { + return ( +
{children}
+ ); +}; diff --git a/docs/components/ui/Paragraph.tsx b/docs/components/ui/Paragraph.tsx new file mode 100644 index 0000000000..99cc08c8b9 --- /dev/null +++ b/docs/components/ui/Paragraph.tsx @@ -0,0 +1,27 @@ +import { cn } from "../../lib/cn"; + +export const Paragraph = ({ + style, + className, + children, +}: { + style?: React.CSSProperties; + className?: string; + children: React.ReactNode; +}) => { + return ( +

+ {children} +

+ ); +}; diff --git a/docs/components/ui/Section.tsx b/docs/components/ui/Section.tsx new file mode 100644 index 0000000000..17c4840707 --- /dev/null +++ b/docs/components/ui/Section.tsx @@ -0,0 +1,21 @@ +import { ForwardedRef, forwardRef } from "react"; +import { cn } from "../../lib/cn"; + +export const Section = forwardRef(function RefSection( + { + children, + className, + style, + }: { + children: React.ReactNode; + className?: string; + style?: React.CSSProperties; + }, + ref?: ForwardedRef, +) { + return ( +
+ {children} +
+ ); +}); diff --git a/docs/components/ui/Subtitle.tsx b/docs/components/ui/Subtitle.tsx new file mode 100644 index 0000000000..8e86118587 --- /dev/null +++ b/docs/components/ui/Subtitle.tsx @@ -0,0 +1,27 @@ +import { cn } from "../../lib/cn"; + +export const Subtitle = ({ + style, + className, + children, +}: { + style?: React.CSSProperties; + className?: string; + children: React.ReactNode; +}) => { + return ( +

+ {children} +

+ ); +}; diff --git a/docs/components/ui/Title.tsx b/docs/components/ui/Title.tsx new file mode 100644 index 0000000000..f93fb0acf2 --- /dev/null +++ b/docs/components/ui/Title.tsx @@ -0,0 +1,25 @@ +import { cn } from "../../lib/cn"; + +export const Title = ({ + style, + className, + children, +}: { + style?: React.CSSProperties; + className?: string; + children: React.ReactNode; +}) => { + const title = ( +

+ {children} +

+ ); + + return title; +}; diff --git a/docs/lib/cn.ts b/docs/lib/cn.ts new file mode 100644 index 0000000000..365058cebd --- /dev/null +++ b/docs/lib/cn.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/docs/package.json b/docs/package.json index a1b0a4430a..b450455785 100644 --- a/docs/package.json +++ b/docs/package.json @@ -12,6 +12,7 @@ "start": "next start" }, "dependencies": { + "clsx": "^2.1.1", "next": "^13.3.0", "nextra": "^2.10.0", "nextra-theme-docs": "^2.10.0", diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index f9bfadb10c..dca6e8221e 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -8,15 +8,18 @@ importers: .: dependencies: + clsx: + specifier: ^2.1.1 + version: 2.1.1 next: specifier: ^13.3.0 - version: 13.3.0(react-dom@18.2.0)(react@18.2.0) + version: 13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) nextra: specifier: ^2.10.0 - version: 2.10.0(next@13.3.0)(react-dom@18.2.0)(react@18.2.0) + version: 2.10.0(next@13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) nextra-theme-docs: specifier: ^2.10.0 - version: 2.10.0(next@13.3.0)(nextra@2.10.0)(react-dom@18.2.0)(react@18.2.0) + version: 2.10.0(next@13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(nextra@2.10.0(next@13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -426,6 +429,10 @@ packages: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -1718,7 +1725,7 @@ snapshots: '@braintree/sanitize-url@6.0.2': {} - '@headlessui/react@1.7.14(react-dom@18.2.0)(react@18.2.0)': + '@headlessui/react@1.7.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: client-only: 0.0.1 react: 18.2.0 @@ -2040,6 +2047,8 @@ snapshots: clsx@1.2.1: {} + clsx@2.1.1: {} + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -3090,7 +3099,7 @@ snapshots: nanoid@3.3.6: {} - next-mdx-remote@4.4.1(react-dom@18.2.0)(react@18.2.0): + next-mdx-remote@4.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@mdx-js/mdx': 2.3.0 '@mdx-js/react': 2.3.0(react@18.2.0) @@ -3101,19 +3110,19 @@ snapshots: transitivePeerDependencies: - supports-color - next-seo@6.0.0(next@13.3.0)(react-dom@18.2.0)(react@18.2.0): + next-seo@6.0.0(next@13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - next: 13.3.0(react-dom@18.2.0)(react@18.2.0) + next: 13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - next-themes@0.2.1(next@13.3.0)(react-dom@18.2.0)(react@18.2.0): + next-themes@0.2.1(next@13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - next: 13.3.0(react-dom@18.2.0)(react@18.2.0) + next: 13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - next@13.3.0(react-dom@18.2.0)(react@18.2.0): + next@13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@next/env': 13.3.0 '@swc/helpers': 0.4.14 @@ -3137,9 +3146,9 @@ snapshots: - '@babel/core' - babel-plugin-macros - nextra-theme-docs@2.10.0(next@13.3.0)(nextra@2.10.0)(react-dom@18.2.0)(react@18.2.0): + nextra-theme-docs@2.10.0(next@13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(nextra@2.10.0(next@13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@headlessui/react': 1.7.14(react-dom@18.2.0)(react@18.2.0) + '@headlessui/react': 1.7.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@popperjs/core': 2.11.7 clsx: 1.2.1 flexsearch: 0.7.31 @@ -3147,18 +3156,18 @@ snapshots: git-url-parse: 13.1.0 intersection-observer: 0.12.2 match-sorter: 6.3.1 - next: 13.3.0(react-dom@18.2.0)(react@18.2.0) - next-seo: 6.0.0(next@13.3.0)(react-dom@18.2.0)(react@18.2.0) - next-themes: 0.2.1(next@13.3.0)(react-dom@18.2.0)(react@18.2.0) - nextra: 2.10.0(next@13.3.0)(react-dom@18.2.0)(react@18.2.0) + next: 13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + next-seo: 6.0.0(next@13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + next-themes: 0.2.1(next@13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + nextra: 2.10.0(next@13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) scroll-into-view-if-needed: 3.0.10 zod: 3.21.4 - nextra@2.10.0(next@13.3.0)(react-dom@18.2.0)(react@18.2.0): + nextra@2.10.0(next@13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@headlessui/react': 1.7.14(react-dom@18.2.0)(react@18.2.0) + '@headlessui/react': 1.7.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@mdx-js/mdx': 2.3.0 '@mdx-js/react': 2.3.0(react@18.2.0) '@napi-rs/simple-git': 0.1.8 @@ -3170,8 +3179,8 @@ snapshots: gray-matter: 4.0.3 katex: 0.16.8 lodash.get: 4.4.2 - next: 13.3.0(react-dom@18.2.0)(react@18.2.0) - next-mdx-remote: 4.4.1(react-dom@18.2.0)(react@18.2.0) + next: 13.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + next-mdx-remote: 4.4.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) p-limit: 3.1.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -3277,8 +3286,9 @@ snapshots: postcss-load-config@4.0.1(postcss@8.4.31): dependencies: lilconfig: 2.1.0 - postcss: 8.4.31 yaml: 2.3.4 + optionalDependencies: + postcss: 8.4.31 postcss-nested@6.0.1(postcss@8.4.31): dependencies: diff --git a/docs/tailwind.config.ts b/docs/tailwind.config.ts index 5fce4f12a9..da607d748f 100644 --- a/docs/tailwind.config.ts +++ b/docs/tailwind.config.ts @@ -1,7 +1,12 @@ import type { Config } from "tailwindcss"; const config: Config = { - content: ["./app/**/*.{js,ts,jsx,tsx,mdx}", "./pages/**/*.{js,ts,jsx,tsx,mdx}", "./src/**/*.{js,ts,jsx,tsx,mdx}"], + content: [ + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./components/**/*.{js,ts,jsx,tsx,mdx}", + "./app/**/*.{js,ts,jsx,tsx,mdx}", + "./src/**/*.{js,ts,jsx,tsx,mdx}", + ], theme: { extend: { fontFamily: { From e2d46d9554cbfff8a3b33e2d68fb0530c50943d0 Mon Sep 17 00:00:00 2001 From: karooolis Date: Mon, 4 Nov 2024 16:14:20 +0700 Subject: [PATCH 02/47] fix fonts, add bgs, changelog, installation --- docs/app/layout.tsx | 34 ++++++- docs/app/page.tsx | 2 - docs/app/sections/Architecture.tsx | 22 ++++- docs/app/sections/Changelog.tsx | 42 +++++++- docs/app/sections/Ecosystem.tsx | 9 +- docs/app/sections/FindUs.tsx | 83 +++++++--------- docs/app/sections/Hero.tsx | 13 +-- docs/app/sections/Installation.tsx | 42 +++++++- docs/app/sections/Integrations.tsx | 19 +++- docs/app/sections/Newsletter.tsx | 9 +- docs/app/sections/Projects.tsx | 91 ------------------ docs/app/sections/Resources.tsx | 11 ++- docs/app/sections/TrustedBy.tsx | 8 +- docs/pages/_app.tsx | 1 - docs/public/basier-medium.otf | Bin 34540 -> 0 bytes .../BasierCircle-Bold.otf} | Bin .../BasierCircle-Regular.otf} | Bin .../BasierCircle-SemiBold.otf} | Bin docs/public/fonts/BerkeleyMono-Regular.otf | Bin 0 -> 9060 bytes docs/styles.css | 58 ----------- docs/tailwind.config.ts | 11 ++- 21 files changed, 228 insertions(+), 227 deletions(-) delete mode 100644 docs/app/sections/Projects.tsx delete mode 100644 docs/public/basier-medium.otf rename docs/public/{basier-bold.otf => fonts/BasierCircle-Bold.otf} (100%) rename docs/public/{basier-regular.otf => fonts/BasierCircle-Regular.otf} (100%) rename docs/public/{basier-semibold.otf => fonts/BasierCircle-SemiBold.otf} (100%) create mode 100644 docs/public/fonts/BerkeleyMono-Regular.otf delete mode 100644 docs/styles.css diff --git a/docs/app/layout.tsx b/docs/app/layout.tsx index a2b26fa481..fca212abce 100644 --- a/docs/app/layout.tsx +++ b/docs/app/layout.tsx @@ -4,6 +4,27 @@ import localFont from "next/font/local"; import "./globals.css"; import { cn } from "../lib/cn"; +export const basierCircle = localFont({ + src: [ + { + path: "../public/fonts/BasierCircle-Regular.otf", + weight: "400", + style: "normal", + }, + { + path: "../public/fonts/BasierCircle-SemiBold.otf", + weight: "600", + style: "normal", + }, + { + path: "../public/fonts/BasierCircle-Bold.otf", + weight: "700", + style: "normal", + }, + ], + variable: "--font-basier-circle", +}); + const supplyMono = localFont({ src: "../public/fonts/PPSupplyMono-Regular.woff2", preload: true, @@ -20,6 +41,13 @@ const supplyMono = localFont({ ], }); +const berkeleyMono = localFont({ + src: "../public/fonts/BerkeleyMono-Regular.otf", + preload: true, + variable: "--font-berkeley-mono", + fallback: ["ui-monospace"], +}); + export const metadata: Metadata = { title: "MUD | Framework for onchain applications", description: @@ -36,7 +64,11 @@ type Props = { children: ReactNode }; export default function Layout({ children }: Props) { return ( - {children} + + {children} + ); } diff --git a/docs/app/page.tsx b/docs/app/page.tsx index 0964da9b2f..5d994fd473 100644 --- a/docs/app/page.tsx +++ b/docs/app/page.tsx @@ -3,7 +3,6 @@ import Hero from "./sections/Hero"; import FindUs from "./sections/FindUs"; import Resources from "./sections/Resources"; import TrustedBy from "./sections/TrustedBy"; -import Projects from "./sections/Projects"; import Installation from "./sections/Installation"; import Architecture from "./sections/Architecture"; import Integrations from "./sections/Integrations"; @@ -30,7 +29,6 @@ export default async function HomePage() { - diff --git a/docs/app/sections/Architecture.tsx b/docs/app/sections/Architecture.tsx index 9aa17aa80e..23ec22196b 100644 --- a/docs/app/sections/Architecture.tsx +++ b/docs/app/sections/Architecture.tsx @@ -3,8 +3,26 @@ import { Section } from "../../components/ui/Section"; export default function Architecture() { return ( -
- Architecture +
+ +
+
+

Open source & extensible

+

+ There is no other framework that offers as much out-of-the-box utility for developers of games & other + complex onchain apps. +

+

+ From developer experience to efficient data storage, MUD is designed to scale with the success of your + team & project. +

+

+ All of MUD’s interfaces, from pre-confirmations to indexing, are also open under the mud_* JSON-RPC + namespace, which lets you swap out any components as needed. +

+
+
+
); } diff --git a/docs/app/sections/Changelog.tsx b/docs/app/sections/Changelog.tsx index 08bc8228ea..1b3dc127e3 100644 --- a/docs/app/sections/Changelog.tsx +++ b/docs/app/sections/Changelog.tsx @@ -1,10 +1,48 @@ import { Container } from "../../components/ui/Container"; import { Section } from "../../components/ui/Section"; +const ChangelogItem = () => { + return ( +
+
+
+
+ 2.0 +
+

may 1, 2024

+
+ +
    +
  • Some thing that was updated goes here
  • +
  • Some thing that was updated goes here
  • +
  • Some thing that was updated goes here
  • +
  • Some thing that was updated goes here
  • +
+
+
+ ); +}; + export default function Changelog() { return ( -
- Changelog +
+ +
+
+

Changelog

+

Learn what’s changed in recent releases of MUD.

+
+ +
+
+ + + + +
+
+
+
); } diff --git a/docs/app/sections/Ecosystem.tsx b/docs/app/sections/Ecosystem.tsx index 7de90eed82..3ba430c9bc 100644 --- a/docs/app/sections/Ecosystem.tsx +++ b/docs/app/sections/Ecosystem.tsx @@ -3,8 +3,13 @@ import { Section } from "../../components/ui/Section"; export default function Ecosystem() { return ( -
- Ecosystem +
+ +
+

Ecosystem

+

Start using a wide ecosystem of projects powered by MUD.

+
+
); } diff --git a/docs/app/sections/FindUs.tsx b/docs/app/sections/FindUs.tsx index 3f7c24d7f0..3573d78ea1 100644 --- a/docs/app/sections/FindUs.tsx +++ b/docs/app/sections/FindUs.tsx @@ -1,59 +1,44 @@ import { Container } from "../../components/ui/Container"; import { Section } from "../../components/ui/Section"; +import { cn } from "../../lib/cn"; + +function FindUsItem({ title, href, icon }: { title: string; href: string; icon: string }) { + return ( + //
+ // {icon} + // {title} + //
+ + + {icon} + {title} + + ); +} export default function FindUs() { return ( -
+
-
-
-
Find us
-

Discover more MUD resources, and join our community online.

+
+
+

Find us

+

Discover more MUD resources, and join our community online.

- diff --git a/docs/app/sections/Hero.tsx b/docs/app/sections/Hero.tsx index d455802a02..8444d73abd 100644 --- a/docs/app/sections/Hero.tsx +++ b/docs/app/sections/Hero.tsx @@ -10,7 +10,7 @@ export default function Hero() {
-
+ +
-
- Battle-tested onchain framework for developers. +
+ Open-source engine for autonomous worlds
-

- MUD provides you with the tools to build ambitious onchain applications. +

+ MUD reduces the complexity of building Ethereum apps with a tightly integrated software stack.

diff --git a/docs/app/sections/Installation.tsx b/docs/app/sections/Installation.tsx index 8a163b438f..ebcb5ead49 100644 --- a/docs/app/sections/Installation.tsx +++ b/docs/app/sections/Installation.tsx @@ -3,8 +3,46 @@ import { Section } from "../../components/ui/Section"; export default function Installation() { return ( -
- Installation +
+ +
+
+
+

Get started

+

+ > pnpm install mud +

+ {/* TODO: add copy to clipboard */} +
+ +

+ Building a complex onchain game has never been easier. You can get going in seconds with the MUD starter + project, which has everything you need to start coding. +

+ +
+

packages/contracts

+

All of your onchain logic will live here.

+
+ +
+

packages/client

+

+ The user interface for your onchain app, served via vite, with a set of developer tools to help + you inspect current state. +

+
+ + + Curious to learn more? Read the docs → + +
+ +
+
+
+
+
); } diff --git a/docs/app/sections/Integrations.tsx b/docs/app/sections/Integrations.tsx index a46c6cca98..5ffd145c42 100644 --- a/docs/app/sections/Integrations.tsx +++ b/docs/app/sections/Integrations.tsx @@ -3,8 +3,23 @@ import { Section } from "../../components/ui/Section"; export default function Integrations() { return ( -
- Integrations +
+ +
+

Integrations

+
+

Standard World Interface

+ {/* TODO: add buttons */} +
+

+ Quarry leverages MUD’s Standard World Interfaces (SWI), which are fully open-source under the mud_* JSON-RPC + namespace. The SWI covers everything from indexing to pre-confirmations. Quarry is Lattice’s full-stack + implementation of the Standard World Interface. +

+
+ +
{/* TODO: add diagram */}
+
); } diff --git a/docs/app/sections/Newsletter.tsx b/docs/app/sections/Newsletter.tsx index 9eae72dfa1..7a40414169 100644 --- a/docs/app/sections/Newsletter.tsx +++ b/docs/app/sections/Newsletter.tsx @@ -3,8 +3,13 @@ import { Section } from "../../components/ui/Section"; export default function Newsletter() { return ( -
- Newsletter +
+ +
+

Newsletter

+

Sign up to receive regular updates about MUD.

+
+
); } diff --git a/docs/app/sections/Projects.tsx b/docs/app/sections/Projects.tsx deleted file mode 100644 index b05385319a..0000000000 --- a/docs/app/sections/Projects.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import { Container } from "../../components/ui/Container"; -import { Section } from "../../components/ui/Section"; - -export default function Projects() { - return ( -
- - - -
- ); -} diff --git a/docs/app/sections/Resources.tsx b/docs/app/sections/Resources.tsx index a788e42d3e..bbdeb6d272 100644 --- a/docs/app/sections/Resources.tsx +++ b/docs/app/sections/Resources.tsx @@ -10,15 +10,16 @@ import { Container } from "../../components/ui/Container"; export default function Resources() { return ( -
+
-
-
-
Resources
-

+

+
+

Resources

+

Discover more about the open source framework powering complex games & apps on Ethereum.

+
+
+
+

Trusted by many

+ +

MUD is well established and trusted by leading teams across the industry.

+
+
diff --git a/docs/pages/_app.tsx b/docs/pages/_app.tsx index 66097d797c..44e9eb7cbd 100644 --- a/docs/pages/_app.tsx +++ b/docs/pages/_app.tsx @@ -1,4 +1,3 @@ -import "../styles.css"; import type { AppProps } from "next/app"; export default function MyApp({ Component, pageProps }: AppProps) { diff --git a/docs/public/basier-medium.otf b/docs/public/basier-medium.otf deleted file mode 100644 index 32326f4d50f55b0ca09c9461554694a36966322a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34540 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 Bk@Wxo diff --git a/docs/public/basier-bold.otf b/docs/public/fonts/BasierCircle-Bold.otf similarity index 100% rename from docs/public/basier-bold.otf rename to docs/public/fonts/BasierCircle-Bold.otf diff --git a/docs/public/basier-regular.otf b/docs/public/fonts/BasierCircle-Regular.otf similarity index 100% rename from docs/public/basier-regular.otf rename to docs/public/fonts/BasierCircle-Regular.otf diff --git a/docs/public/basier-semibold.otf b/docs/public/fonts/BasierCircle-SemiBold.otf similarity index 100% rename from docs/public/basier-semibold.otf rename to docs/public/fonts/BasierCircle-SemiBold.otf diff --git a/docs/public/fonts/BerkeleyMono-Regular.otf b/docs/public/fonts/BerkeleyMono-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..8090edd32da8da3dd6812bdf9bf6d83e0494a0bb GIT binary patch literal 9060 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 Date: Mon, 4 Nov 2024 17:19:32 +0700 Subject: [PATCH 03/47] add clipboard, icons, improve layout --- docs/app/sections/Architecture.tsx | 11 +- docs/app/sections/FindUs.tsx | 40 ++- docs/app/sections/Hero.tsx | 6 +- docs/app/sections/Installation.tsx | 21 +- docs/app/sections/Integrations.tsx | 9 +- docs/package.json | 1 + docs/pnpm-lock.yaml | 40 +++ docs/public/images/diagrams/mud.svg | 10 + docs/public/images/diagrams/swi.svg | 455 +++++++++++++++++++++++++ docs/public/images/icons/clipboard.svg | 6 + docs/public/images/icons/discord.svg | 10 + docs/public/images/icons/github.svg | 15 + docs/public/images/icons/magazine.svg | 10 + docs/public/images/icons/twitter.svg | 3 + docs/public/images/icons/youtube.svg | 3 + docs/tailwind.config.ts | 7 +- 16 files changed, 619 insertions(+), 28 deletions(-) create mode 100644 docs/public/images/diagrams/mud.svg create mode 100644 docs/public/images/diagrams/swi.svg create mode 100644 docs/public/images/icons/clipboard.svg create mode 100644 docs/public/images/icons/discord.svg create mode 100644 docs/public/images/icons/github.svg create mode 100644 docs/public/images/icons/magazine.svg create mode 100644 docs/public/images/icons/twitter.svg create mode 100644 docs/public/images/icons/youtube.svg diff --git a/docs/app/sections/Architecture.tsx b/docs/app/sections/Architecture.tsx index 23ec22196b..685f6985ae 100644 --- a/docs/app/sections/Architecture.tsx +++ b/docs/app/sections/Architecture.tsx @@ -1,12 +1,13 @@ +import Image from "next/image"; import { Container } from "../../components/ui/Container"; import { Section } from "../../components/ui/Section"; export default function Architecture() { return ( -
+
-
-
+
+

Open source & extensible

There is no other framework that offers as much out-of-the-box utility for developers of games & other @@ -21,6 +22,10 @@ export default function Architecture() { namespace, which lets you swap out any components as needed.

+ +
+ MUD Architecture +
diff --git a/docs/app/sections/FindUs.tsx b/docs/app/sections/FindUs.tsx index 3573d78ea1..5f59e9da01 100644 --- a/docs/app/sections/FindUs.tsx +++ b/docs/app/sections/FindUs.tsx @@ -1,21 +1,17 @@ +import Image from "next/image"; import { Container } from "../../components/ui/Container"; import { Section } from "../../components/ui/Section"; import { cn } from "../../lib/cn"; -function FindUsItem({ title, href, icon }: { title: string; href: string; icon: string }) { +function FindUsItem({ title, href, icon }: { title: string; href: string; icon: React.ReactNode }) { return ( - //
- // {icon} - // {title} - //
-
{icon} @@ -35,10 +31,26 @@ export default function FindUs() {
- - - - + } + /> + } + /> + } + /> + } + />
diff --git a/docs/app/sections/Hero.tsx b/docs/app/sections/Hero.tsx index 8444d73abd..9061fb5112 100644 --- a/docs/app/sections/Hero.tsx +++ b/docs/app/sections/Hero.tsx @@ -3,6 +3,7 @@ import Link from "next/link"; import { cn } from "../../lib/cn"; import { Section } from "../../components/ui/Section"; import { Container } from "../../components/ui/Container"; +import Image from "next/image"; export default function Hero() { return ( @@ -49,16 +50,17 @@ export default function Hero() { diff --git a/docs/app/sections/Installation.tsx b/docs/app/sections/Installation.tsx index ebcb5ead49..03af3697ce 100644 --- a/docs/app/sections/Installation.tsx +++ b/docs/app/sections/Installation.tsx @@ -1,5 +1,9 @@ +"use client"; + +import Image from "next/image"; import { Container } from "../../components/ui/Container"; import { Section } from "../../components/ui/Section"; +import { CopyToClipboard } from "react-copy-to-clipboard"; export default function Installation() { return ( @@ -9,10 +13,21 @@ export default function Installation() {

Get started

-

- > pnpm install mud +

+ + > pnpm install mud + + {/* TODO: add copy to clipboard */} + {}}> + pnpm install mud +

- {/* TODO: add copy to clipboard */}

diff --git a/docs/app/sections/Integrations.tsx b/docs/app/sections/Integrations.tsx index 5ffd145c42..538e2b27d2 100644 --- a/docs/app/sections/Integrations.tsx +++ b/docs/app/sections/Integrations.tsx @@ -1,10 +1,11 @@ +import Image from "next/image"; import { Container } from "../../components/ui/Container"; import { Section } from "../../components/ui/Section"; export default function Integrations() { return ( -

- +
+

Integrations

@@ -18,7 +19,9 @@ export default function Integrations() {

-
{/* TODO: add diagram */}
+
+ Standard World Interface +
); diff --git a/docs/package.json b/docs/package.json index b450455785..1f99d4abe9 100644 --- a/docs/package.json +++ b/docs/package.json @@ -17,6 +17,7 @@ "nextra": "^2.10.0", "nextra-theme-docs": "^2.10.0", "react": "^18.2.0", + "react-copy-to-clipboard": "^5.1.0", "react-dom": "^18.2.0", "tailwind-merge": "^2.0.0", "tailwindcss": "^3.3.5" diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index dca6e8221e..0580e5111e 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -23,6 +23,9 @@ importers: react: specifier: ^18.2.0 version: 18.2.0 + react-copy-to-clipboard: + specifier: ^5.1.0 + version: 5.1.0(react@18.2.0) react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) @@ -460,6 +463,9 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + cose-base@1.0.3: resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} @@ -1361,6 +1367,9 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + property-information@6.2.0: resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} @@ -1373,11 +1382,19 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + react-copy-to-clipboard@5.1.0: + resolution: {integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==} + peerDependencies: + react: ^15.3.0 || 16 || 17 || 18 + react-dom@18.2.0: resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -1572,6 +1589,9 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -2067,6 +2087,10 @@ snapshots: concat-map@0.0.1: {} + copy-to-clipboard@3.3.3: + dependencies: + toggle-selection: 1.0.6 + cose-base@1.0.3: dependencies: layout-base: 1.0.2 @@ -3314,6 +3338,12 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.0.2 + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + property-information@6.2.0: {} protocols@2.0.1: {} @@ -3322,12 +3352,20 @@ snapshots: queue-microtask@1.2.3: {} + react-copy-to-clipboard@5.1.0(react@18.2.0): + dependencies: + copy-to-clipboard: 3.3.3 + prop-types: 15.8.1 + react: 18.2.0 + react-dom@18.2.0(react@18.2.0): dependencies: loose-envify: 1.4.0 react: 18.2.0 scheduler: 0.23.0 + react-is@16.13.1: {} + react@18.2.0: dependencies: loose-envify: 1.4.0 @@ -3563,6 +3601,8 @@ snapshots: dependencies: is-number: 7.0.0 + toggle-selection@1.0.6: {} + trim-lines@3.0.1: {} trough@2.1.0: {} diff --git a/docs/public/images/diagrams/mud.svg b/docs/public/images/diagrams/mud.svg new file mode 100644 index 0000000000..9ff6f16542 --- /dev/null +++ b/docs/public/images/diagrams/mud.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/public/images/diagrams/swi.svg b/docs/public/images/diagrams/swi.svg new file mode 100644 index 0000000000..28b8f6d5b2 --- /dev/null +++ b/docs/public/images/diagrams/swi.svg @@ -0,0 +1,455 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/icons/clipboard.svg b/docs/public/images/icons/clipboard.svg new file mode 100644 index 0000000000..adfa29d78d --- /dev/null +++ b/docs/public/images/icons/clipboard.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/public/images/icons/discord.svg b/docs/public/images/icons/discord.svg new file mode 100644 index 0000000000..7e6720b1f5 --- /dev/null +++ b/docs/public/images/icons/discord.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/public/images/icons/github.svg b/docs/public/images/icons/github.svg new file mode 100644 index 0000000000..02f84f42ed --- /dev/null +++ b/docs/public/images/icons/github.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/public/images/icons/magazine.svg b/docs/public/images/icons/magazine.svg new file mode 100644 index 0000000000..221836bb99 --- /dev/null +++ b/docs/public/images/icons/magazine.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/public/images/icons/twitter.svg b/docs/public/images/icons/twitter.svg new file mode 100644 index 0000000000..44d1b41752 --- /dev/null +++ b/docs/public/images/icons/twitter.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/public/images/icons/youtube.svg b/docs/public/images/icons/youtube.svg new file mode 100644 index 0000000000..f53273f032 --- /dev/null +++ b/docs/public/images/icons/youtube.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/tailwind.config.ts b/docs/tailwind.config.ts index 3935b42add..f423d7009c 100644 --- a/docs/tailwind.config.ts +++ b/docs/tailwind.config.ts @@ -16,14 +16,15 @@ const config: Config = { }, fontSize: { // TODO: set based on media queries - sm: ["18px", "25px"], + sm: ["18px", "24px"], md: ["22px", "31px"], xl: ["33px", "40px"], "2xl": ["44px", "54px"], }, colors: { - mud: "rgb(255, 118, 18)", - "light-gray": "#1A1A1A", + mud: "#ff7612", + "mud-dark": "#e56a10", + "light-gray": "#1a1a1a", }, }, }, From b00fc505e106d7388e4f50dc9dcabeff357cebe2 Mon Sep 17 00:00:00 2001 From: karooolis Date: Mon, 4 Nov 2024 22:28:57 +0700 Subject: [PATCH 04/47] get random contributors, weighted by contribution --- docs/app/sections/Installation.tsx | 2 +- docs/app/sections/TrustedBy.tsx | 57 ++++++++++++++++++------------ docs/next.config.mjs | 19 +++++++--- 3 files changed, 49 insertions(+), 29 deletions(-) diff --git a/docs/app/sections/Installation.tsx b/docs/app/sections/Installation.tsx index 03af3697ce..a625cf58e8 100644 --- a/docs/app/sections/Installation.tsx +++ b/docs/app/sections/Installation.tsx @@ -15,7 +15,7 @@ export default function Installation() {

Get started

- > pnpm install mud + > pnpm create mud {/* TODO: add copy to clipboard */} {}}> diff --git a/docs/app/sections/TrustedBy.tsx b/docs/app/sections/TrustedBy.tsx index bbe372ee02..6146f70094 100644 --- a/docs/app/sections/TrustedBy.tsx +++ b/docs/app/sections/TrustedBy.tsx @@ -1,21 +1,32 @@ -"use client"; - import { Container } from "../../components/ui/Container"; import { Section } from "../../components/ui/Section"; import Image from "next/image"; -// TODO: fetch dynamically -const contributors = [ - "/avatars/alvarius.png", - "/avatars/tdot.png", - "/avatars/frolic.png", - "/avatars/kumpis.jpeg", - "/avatars/tux.jpg", - "/avatars/vdrg.png", - "/avatars/ludens.png", -]; +async function getContributors() { + const response = await fetch("https://api.github.com/repos/latticexyz/mud/contributors"); + const allContributors = await response.json(); + + const userContributors = allContributors + .filter((contributor: { type: string }) => contributor.type === "User") + .map((contributor) => { + const weightedContributions = Math.log(contributor.contributions + 1) * 10; + const index = Math.random() * weightedContributions; + const score = weightedContributions - index; + return { + ...contributor, + score, + }; + }) + .sort((a, b) => b.score - a.score); + + return { + count: userContributors.length, + contributors: userContributors.slice(0, 7), + }; +} -export default function TrustedBy() { +export default async function TrustedBy() { + const { count: contributorsCount, contributors } = await getContributors(); return (
@@ -39,26 +50,26 @@ export default function TrustedBy() {
{contributors.map((contributor) => ( - frolic + + frolic + ))}

- 146 + {contributorsCount} contributors

- graph + {/* graph */} +

Small Brain Games

30+ diff --git a/docs/next.config.mjs b/docs/next.config.mjs index f564088c99..6ca04d0615 100644 --- a/docs/next.config.mjs +++ b/docs/next.config.mjs @@ -1,3 +1,4 @@ + import nextra from "nextra"; const withNextra = nextra({ @@ -9,6 +10,14 @@ export default withNextra({ experimental: { appDir: true, }, + images: { + remotePatterns: [ + { + protocol: "https", + hostname: "avatars.githubusercontent.com", + }, + ], + }, async redirects() { return [ { @@ -235,7 +244,7 @@ export default withNextra({ source: "/hello-world", destination: "/guides/hello-world", permanent: false, - }, + }, { source: "/references/store", destination: "/store/reference/store", @@ -255,7 +264,7 @@ export default withNextra({ source: "/store/table-hooks", destination: "/store/store-hooks", permanent: false, - }, + }, { source: "/guides/best-practices/dividing-into-systems", destination: "/best-practices/dividing-into-systems", @@ -265,7 +274,7 @@ export default withNextra({ source: "/guides/best-practices/system-best-practices", destination: "/best-practices/system", permanent: false, - }, + }, { source: "/guides/best-practices/deployment-settings", destination: "/best-practices/deployment-settings", @@ -290,7 +299,7 @@ export default withNextra({ source: "/services/indexer/sqlite-indexer", destination: "/indexer/sqlite", permanent: false, - }, + }, { source: "/services/indexer/using-indexer", destination: "/indexer/using", @@ -300,7 +309,7 @@ export default withNextra({ source: "/services/indexer", destination: "/indexer", permanent: false, - }, + }, ]; }, }); From 91a50d2e78186c89b71b7c676e0dacacc282353c Mon Sep 17 00:00:00 2001 From: karooolis Date: Tue, 5 Nov 2024 11:38:37 +0700 Subject: [PATCH 05/47] add missing links --- docs/app/sections/FindUs.tsx | 8 ++++---- docs/app/sections/Installation.tsx | 8 ++++++-- docs/app/sections/TrustedBy.tsx | 11 ++++++----- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/docs/app/sections/FindUs.tsx b/docs/app/sections/FindUs.tsx index 5f59e9da01..f39a8f5473 100644 --- a/docs/app/sections/FindUs.tsx +++ b/docs/app/sections/FindUs.tsx @@ -32,22 +32,22 @@ export default function FindUs() {

} /> } /> } /> } /> diff --git a/docs/app/sections/Installation.tsx b/docs/app/sections/Installation.tsx index a625cf58e8..c1e11aad83 100644 --- a/docs/app/sections/Installation.tsx +++ b/docs/app/sections/Installation.tsx @@ -4,6 +4,7 @@ import Image from "next/image"; import { Container } from "../../components/ui/Container"; import { Section } from "../../components/ui/Section"; import { CopyToClipboard } from "react-copy-to-clipboard"; +import Link from "next/link"; export default function Installation() { return ( @@ -48,9 +49,12 @@ export default function Installation() {

- + Curious to learn more? Read the docs → - +
diff --git a/docs/app/sections/TrustedBy.tsx b/docs/app/sections/TrustedBy.tsx index 6146f70094..961d5e5268 100644 --- a/docs/app/sections/TrustedBy.tsx +++ b/docs/app/sections/TrustedBy.tsx @@ -50,13 +50,14 @@ export default async function TrustedBy() {
{contributors.map((contributor) => ( - - frolic - + /> ))}
From 958d1d14cd37edc90735417202c2d50b965d5889 Mon Sep 17 00:00:00 2001 From: karooolis Date: Tue, 5 Nov 2024 12:38:58 +0700 Subject: [PATCH 06/47] add substack subscription form --- docs/app/globals.css | 47 ++++++++++++++++++++++++++++++++ docs/app/sections/Newsletter.tsx | 44 +++++++++++++++++++++++++++--- docs/app/sections/TrustedBy.tsx | 10 +++++-- 3 files changed, 95 insertions(+), 6 deletions(-) diff --git a/docs/app/globals.css b/docs/app/globals.css index 7683fcd29d..8e9e57c77e 100644 --- a/docs/app/globals.css +++ b/docs/app/globals.css @@ -37,3 +37,50 @@ summary { summary > p { display: inline; } + +/* Substack subscribe widget */ +#custom-substack-embed { + max-width: 530px !important; +} + +#custom-substack-embed p { + position: absolute !important; + max-width: 530px !important; + font-family: var(--font-supply-mono) !important; + text-transform: uppercase !important; +} + +.custom-substack-widget { + flex-wrap: nowrap !important; + max-width: 600px !important; + border: none !important; + border-radius: 0 !important; +} + +.custom-substack-widget input { + width: 400px !important; + padding-left: 20px !important; + padding-right: 20px !important; + font-size: 20px !important; + font-family: var(--font-supply-mono) !important; + text-transform: uppercase !important; + border: 1px solid rgba(255, 255, 255, 0.2) !important; + box-sizing: border-box !important; +} + +.custom-substack-widget input::placeholder { + opacity: 0.3 !important; +} + +.custom-substack-widget button { + flex-shrink: 0 !important; + flex-grow: 0 !important; + width: 122px !important; + flex-basis: 122px !important; + border: none !important; + padding: 23px 25px !important; + margin-left: 15px !important; + font-size: 20px !important; + font-family: var(--font-supply-mono) !important; + text-transform: uppercase !important; +} diff --git a/docs/app/sections/Newsletter.tsx b/docs/app/sections/Newsletter.tsx index 7a40414169..f64bb83d3e 100644 --- a/docs/app/sections/Newsletter.tsx +++ b/docs/app/sections/Newsletter.tsx @@ -1,13 +1,49 @@ +"use client"; + import { Container } from "../../components/ui/Container"; import { Section } from "../../components/ui/Section"; +import { useEffect } from "react"; export default function Newsletter() { + useEffect(() => { + if (typeof window === "undefined") return; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (window as any).CustomSubstackWidget = { + substackUrl: "newsletter.lattice.xyz", + placeholder: "Enter email here...", + buttonText: "Submit", + theme: "custom", + colors: { + primary: "#FF7613", + input: "#313131", + email: "#FFFFFF", + text: "#FFFFFF", + }, + }; + + const script = document.createElement("script"); + script.src = "https://substackapi.com/widget.js"; + script.async = true; + document.body.appendChild(script); + + return () => { + document.body.removeChild(script); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + delete (window as any).CustomSubstackWidget; + }; + }, []); + return ( -
+
-
-

Newsletter

-

Sign up to receive regular updates about MUD.

+
+
+

Newsletter

+

Sign up to receive regular updates about MUD.

+
+ +
diff --git a/docs/app/sections/TrustedBy.tsx b/docs/app/sections/TrustedBy.tsx index 961d5e5268..fce42febb9 100644 --- a/docs/app/sections/TrustedBy.tsx +++ b/docs/app/sections/TrustedBy.tsx @@ -5,9 +5,15 @@ import Image from "next/image"; async function getContributors() { const response = await fetch("https://api.github.com/repos/latticexyz/mud/contributors"); const allContributors = await response.json(); + if (!Array.isArray(allContributors)) { + return { + count: 0, + contributors: [], + }; + } const userContributors = allContributors - .filter((contributor: { type: string }) => contributor.type === "User") + ?.filter((contributor: { type: string }) => contributor.type === "User") .map((contributor) => { const weightedContributions = Math.log(contributor.contributions + 1) * 10; const index = Math.random() * weightedContributions; @@ -21,7 +27,7 @@ async function getContributors() { return { count: userContributors.length, - contributors: userContributors.slice(0, 7), + contributors: userContributors?.slice(0, 7), }; } From dc7d758701121cc2c687803d4ba10dabce9f76f5 Mon Sep 17 00:00:00 2001 From: karooolis Date: Tue, 5 Nov 2024 12:53:11 +0700 Subject: [PATCH 07/47] add cloudflare streams --- docs/app/sections/Installation.tsx | 12 +++++++++--- docs/app/sections/Newsletter.tsx | 2 -- docs/package.json | 1 + docs/pnpm-lock.yaml | 13 +++++++++++++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/docs/app/sections/Installation.tsx b/docs/app/sections/Installation.tsx index c1e11aad83..9f4656649f 100644 --- a/docs/app/sections/Installation.tsx +++ b/docs/app/sections/Installation.tsx @@ -1,12 +1,15 @@ "use client"; +import Link from "next/link"; import Image from "next/image"; import { Container } from "../../components/ui/Container"; -import { Section } from "../../components/ui/Section"; import { CopyToClipboard } from "react-copy-to-clipboard"; -import Link from "next/link"; +import { Section } from "../../components/ui/Section"; +import { Stream } from "@cloudflare/stream-react"; export default function Installation() { + const videoIdOrSignedToken = "e1f3aad0255e44a726d53ef19db8e185"; + return (
@@ -58,7 +61,10 @@ export default function Installation() {
-
+
+

Hello

+ +
diff --git a/docs/app/sections/Newsletter.tsx b/docs/app/sections/Newsletter.tsx index f64bb83d3e..cba604d56f 100644 --- a/docs/app/sections/Newsletter.tsx +++ b/docs/app/sections/Newsletter.tsx @@ -6,8 +6,6 @@ import { useEffect } from "react"; export default function Newsletter() { useEffect(() => { - if (typeof window === "undefined") return; - // eslint-disable-next-line @typescript-eslint/no-explicit-any (window as any).CustomSubstackWidget = { substackUrl: "newsletter.lattice.xyz", diff --git a/docs/package.json b/docs/package.json index 1f99d4abe9..be13425412 100644 --- a/docs/package.json +++ b/docs/package.json @@ -12,6 +12,7 @@ "start": "next start" }, "dependencies": { + "@cloudflare/stream-react": "^1.9.1", "clsx": "^2.1.1", "next": "^13.3.0", "nextra": "^2.10.0", diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index 0580e5111e..26107cc619 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@cloudflare/stream-react': + specifier: ^1.9.1 + version: 1.9.1(react@18.2.0) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -72,6 +75,12 @@ packages: '@braintree/sanitize-url@6.0.2': resolution: {integrity: sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==} + '@cloudflare/stream-react@1.9.1': + resolution: {integrity: sha512-Yeftxpgzs69hK3VmVZjhvqIqhyo5PHWLAoZMmbzPiTH0rqkyzMMHxRvyNe7jfBRAGknOiTeeU7TQCdPBDCkuvg==} + engines: {node: '>=10'} + peerDependencies: + react: '>=16' + '@headlessui/react@1.7.14': resolution: {integrity: sha512-znzdq9PG8rkwcu9oQ2FwIy0ZFtP9Z7ycS+BAqJ3R5EIqC/0bJGvhT7193rFf+45i9nnPsYvCQVW4V/bB9Xc+gA==} engines: {node: '>=10'} @@ -1745,6 +1754,10 @@ snapshots: '@braintree/sanitize-url@6.0.2': {} + '@cloudflare/stream-react@1.9.1(react@18.2.0)': + dependencies: + react: 18.2.0 + '@headlessui/react@1.7.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: client-only: 0.0.1 From 0d30b96cd3a9b2e69ad6b3bd444ae68217718c00 Mon Sep 17 00:00:00 2001 From: karooolis Date: Tue, 5 Nov 2024 13:23:04 +0700 Subject: [PATCH 08/47] add copied to clipboard tooltip --- docs/app/sections/Installation.tsx | 15 +- docs/components/ui/CopyButton.tsx | 59 ++++ docs/package.json | 2 +- docs/pnpm-lock.yaml | 458 ++++++++++++++++++++++++++--- 4 files changed, 481 insertions(+), 53 deletions(-) create mode 100644 docs/components/ui/CopyButton.tsx diff --git a/docs/app/sections/Installation.tsx b/docs/app/sections/Installation.tsx index 9f4656649f..aaa94acf2f 100644 --- a/docs/app/sections/Installation.tsx +++ b/docs/app/sections/Installation.tsx @@ -1,11 +1,10 @@ "use client"; import Link from "next/link"; -import Image from "next/image"; import { Container } from "../../components/ui/Container"; -import { CopyToClipboard } from "react-copy-to-clipboard"; import { Section } from "../../components/ui/Section"; import { Stream } from "@cloudflare/stream-react"; +import CopyButton from "../../components/ui/CopyButton"; export default function Installation() { const videoIdOrSignedToken = "e1f3aad0255e44a726d53ef19db8e185"; @@ -21,16 +20,8 @@ export default function Installation() { > pnpm create mud - {/* TODO: add copy to clipboard */} - {}}> - pnpm install mud - + +

diff --git a/docs/components/ui/CopyButton.tsx b/docs/components/ui/CopyButton.tsx new file mode 100644 index 0000000000..630213ccac --- /dev/null +++ b/docs/components/ui/CopyButton.tsx @@ -0,0 +1,59 @@ +"use client"; + +import * as React from "react"; +import * as TooltipPrimitive from "@radix-ui/react-tooltip"; +import Image from "next/image"; + +interface CopyButtonProps { + value: string; + label?: string; +} + +function useCopyToClipboard(resetInterval = 3000) { + const [isCopied, setIsCopied] = React.useState(false); + + const copyToClipboard = React.useCallback((value: string) => { + navigator.clipboard.writeText(value).then(() => setIsCopied(true)); + }, []); + + React.useEffect(() => { + if (isCopied) { + const resetTimeout = setTimeout(() => setIsCopied(false), resetInterval); + return () => clearTimeout(resetTimeout); + } + }, [isCopied, resetInterval]); + + return { isCopied, copyToClipboard }; +} + +export default function CopyButton({ value, label = "Copy" }: CopyButtonProps) { + const { isCopied, copyToClipboard } = useCopyToClipboard(); + + return ( + + + + {label} copyToClipboard(value)} + className="cursor-pointer" + /> + + + + Copied! + + + + + + ); +} diff --git a/docs/package.json b/docs/package.json index be13425412..6aaccfffd9 100644 --- a/docs/package.json +++ b/docs/package.json @@ -13,12 +13,12 @@ }, "dependencies": { "@cloudflare/stream-react": "^1.9.1", + "@radix-ui/react-tooltip": "^1.1.3", "clsx": "^2.1.1", "next": "^13.3.0", "nextra": "^2.10.0", "nextra-theme-docs": "^2.10.0", "react": "^18.2.0", - "react-copy-to-clipboard": "^5.1.0", "react-dom": "^18.2.0", "tailwind-merge": "^2.0.0", "tailwindcss": "^3.3.5" diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index 26107cc619..a787f65719 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@cloudflare/stream-react': specifier: ^1.9.1 version: 1.9.1(react@18.2.0) + '@radix-ui/react-tooltip': + specifier: ^1.1.3 + version: 1.1.3(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -26,9 +29,6 @@ importers: react: specifier: ^18.2.0 version: 18.2.0 - react-copy-to-clipboard: - specifier: ^5.1.0 - version: 5.1.0(react@18.2.0) react-dom: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) @@ -81,6 +81,21 @@ packages: peerDependencies: react: '>=16' + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + + '@floating-ui/dom@1.6.12': + resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} + + '@floating-ui/react-dom@2.1.2': + resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + '@headlessui/react@1.7.14': resolution: {integrity: sha512-znzdq9PG8rkwcu9oQ2FwIy0ZFtP9Z7ycS+BAqJ3R5EIqC/0bJGvhT7193rFf+45i9nnPsYvCQVW4V/bB9Xc+gA==} engines: {node: '>=10'} @@ -256,6 +271,215 @@ packages: '@popperjs/core@2.11.7': resolution: {integrity: sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==} + '@radix-ui/primitive@1.1.0': + resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + + '@radix-ui/react-arrow@1.1.0': + resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.0': + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.0': + resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.1': + resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.1': + resolution: {integrity: sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.0': + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-popper@1.2.0': + resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.2': + resolution: {integrity: sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.1': + resolution: {integrity: sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.0.0': + resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.1.0': + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-tooltip@1.1.3': + resolution: {integrity: sha512-Z4w1FIS0BqVFI2c1jZvb/uDVJijJjJ2ZMuPV81oVgTZ7g3BZxobplnMVvXtFWgtozdvYJ+MFWtwkM5S2HnAong==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.0': + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.1.0': + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.0': + resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.0': + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.0': + resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.0': + resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.1.0': + resolution: {integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.0': + resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} + '@swc/helpers@0.4.14': resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} @@ -472,9 +696,6 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - copy-to-clipboard@3.3.3: - resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - cose-base@1.0.3: resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} @@ -1376,9 +1597,6 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - property-information@6.2.0: resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} @@ -1391,19 +1609,11 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - react-copy-to-clipboard@5.1.0: - resolution: {integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==} - peerDependencies: - react: ^15.3.0 || 16 || 17 || 18 - react-dom@18.2.0: resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -1598,9 +1808,6 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toggle-selection@1.0.6: - resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} - trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -1758,6 +1965,23 @@ snapshots: dependencies: react: 18.2.0 + '@floating-ui/core@1.6.8': + dependencies: + '@floating-ui/utils': 0.2.8 + + '@floating-ui/dom@1.6.12': + dependencies: + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 + + '@floating-ui/react-dom@2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@floating-ui/dom': 1.6.12 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@floating-ui/utils@0.2.8': {} + '@headlessui/react@1.7.14(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: client-only: 0.0.1 @@ -1899,6 +2123,180 @@ snapshots: '@popperjs/core@2.11.7': {} + '@radix-ui/primitive@1.1.0': {} + + '@radix-ui/react-arrow@1.1.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.38 + '@types/react-dom': 18.0.11 + + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.0.38)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.38 + + '@radix-ui/react-context@1.1.0(@types/react@18.0.38)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.38 + + '@radix-ui/react-context@1.1.1(@types/react@18.0.38)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.38 + + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.0.38)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.38 + '@types/react-dom': 18.0.11 + + '@radix-ui/react-id@1.1.0(@types/react@18.0.38)(react@18.2.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.0.38)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.38 + + '@radix-ui/react-popper@1.2.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-context': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/rect': 1.1.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.38 + '@types/react-dom': 18.0.11 + + '@radix-ui/react-portal@1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.0.38)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.38 + '@types/react-dom': 18.0.11 + + '@radix-ui/react-presence@1.1.1(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.0.38)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.38 + '@types/react-dom': 18.0.11 + + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-slot': 1.1.0(@types/react@18.0.38)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.38 + '@types/react-dom': 18.0.11 + + '@radix-ui/react-slot@1.1.0(@types/react@18.0.38)(react@18.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.0.38)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.38 + + '@radix-ui/react-tooltip@1.1.3(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.38 + '@types/react-dom': 18.0.11 + + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.0.38)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.38 + + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.0.38)(react@18.2.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.0.38)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.38 + + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.0.38)(react@18.2.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.0.38)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.38 + + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.0.38)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.38 + + '@radix-ui/react-use-rect@1.1.0(@types/react@18.0.38)(react@18.2.0)': + dependencies: + '@radix-ui/rect': 1.1.0 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.38 + + '@radix-ui/react-use-size@1.1.0(@types/react@18.0.38)(react@18.2.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.0.38)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.38 + + '@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.38 + '@types/react-dom': 18.0.11 + + '@radix-ui/rect@1.1.0': {} + '@swc/helpers@0.4.14': dependencies: tslib: 2.5.0 @@ -2100,10 +2498,6 @@ snapshots: concat-map@0.0.1: {} - copy-to-clipboard@3.3.3: - dependencies: - toggle-selection: 1.0.6 - cose-base@1.0.3: dependencies: layout-base: 1.0.2 @@ -3351,12 +3745,6 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.0.2 - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - property-information@6.2.0: {} protocols@2.0.1: {} @@ -3365,20 +3753,12 @@ snapshots: queue-microtask@1.2.3: {} - react-copy-to-clipboard@5.1.0(react@18.2.0): - dependencies: - copy-to-clipboard: 3.3.3 - prop-types: 15.8.1 - react: 18.2.0 - react-dom@18.2.0(react@18.2.0): dependencies: loose-envify: 1.4.0 react: 18.2.0 scheduler: 0.23.0 - react-is@16.13.1: {} - react@18.2.0: dependencies: loose-envify: 1.4.0 @@ -3614,8 +3994,6 @@ snapshots: dependencies: is-number: 7.0.0 - toggle-selection@1.0.6: {} - trim-lines@3.0.1: {} trough@2.1.0: {} From 746260d457c432cdf1b059e688b2c72b238a22a0 Mon Sep 17 00:00:00 2001 From: karooolis Date: Tue, 5 Nov 2024 15:23:46 +0700 Subject: [PATCH 09/47] add auto-playable mud intro video --- docs/app/sections/Installation.tsx | 11 +- docs/components/ui/VideoModal.tsx | 64 ++++++++++ docs/package.json | 1 + docs/pnpm-lock.yaml | 196 +++++++++++++++++++++++++++++ docs/public/images/icons/play.svg | 3 + 5 files changed, 269 insertions(+), 6 deletions(-) create mode 100644 docs/components/ui/VideoModal.tsx create mode 100644 docs/public/images/icons/play.svg diff --git a/docs/app/sections/Installation.tsx b/docs/app/sections/Installation.tsx index aaa94acf2f..fc7b93c315 100644 --- a/docs/app/sections/Installation.tsx +++ b/docs/app/sections/Installation.tsx @@ -3,12 +3,12 @@ import Link from "next/link"; import { Container } from "../../components/ui/Container"; import { Section } from "../../components/ui/Section"; -import { Stream } from "@cloudflare/stream-react"; import CopyButton from "../../components/ui/CopyButton"; +import VideoPlayer from "../../components/ui/VideoModal"; -export default function Installation() { - const videoIdOrSignedToken = "e1f3aad0255e44a726d53ef19db8e185"; +const videoId = "4aad163e745549176a20fe0c2518eb16"; +export default function Installation() { return (
@@ -52,9 +52,8 @@ export default function Installation() {
-
-

Hello

- +
+
diff --git a/docs/components/ui/VideoModal.tsx b/docs/components/ui/VideoModal.tsx new file mode 100644 index 0000000000..3fd49851db --- /dev/null +++ b/docs/components/ui/VideoModal.tsx @@ -0,0 +1,64 @@ +"use client"; + +import * as React from "react"; +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { Stream } from "@cloudflare/stream-react"; +import Image from "next/image"; + +type VideoThumbnailProps = { + thumbnailUrl: string; + alt: string; + onClick: () => void; +}; + +const VideoThumbnail: React.FC = ({ onClick }) => ( + +); + +type VideoModalProps = { + isOpen: boolean; + onClose: () => void; + videoId: string; +}; + +const VideoModal: React.FC = ({ isOpen, onClose, videoId }) => ( + + + + {/* eslint-disable-next-line max-len */} + +
+ + + + + + + +
+
+
+
+); + +type VideoPlayerProps = { + videoId: string; + thumbnailUrl: string; +}; + +export default function VideoPlayer({ videoId, thumbnailUrl }: VideoPlayerProps) { + const [isModalOpen, setIsModalOpen] = React.useState(false); + const openModal = () => setIsModalOpen(true); + const closeModal = () => setIsModalOpen(false); + + return ( +
+ + +
+ ); +} diff --git a/docs/package.json b/docs/package.json index 6aaccfffd9..dc039ce657 100644 --- a/docs/package.json +++ b/docs/package.json @@ -13,6 +13,7 @@ }, "dependencies": { "@cloudflare/stream-react": "^1.9.1", + "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-tooltip": "^1.1.3", "clsx": "^2.1.1", "next": "^13.3.0", diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index a787f65719..b40487d1df 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@cloudflare/stream-react': specifier: ^1.9.1 version: 1.9.1(react@18.2.0) + '@radix-ui/react-dialog': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@radix-ui/react-tooltip': specifier: ^1.1.3 version: 1.1.3(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -314,6 +317,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-dialog@1.1.2': + resolution: {integrity: sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-dismissable-layer@1.1.1': resolution: {integrity: sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==} peerDependencies: @@ -327,6 +343,28 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-focus-guards@1.1.1': + resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.0': + resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-id@1.1.0': resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} peerDependencies: @@ -584,6 +622,10 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} + astring@1.8.4: resolution: {integrity: sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==} hasBin: true @@ -879,6 +921,9 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -983,6 +1028,10 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + get-stream@3.0.0: resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} engines: {node: '>=4'} @@ -1079,6 +1128,9 @@ packages: intersection-observer@0.12.2: resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} @@ -1614,6 +1666,36 @@ packages: peerDependencies: react: ^18.2.0 + react-remove-scroll-bar@2.3.6: + resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.6.0: + resolution: {integrity: sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.1: + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -1887,6 +1969,26 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + use-callback-ref@1.3.2: + resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.2: + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -2152,6 +2254,28 @@ snapshots: optionalDependencies: '@types/react': 18.0.38 + '@radix-ui/react-dialog@1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-context': 1.1.1(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.1.1(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-portal': 1.1.2(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.0.38)(react@18.2.0) + aria-hidden: 1.2.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.6.0(@types/react@18.0.38)(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.38 + '@types/react-dom': 18.0.11 + '@radix-ui/react-dismissable-layer@1.1.1(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@radix-ui/primitive': 1.1.0 @@ -2165,6 +2289,23 @@ snapshots: '@types/react': 18.0.38 '@types/react-dom': 18.0.11 + '@radix-ui/react-focus-guards@1.1.1(@types/react@18.0.38)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.38 + + '@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.0.38)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.0.11)(@types/react@18.0.38)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.0.38)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.38 + '@types/react-dom': 18.0.11 + '@radix-ui/react-id@1.1.0(@types/react@18.0.38)(react@18.2.0)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.0.38)(react@18.2.0) @@ -2397,6 +2538,10 @@ snapshots: argparse@2.0.1: {} + aria-hidden@1.2.4: + dependencies: + tslib: 2.5.0 + astring@1.8.4: {} autoprefixer@10.4.16(postcss@8.4.31): @@ -2704,6 +2849,8 @@ snapshots: dequal@2.0.3: {} + detect-node-es@1.1.0: {} + didyoumean@1.2.2: {} diff@5.1.0: {} @@ -2802,6 +2949,8 @@ snapshots: function-bind@1.1.2: {} + get-nonce@1.0.1: {} + get-stream@3.0.0: {} git-up@7.0.0: @@ -2947,6 +3096,10 @@ snapshots: intersection-observer@0.12.2: {} + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + is-alphabetical@2.0.1: {} is-alphanumerical@2.0.1: @@ -3759,6 +3912,34 @@ snapshots: react: 18.2.0 scheduler: 0.23.0 + react-remove-scroll-bar@2.3.6(@types/react@18.0.38)(react@18.2.0): + dependencies: + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.0.38)(react@18.2.0) + tslib: 2.5.0 + optionalDependencies: + '@types/react': 18.0.38 + + react-remove-scroll@2.6.0(@types/react@18.0.38)(react@18.2.0): + dependencies: + react: 18.2.0 + react-remove-scroll-bar: 2.3.6(@types/react@18.0.38)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.0.38)(react@18.2.0) + tslib: 2.5.0 + use-callback-ref: 1.3.2(@types/react@18.0.38)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.0.38)(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.38 + + react-style-singleton@2.2.1(@types/react@18.0.38)(react@18.2.0): + dependencies: + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.5.0 + optionalDependencies: + '@types/react': 18.0.38 + react@18.2.0: dependencies: loose-envify: 1.4.0 @@ -4095,6 +4276,21 @@ snapshots: escalade: 3.1.1 picocolors: 1.0.0 + use-callback-ref@1.3.2(@types/react@18.0.38)(react@18.2.0): + dependencies: + react: 18.2.0 + tslib: 2.5.0 + optionalDependencies: + '@types/react': 18.0.38 + + use-sidecar@1.1.2(@types/react@18.0.38)(react@18.2.0): + dependencies: + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.5.0 + optionalDependencies: + '@types/react': 18.0.38 + util-deprecate@1.0.2: {} uuid@9.0.0: {} diff --git a/docs/public/images/icons/play.svg b/docs/public/images/icons/play.svg new file mode 100644 index 0000000000..abd779a545 --- /dev/null +++ b/docs/public/images/icons/play.svg @@ -0,0 +1,3 @@ + + + From 7179f93f2e82d2706cb5dcb59dd6af636553d639 Mon Sep 17 00:00:00 2001 From: karooolis Date: Tue, 5 Nov 2024 15:31:00 +0700 Subject: [PATCH 10/47] upgrade react + react/types --- docs/components/ui/VideoModal.tsx | 4 +- docs/package.json | 4 +- docs/pnpm-lock.yaml | 438 +++++++++++++++--------------- 3 files changed, 220 insertions(+), 226 deletions(-) diff --git a/docs/components/ui/VideoModal.tsx b/docs/components/ui/VideoModal.tsx index 3fd49851db..f9e56a13c2 100644 --- a/docs/components/ui/VideoModal.tsx +++ b/docs/components/ui/VideoModal.tsx @@ -11,7 +11,7 @@ type VideoThumbnailProps = { onClick: () => void; }; -const VideoThumbnail: React.FC = ({ onClick }) => ( +const VideoThumbnail = ({ onClick }: VideoThumbnailProps) => (