mirror of
https://github.com/Drop-OSS/drop.git
synced 2026-06-22 04:11:32 +10:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 107ee40f43 | |||
| ee2e3e5e32 | |||
| 9ce40297ea | |||
| 6a9d74ef84 | |||
| 581198f9e6 | |||
| 1a6b11df68 |
Binary file not shown.
|
Before Width: | Height: | Size: 4.4 MiB After Width: | Height: | Size: 2.3 MiB |
@@ -25,14 +25,14 @@ function Header() {
|
|||||||
<section className="mt-16 grid grid-cols-1 lg:grid-cols-2 lg:gap-12">
|
<section className="mt-16 grid grid-cols-1 lg:grid-cols-2 lg:gap-12">
|
||||||
<div className="max-w-lg">
|
<div className="max-w-lg">
|
||||||
<h2 className="text-2xl font-medium tracking-tight">Our mission</h2>
|
<h2 className="text-2xl font-medium tracking-tight">Our mission</h2>
|
||||||
<p className="mt-6 text-sm/6 text-gray-600">
|
<p className="mt-6 text-sm/6 text-zinc-400">
|
||||||
We aim to build a "Steam-like experience for DRM-free
|
We aim to build a "Steam-like experience for DRM-free
|
||||||
games". One of the major sticking points of DRM games, and why
|
games". One of the major sticking points of DRM games, and why
|
||||||
platforms like Steam have done so well, is that they provide awesome
|
platforms like Steam have done so well, is that they provide awesome
|
||||||
features like worldwide play-together, social features, and useful
|
features like worldwide play-together, social features, and useful
|
||||||
overlays and tools. We aim to replicate this for <i>any</i> game.
|
overlays and tools. We aim to replicate this for <i>any</i> game.
|
||||||
</p>
|
</p>
|
||||||
<p className="mt-8 text-sm/6 text-gray-600">
|
<p className="mt-8 text-sm/6 text-zinc-400">
|
||||||
Don't get us wrong, we don't think Steam or Valve is bad.
|
Don't get us wrong, we don't think Steam or Valve is bad.
|
||||||
They are unusually consumer-friendly, and provide a great service.
|
They are unusually consumer-friendly, and provide a great service.
|
||||||
They will always have a place, providing a marketplace for DRM
|
They will always have a place, providing a marketplace for DRM
|
||||||
@@ -41,16 +41,16 @@ function Header() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="max-lg:mt-16 lg:col-span-1">
|
<div className="max-lg:mt-16 lg:col-span-1">
|
||||||
<Subheading>The Numbers</Subheading>
|
<Subheading>The Numbers</Subheading>
|
||||||
<hr className="mt-6 border-t border-gray-200" />
|
<hr className="mt-6 border-t border-zinc-800" />
|
||||||
<dl className="mt-6 grid grid-cols-1 gap-x-8 gap-y-4 sm:grid-cols-2">
|
<dl className="mt-6 grid grid-cols-1 gap-x-8 gap-y-4 sm:grid-cols-2">
|
||||||
<div className="flex flex-col gap-y-2 border-b border-dotted border-gray-200 pb-4">
|
<div className="flex flex-col gap-y-2 border-b border-dotted border-zinc-800 pb-4">
|
||||||
<dt className="text-sm/6 text-gray-600">Lines of code</dt>
|
<dt className="text-sm/6 text-zinc-400">Lines of code</dt>
|
||||||
<dd className="order-first text-6xl font-medium tracking-tight">
|
<dd className="order-first text-6xl font-medium tracking-tight">
|
||||||
<AnimatedNumber start={10} end={40} />k
|
<AnimatedNumber start={10} end={40} />k
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-y-2 border-b border-dotted border-gray-200 pb-4">
|
<div className="flex flex-col gap-y-2 border-b border-dotted border-zinc-800 pb-4">
|
||||||
<dt className="text-sm/6 text-gray-600">
|
<dt className="text-sm/6 text-zinc-400">
|
||||||
Individual open-source projects
|
Individual open-source projects
|
||||||
</dt>
|
</dt>
|
||||||
<dd className="order-first text-6xl font-medium tracking-tight">
|
<dd className="order-first text-6xl font-medium tracking-tight">
|
||||||
@@ -59,13 +59,13 @@ function Header() {
|
|||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-y-2 max-sm:border-b max-sm:border-dotted max-sm:border-gray-200 max-sm:pb-4">
|
<div className="flex flex-col gap-y-2 max-sm:border-b max-sm:border-dotted max-sm:border-gray-200 max-sm:pb-4">
|
||||||
<dt className="text-sm/6 text-gray-600">Docker pulls</dt>
|
<dt className="text-sm/6 text-zinc-400">Docker pulls</dt>
|
||||||
<dd className="order-first text-6xl font-medium tracking-tight">
|
<dd className="order-first text-6xl font-medium tracking-tight">
|
||||||
<AnimatedNumber start={0} end={48.8} decimals={1} />k
|
<AnimatedNumber start={0} end={48.8} decimals={1} />k
|
||||||
</dd>
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col gap-y-2">
|
<div className="flex flex-col gap-y-2">
|
||||||
<dt className="text-sm/6 text-gray-600">Contributors</dt>
|
<dt className="text-sm/6 text-zinc-400">Contributors</dt>
|
||||||
<dd className="order-first text-6xl font-medium tracking-tight">
|
<dd className="order-first text-6xl font-medium tracking-tight">
|
||||||
>
|
>
|
||||||
<AnimatedNumber start={0} end={15} />
|
<AnimatedNumber start={0} end={15} />
|
||||||
@@ -91,7 +91,7 @@ function FrequentlyAskedQuestions() {
|
|||||||
<dt className="text-sm font-semibold">
|
<dt className="text-sm font-semibold">
|
||||||
Do you intend to replace Steam?
|
Do you intend to replace Steam?
|
||||||
</dt>
|
</dt>
|
||||||
<dd className="mt-4 text-sm/6 text-gray-600">
|
<dd className="mt-4 text-sm/6 text-zinc-400">
|
||||||
No. Drop is not a replacement for Steam, in the sense that we will
|
No. Drop is not a replacement for Steam, in the sense that we will
|
||||||
ever offer a marketplace for developers to sell games. Drop can
|
ever offer a marketplace for developers to sell games. Drop can
|
||||||
replace Steam <i>for an individual</i>, if they only played
|
replace Steam <i>for an individual</i>, if they only played
|
||||||
@@ -102,7 +102,7 @@ function FrequentlyAskedQuestions() {
|
|||||||
<dt className="text-sm font-semibold">
|
<dt className="text-sm font-semibold">
|
||||||
Will Drop ever cost money or require a subscription?
|
Will Drop ever cost money or require a subscription?
|
||||||
</dt>
|
</dt>
|
||||||
<dd className="mt-4 text-sm/6 text-gray-600">
|
<dd className="mt-4 text-sm/6 text-zinc-400">
|
||||||
We believe in <strong>paying for services, not code</strong>. All
|
We believe in <strong>paying for services, not code</strong>. All
|
||||||
our projects are and always will be open source (AGPLv3), and we
|
our projects are and always will be open source (AGPLv3), and we
|
||||||
endeavour to allow users to self-host as much of it as possible.
|
endeavour to allow users to self-host as much of it as possible.
|
||||||
@@ -114,7 +114,7 @@ function FrequentlyAskedQuestions() {
|
|||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt className="text-sm font-semibold">Is Drop legal?</dt>
|
<dt className="text-sm font-semibold">Is Drop legal?</dt>
|
||||||
<dd className="mt-4 text-sm/6 text-gray-600">
|
<dd className="mt-4 text-sm/6 text-zinc-400">
|
||||||
Yes. Officially, Drop is <strong>only</strong> for DRM-free games,
|
Yes. Officially, Drop is <strong>only</strong> for DRM-free games,
|
||||||
like the ones you purchase from GOG or download from itch.io,{' '}
|
like the ones you purchase from GOG or download from itch.io,{' '}
|
||||||
<strong>and</strong> that you have a license to redistribute. We
|
<strong>and</strong> that you have a license to redistribute. We
|
||||||
@@ -126,7 +126,7 @@ function FrequentlyAskedQuestions() {
|
|||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt className="text-sm font-semibold">How can I support Drop or get involved?</dt>
|
<dt className="text-sm font-semibold">How can I support Drop or get involved?</dt>
|
||||||
<dd className="mt-4 text-sm/6 text-gray-600">
|
<dd className="mt-4 text-sm/6 text-zinc-400">
|
||||||
Thank you for helping us out! If you're looking to contribute
|
Thank you for helping us out! If you're looking to contribute
|
||||||
code, check out our{' '}
|
code, check out our{' '}
|
||||||
<Link
|
<Link
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export default function RootLayout({
|
|||||||
}>) {
|
}>) {
|
||||||
return (
|
return (
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<body className="text-gray-950 antialiased">
|
<body className="text-zinc-100 bg-zinc-950 antialiased">
|
||||||
{children}
|
{children}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ export default async function BlogPost({
|
|||||||
className="aspect-square size-6 rounded-full object-cover"
|
className="aspect-square size-6 rounded-full object-cover"
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
<div className="text-sm/5 text-gray-700">{author.name}</div>
|
<div className="text-sm/5 text-zinc-300">{author.name}</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{
|
{
|
||||||
@@ -69,7 +69,7 @@ export default async function BlogPost({
|
|||||||
{tags.map((tag) => (
|
{tags.map((tag) => (
|
||||||
<div
|
<div
|
||||||
key={tag}
|
key={tag}
|
||||||
className="rounded-full border border-dotted border-gray-300 bg-gray-50 px-2 text-sm/6 font-medium text-gray-500"
|
className="rounded-full border border-dotted border-zinc-800 bg-zinc-900 px-2 text-sm/6 font-medium text-zinc-400"
|
||||||
>
|
>
|
||||||
{tag}
|
{tag}
|
||||||
</div>
|
</div>
|
||||||
@@ -77,7 +77,7 @@ export default async function BlogPost({
|
|||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<div className="text-gray-700">
|
<div className="text-zinc-400">
|
||||||
<div className="max-w-2xl xl:mx-auto">
|
<div className="max-w-2xl xl:mx-auto">
|
||||||
{post.image && (
|
{post.image && (
|
||||||
<img
|
<img
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export default function About() {
|
|||||||
<Container>
|
<Container>
|
||||||
<Navbar />
|
<Navbar />
|
||||||
</Container>
|
</Container>
|
||||||
<main className="grid min-h-full place-items-center bg-white px-6 py-24 sm:py-32 lg:px-8">
|
<main className="grid min-h-full place-items-center px-6 py-24 sm:py-32 lg:px-8">
|
||||||
<div className="text-center">
|
<div className="text-center">
|
||||||
<Subheading>404</Subheading>
|
<Subheading>404</Subheading>
|
||||||
<Heading>
|
<Heading>
|
||||||
|
|||||||
+51
-18
@@ -5,8 +5,8 @@ import { Footer } from '@/components/footer'
|
|||||||
import { Gradient } from '@/components/gradient'
|
import { Gradient } from '@/components/gradient'
|
||||||
import { LogoCluster } from '@/components/logo-cluster'
|
import { LogoCluster } from '@/components/logo-cluster'
|
||||||
import { Navbar } from '@/components/navbar'
|
import { Navbar } from '@/components/navbar'
|
||||||
import { Screenshot } from '@/components/screenshot'
|
|
||||||
import { Heading, Subheading } from '@/components/text'
|
import { Heading, Subheading } from '@/components/text'
|
||||||
|
import { ArrowDownCircleIcon } from '@heroicons/react/24/solid'
|
||||||
import type { Metadata } from 'next'
|
import type { Metadata } from 'next'
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
@@ -21,16 +21,18 @@ function Hero() {
|
|||||||
<Container className="relative">
|
<Container className="relative">
|
||||||
<Navbar />
|
<Navbar />
|
||||||
<div className="pt-16 pb-24 sm:pt-24 sm:pb-32 md:pt-32 md:pb-48">
|
<div className="pt-16 pb-24 sm:pt-24 sm:pb-32 md:pt-32 md:pb-48">
|
||||||
<h1 className="font-display text-6xl/[0.9] font-medium tracking-tight text-balance text-gray-950 sm:text-8xl/[0.8] md:text-9xl/[0.8]">
|
<h1 className="font-display text-6xl/[0.9] font-medium tracking-tight text-balance text-zinc-100 sm:text-8xl/[0.8] md:text-9xl/[0.8]">
|
||||||
An open Steam.
|
An open Steam.
|
||||||
</h1>
|
</h1>
|
||||||
<p className="mt-8 max-w-lg text-xl/7 font-medium text-gray-950/75 sm:text-2xl/8">
|
<p className="mt-8 max-w-lg text-xl/7 font-medium text-zinc-100/75 sm:text-2xl/8">
|
||||||
Drop is an open-source, self-hosted alternative to platforms like
|
Drop is an open-source, self-hosted alternative to platforms like
|
||||||
Steam and Epic.
|
Steam and Epic.
|
||||||
</p>
|
</p>
|
||||||
<div className="mt-12 flex flex-col gap-x-6 gap-y-4 sm:flex-row">
|
<div className="mt-12 flex flex-col gap-x-6 gap-y-4 sm:flex-row">
|
||||||
<Button href="https://docs.droposs.org/docs/guides/quickstart">Get started</Button>
|
<Button href="https://docs.droposs.org/docs/guides/quickstart">
|
||||||
<Button variant="secondary" href="/about">
|
Get started
|
||||||
|
</Button>
|
||||||
|
<Button variant="outline" href="/about">
|
||||||
About
|
About
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
@@ -42,18 +44,49 @@ function Hero() {
|
|||||||
|
|
||||||
function FeatureSection() {
|
function FeatureSection() {
|
||||||
return (
|
return (
|
||||||
<div className="overflow-hidden">
|
<div className="py-24 sm:py-32">
|
||||||
<Container className="pb-24">
|
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||||
<Heading as="h2" className="max-w-3xl">
|
<div className="mx-auto max-w-2xl sm:text-center">
|
||||||
A better experience for DRM‑free games.
|
<Subheading>Drop OSS</Subheading>
|
||||||
</Heading>
|
<Heading as="h3" className="mt-2 max-w-4xl">
|
||||||
<Screenshot
|
The ultimate self-hosted game manager.
|
||||||
width={3408}
|
</Heading>
|
||||||
height={1846}
|
|
||||||
src="/screenshots/app.webp"
|
<p className="mt-6 text-lg/8 text-zinc-400">
|
||||||
className="mt-16 h-144 sm:h-auto sm:w-304"
|
Drop is built from the ground up to be flexible, fast, and
|
||||||
/>
|
beautiful. It's designed to scale with your library, and handle
|
||||||
</Container>
|
thousands of games.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="relative overflow-hidden pt-16">
|
||||||
|
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||||
|
<img
|
||||||
|
alt="App screenshot"
|
||||||
|
src="/gallery/store.png"
|
||||||
|
width={1920}
|
||||||
|
height={1071}
|
||||||
|
className="mb-[-5%] rounded-xl shadow-2xl ring-1 ring-gray-900/10"
|
||||||
|
/>
|
||||||
|
<div aria-hidden="true" className="relative">
|
||||||
|
<div className="absolute -inset-x-20 bottom-0 bg-linear-to-t from-zinc-950 pt-[7%]" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="mx-auto mt-16 max-w-7xl px-6 sm:mt-20 md:mt-24 lg:px-8">
|
||||||
|
<dl className="mx-auto grid max-w-2xl grid-cols-1 gap-x-6 gap-y-10 text-base/7 text-zinc-400 sm:grid-cols-2 lg:mx-0 lg:max-w-none lg:grid-cols-3 lg:gap-x-8 lg:gap-y-16">
|
||||||
|
<div className="relative pl-9">
|
||||||
|
<dt className="inline font-semibold text-zinc-100">
|
||||||
|
<ArrowDownCircleIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="absolute top-1 left-1 size-5 text-blue-600"
|
||||||
|
/>
|
||||||
|
ADASDASD
|
||||||
|
</dt>{' '}
|
||||||
|
<dd className="inline">ASDASDASDAS</dd>
|
||||||
|
</div>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -132,7 +165,7 @@ export default function Home() {
|
|||||||
<div className="overflow-hidden">
|
<div className="overflow-hidden">
|
||||||
<Hero />
|
<Hero />
|
||||||
<main>
|
<main>
|
||||||
<div className="bg-linear-to-b from-white from-50% to-gray-100 py-32">
|
<div className="bg-linear-to-b pb-16">
|
||||||
<FeatureSection />
|
<FeatureSection />
|
||||||
<BentoSection />
|
<BentoSection />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ function CTA() {
|
|||||||
|
|
||||||
<div className="mt-12 grid grid-cols-1 gap-12 lg:grid-cols-2">
|
<div className="mt-12 grid grid-cols-1 gap-12 lg:grid-cols-2">
|
||||||
<div className="max-w-lg">
|
<div className="max-w-lg">
|
||||||
<p className="text-sm/6 text-gray-600">
|
<p className="text-sm/6 text-zinc-400">
|
||||||
If you're looking to give back to the project financially -
|
If you're looking to give back to the project financially -
|
||||||
first off, thank you. It really does help a lot. There are two
|
first off, thank you. It really does help a lot. There are two
|
||||||
options for contributing: our OpenCollective, which funds
|
options for contributing: our OpenCollective, which funds
|
||||||
@@ -45,7 +45,6 @@ function CTA() {
|
|||||||
<Button
|
<Button
|
||||||
className="w-full sm:w-auto"
|
className="w-full sm:w-auto"
|
||||||
href="/about#team"
|
href="/about#team"
|
||||||
variant="secondary"
|
|
||||||
>
|
>
|
||||||
Team →
|
Team →
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -29,28 +29,21 @@ export function BentoCard({
|
|||||||
data-dark={dark ? 'true' : undefined}
|
data-dark={dark ? 'true' : undefined}
|
||||||
className={clsx(
|
className={clsx(
|
||||||
className,
|
className,
|
||||||
'group relative flex flex-col overflow-hidden rounded-lg',
|
'group relative flex flex-col overflow-hidden rounded-lg ring-1',
|
||||||
'bg-white shadow-xs ring-1 ring-black/5',
|
'bg-zinc-900 ring-white/15',
|
||||||
'data-dark:bg-gray-800 data-dark:ring-white/15',
|
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<div className="relative h-80 shrink-0">
|
<div className="relative h-80 shrink-0">
|
||||||
{graphic}
|
{graphic}
|
||||||
{fade.includes('top') && (
|
|
||||||
<div className="absolute inset-0 bg-linear-to-b from-white to-50% group-data-dark:from-gray-800 group-data-dark:from-[-25%]" />
|
|
||||||
)}
|
|
||||||
{fade.includes('bottom') && (
|
|
||||||
<div className="absolute inset-0 bg-linear-to-t from-white to-20% group-data-dark:from-gray-800 group-data-dark:from-[-25%]" />
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
<div className="relative p-10">
|
<div className="relative p-10">
|
||||||
<Subheading as="h3" dark={dark}>
|
<Subheading as="h3" dark={dark}>
|
||||||
{eyebrow}
|
{eyebrow}
|
||||||
</Subheading>
|
</Subheading>
|
||||||
<p className="mt-1 text-2xl/8 font-medium tracking-tight text-gray-950 group-data-dark:text-white">
|
<p className="mt-1 text-2xl/8 font-medium tracking-tight text-white">
|
||||||
{title}
|
{title}
|
||||||
</p>
|
</p>
|
||||||
<p className="mt-2 max-w-[600px] text-sm/6 text-gray-600 group-data-dark:text-gray-400">
|
<p className="mt-2 max-w-[600px] text-sm/6 text-gray-400">
|
||||||
{description}
|
{description}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -5,22 +5,22 @@ import { Link } from './link'
|
|||||||
const variants = {
|
const variants = {
|
||||||
primary: clsx(
|
primary: clsx(
|
||||||
'inline-flex items-center justify-center px-4 py-[calc(--spacing(2)-1px)]',
|
'inline-flex items-center justify-center px-4 py-[calc(--spacing(2)-1px)]',
|
||||||
'rounded-full border border-transparent bg-gray-950 shadow-md',
|
'rounded-lg border border-transparent bg-gray-950 shadow-md',
|
||||||
'text-base font-medium whitespace-nowrap text-white',
|
'text-base font-medium whitespace-nowrap text-white',
|
||||||
'data-disabled:bg-gray-950 data-disabled:opacity-40 data-hover:bg-gray-800',
|
'data-disabled:bg-gray-950 data-disabled:opacity-40 data-hover:bg-gray-800',
|
||||||
),
|
),
|
||||||
secondary: clsx(
|
secondary: clsx(
|
||||||
'relative inline-flex items-center justify-center px-4 py-[calc(--spacing(2)-1px)]',
|
'relative inline-flex items-center justify-center px-4 py-[calc(--spacing(2)-1px)]',
|
||||||
'rounded-full border border-transparent bg-white/15 shadow-md ring-1 ring-[#D15052]/15',
|
'rounded-lg border border-transparent bg-white/15 shadow-md ring-1 ring-[#D15052]/15',
|
||||||
'after:absolute after:inset-0 after:rounded-full after:shadow-[inset_0_0_2px_1px_#ffffff4d]',
|
'after:absolute after:inset-0 after:rounded-full after:shadow-[inset_0_0_2px_1px_#ffffff4d]',
|
||||||
'text-base font-medium whitespace-nowrap text-gray-950',
|
'text-base font-medium whitespace-nowrap text-zinc-100',
|
||||||
'data-disabled:bg-white/15 data-disabled:opacity-40 data-hover:bg-white/20',
|
'data-disabled:bg-white/15 data-disabled:opacity-40 data-hover:bg-white/20',
|
||||||
),
|
),
|
||||||
outline: clsx(
|
outline: clsx(
|
||||||
'inline-flex items-center justify-center px-2 py-[calc(--spacing(1.5)-1px)]',
|
'inline-flex items-center justify-center px-4 py-[calc(--spacing(1.5)-1px)]',
|
||||||
'rounded-lg border border-transparent shadow-sm ring-1 ring-black/10',
|
'rounded-lg border border-transparent shadow-sm ring-1 ring-white/5',
|
||||||
'text-sm font-medium whitespace-nowrap text-gray-950',
|
'text-sm font-medium whitespace-nowrap text-zinc-100',
|
||||||
'data-disabled:bg-transparent data-disabled:opacity-40 data-hover:bg-gray-50',
|
'data-disabled:bg-transparent data-disabled:opacity-40 data-hover:bg-zinc-900',
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ function GameVaultLogo() {
|
|||||||
return (
|
return (
|
||||||
<div className="inline-flex items-center gap-x-2 text-xl font-bold">
|
<div className="inline-flex items-center gap-x-2 text-xl font-bold">
|
||||||
<img src="/icons/gamevault.png" alt="GameVault Logo" className="size-8" />
|
<img src="/icons/gamevault.png" alt="GameVault Logo" className="size-8" />
|
||||||
<span className="relative whitespace-nowrap text-purple-900">
|
<span className="relative whitespace-nowrap text-zinc-100">
|
||||||
<svg
|
<svg
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
viewBox="0 0 418 42"
|
viewBox="0 0 418 42"
|
||||||
@@ -56,7 +56,7 @@ function GameVaultLogo() {
|
|||||||
|
|
||||||
function GameVaultPlus() {
|
function GameVaultPlus() {
|
||||||
return (
|
return (
|
||||||
<div className="inline-flex items-center gap-x-1 rounded-full bg-gray-100 px-2 py-1 text-xs">
|
<div className="inline-flex items-center gap-x-1 rounded-full bg-zinc-800 px-2 py-1 text-xs">
|
||||||
<img
|
<img
|
||||||
src="/icons/gamevault-plus.png"
|
src="/icons/gamevault-plus.png"
|
||||||
alt="GameVault+ icon"
|
alt="GameVault+ icon"
|
||||||
@@ -69,7 +69,7 @@ function GameVaultPlus() {
|
|||||||
|
|
||||||
function ComingSoon() {
|
function ComingSoon() {
|
||||||
return (
|
return (
|
||||||
<div className="inline-flex items-center gap-x-1 rounded-full bg-gray-100 px-2 py-1 text-xs">
|
<div className="inline-flex items-center gap-x-1 rounded-full bg-zinc-900 px-2 py-1 text-xs">
|
||||||
coming soon™
|
coming soon™
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
@@ -121,6 +121,7 @@ const projects: Array<{
|
|||||||
'Installer/setup games': true,
|
'Installer/setup games': true,
|
||||||
'Portable games': true,
|
'Portable games': true,
|
||||||
'Archives support': 'All 7-zip formats',
|
'Archives support': 'All 7-zip formats',
|
||||||
|
'Automatic import': 'Bulk-import tool',
|
||||||
},
|
},
|
||||||
Metadata: {
|
Metadata: {
|
||||||
'Additional with plugins': false,
|
'Additional with plugins': false,
|
||||||
@@ -230,7 +231,7 @@ const projects: Array<{
|
|||||||
'Non-versioned layout': true,
|
'Non-versioned layout': true,
|
||||||
'Automatic import': true,
|
'Automatic import': true,
|
||||||
'Archives support': 'All 7-zip formats',
|
'Archives support': 'All 7-zip formats',
|
||||||
'Portable games': true
|
'Portable games': true,
|
||||||
},
|
},
|
||||||
Metadata: {
|
Metadata: {
|
||||||
IGDB: true,
|
IGDB: true,
|
||||||
@@ -279,14 +280,14 @@ function Header() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function PricingCards() {
|
function ProjectCards() {
|
||||||
return (
|
return (
|
||||||
<div className="relative py-24">
|
<div className="relative py-24">
|
||||||
<Gradient className="absolute inset-x-2 top-48 bottom-0 rounded-4xl ring-1 ring-black/5 ring-inset" />
|
<Gradient className="absolute inset-x-2 top-48 bottom-0 rounded-4xl ring-1 ring-black/5 ring-inset" />
|
||||||
<Container className="relative">
|
<Container className="relative">
|
||||||
<div className="grid grid-cols-1 gap-8 lg:grid-cols-3">
|
<div className="grid grid-cols-1 gap-8 lg:grid-cols-3">
|
||||||
{projects.map((tier, tierIndex) => (
|
{projects.map((tier, tierIndex) => (
|
||||||
<PricingCard key={tierIndex} tier={tier} />
|
<ProjectCard key={tierIndex} tier={tier} />
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</Container>
|
</Container>
|
||||||
@@ -294,22 +295,22 @@ function PricingCards() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function PricingCard({ tier }: { tier: (typeof projects)[number] }) {
|
function ProjectCard({ tier }: { tier: (typeof projects)[number] }) {
|
||||||
return (
|
return (
|
||||||
<div className="-m-2 grid grid-cols-1 rounded-4xl shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5 max-lg:mx-auto max-lg:w-full max-lg:max-w-md">
|
<div className="-m-2 grid grid-cols-1 rounded-4xl shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-white/5 max-lg:mx-auto max-lg:w-full max-lg:max-w-md">
|
||||||
<div className="grid grid-cols-1 rounded-4xl p-2 shadow-md shadow-black/5">
|
<div className="grid grid-cols-1 rounded-4xl p-2 shadow-md shadow-black/5">
|
||||||
<div className="rounded-3xl bg-white p-10 pb-9 shadow-2xl ring-1 ring-black/5">
|
<div className="rounded-3xl bg-zinc-900 p-10 pb-9 shadow-2xl ring-1 ring-black/5">
|
||||||
<div className="flex w-full items-center justify-center pb-8">
|
<div className="flex w-full items-center justify-center pb-8">
|
||||||
{tier.logo()}
|
{tier.logo()}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Subheading>{tier.name}</Subheading>
|
<Subheading>{tier.name}</Subheading>
|
||||||
<p className="mt-2 text-sm/6 text-gray-950/75">{tier.description}</p>
|
<p className="mt-2 text-sm/6 text-zinc-100/75">{tier.description}</p>
|
||||||
<div className="mt-8">
|
<div className="mt-8">
|
||||||
<Button href={tier.href}>Learn more →</Button>
|
<Button href={tier.href}>Learn more →</Button>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-8">
|
<div className="mt-8">
|
||||||
<h3 className="text-sm/6 font-medium text-gray-950">
|
<h3 className="text-sm/6 font-medium text-zinc-100">
|
||||||
Key features:
|
Key features:
|
||||||
</h3>
|
</h3>
|
||||||
<ul className="mt-3 space-y-3">
|
<ul className="mt-3 space-y-3">
|
||||||
@@ -324,10 +325,10 @@ function PricingCard({ tier }: { tier: (typeof projects)[number] }) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function PricingTable({
|
function ProjectTable({
|
||||||
selectedTier: selectedProject,
|
selectedProject,
|
||||||
}: {
|
}: {
|
||||||
selectedTier: (typeof projects)[number]
|
selectedProject: (typeof projects)[number]
|
||||||
}) {
|
}) {
|
||||||
function onlyUnique<T>(value: T, index: number, array: Array<T>) {
|
function onlyUnique<T>(value: T, index: number, array: Array<T>) {
|
||||||
return array.indexOf(value) === index
|
return array.indexOf(value) === index
|
||||||
@@ -385,7 +386,7 @@ function PricingTable({
|
|||||||
<Menu>
|
<Menu>
|
||||||
<MenuButton className="flex items-center justify-between gap-2 font-medium">
|
<MenuButton className="flex items-center justify-between gap-2 font-medium">
|
||||||
{selectedProject.name}
|
{selectedProject.name}
|
||||||
<ChevronUpDownIcon className="size-4 fill-gray-900" />
|
<ChevronUpDownIcon className="size-4 fill-zinc-100" />
|
||||||
</MenuButton>
|
</MenuButton>
|
||||||
<MenuItems
|
<MenuItems
|
||||||
anchor="bottom start"
|
anchor="bottom start"
|
||||||
@@ -444,7 +445,7 @@ function PricingTable({
|
|||||||
colSpan={4}
|
colSpan={4}
|
||||||
className="px-0 pt-10 pb-0 group-first-of-type:pt-5"
|
className="px-0 pt-10 pb-0 group-first-of-type:pt-5"
|
||||||
>
|
>
|
||||||
<div className="-mx-4 rounded-lg bg-gray-50 px-4 py-3 text-sm/6 font-semibold">
|
<div className="-mx-4 rounded-lg bg-zinc-900 px-4 py-3 text-sm/6 font-semibold">
|
||||||
{section}
|
{section}
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
@@ -452,11 +453,11 @@ function PricingTable({
|
|||||||
{features[section].map((name) => (
|
{features[section].map((name) => (
|
||||||
<tr
|
<tr
|
||||||
key={name}
|
key={name}
|
||||||
className="border-b border-gray-100 last:border-none"
|
className="border-b border-zinc-800 last:border-none"
|
||||||
>
|
>
|
||||||
<th
|
<th
|
||||||
scope="row"
|
scope="row"
|
||||||
className="px-0 py-4 text-sm/6 font-normal text-gray-600"
|
className="px-0 py-4 text-sm/6 font-normal text-zinc-200"
|
||||||
>
|
>
|
||||||
{name}
|
{name}
|
||||||
</th>
|
</th>
|
||||||
@@ -488,7 +489,7 @@ function PricingTable({
|
|||||||
</span>
|
</span>
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<div className="text-xs">{value}</div>
|
<div className="text-xs text-zinc-400">{value}</div>
|
||||||
)}
|
)}
|
||||||
</td>
|
</td>
|
||||||
)
|
)
|
||||||
@@ -514,10 +515,10 @@ function FeatureItem({
|
|||||||
return (
|
return (
|
||||||
<li
|
<li
|
||||||
data-disabled={disabled ? true : undefined}
|
data-disabled={disabled ? true : undefined}
|
||||||
className="flex items-center gap-4 text-sm/6 text-gray-950/75 data-disabled:text-gray-950/25"
|
className="flex items-center gap-4 text-sm/6 text-zinc-100/75 data-disabled:text-zinc-100/40"
|
||||||
>
|
>
|
||||||
<span className="inline-flex h-6 items-center self-start">
|
<span className="inline-flex h-6 items-center self-start">
|
||||||
<PlusIcon className="size-3.75 shrink-0 fill-gray-950/25" />
|
<PlusIcon className="size-3.75 shrink-0 fill-zinc-100/25" />
|
||||||
</span>
|
</span>
|
||||||
{disabled && <span className="sr-only">Coming soon:</span>}
|
{disabled && <span className="sr-only">Coming soon:</span>}
|
||||||
{description}
|
{description}
|
||||||
@@ -553,8 +554,8 @@ export default function Pricing() {
|
|||||||
<Navbar />
|
<Navbar />
|
||||||
</Container>
|
</Container>
|
||||||
<Header />
|
<Header />
|
||||||
<PricingCards />
|
<ProjectCards />
|
||||||
<PricingTable selectedTier={tier} />
|
<ProjectTable selectedProject={tier} />
|
||||||
<Footer />
|
<Footer />
|
||||||
</main>
|
</main>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -226,14 +226,14 @@ function DownloadCard({
|
|||||||
return (
|
return (
|
||||||
<div className="-m-2 grid grid-cols-1 rounded-4xl shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5 max-lg:mx-auto max-lg:w-full max-lg:max-w-md">
|
<div className="-m-2 grid grid-cols-1 rounded-4xl shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5 max-lg:mx-auto max-lg:w-full max-lg:max-w-md">
|
||||||
<div className="grid grid-cols-1 rounded-4xl p-2 shadow-md shadow-black/5">
|
<div className="grid grid-cols-1 rounded-4xl p-2 shadow-md shadow-black/5">
|
||||||
<div className="flex h-full flex-col justify-between rounded-3xl bg-white p-10 pb-9 shadow-2xl ring-1 ring-black/5">
|
<div className="flex h-full flex-col justify-between rounded-3xl bg-zinc-900/50 p-10 pb-9 shadow-2xl ring-1 ring-white/5">
|
||||||
<div>
|
<div>
|
||||||
<div className="flex w-full items-center justify-center gap-x-4">
|
<div className="flex w-full items-center justify-center gap-x-4">
|
||||||
{data.icon()}
|
{data.icon()}
|
||||||
<Heading>{data.name}</Heading>
|
<Heading>{data.name}</Heading>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p className="mt-3 text-sm/6 text-gray-950/75">
|
<p className="mt-3 text-sm/6 text-zinc-100/75">
|
||||||
{data.description}
|
{data.description}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -266,11 +266,11 @@ export default function DownloadCards() {
|
|||||||
<Container>
|
<Container>
|
||||||
<div className="flex flex-col items-center">
|
<div className="flex flex-col items-center">
|
||||||
<Listbox value={currentVersion} onChange={setCurrentVersion}>
|
<Listbox value={currentVersion} onChange={setCurrentVersion}>
|
||||||
<Label className="block text-sm/6 font-medium text-gray-900">
|
<Label className="block text-sm/6 font-medium text-zinc-100">
|
||||||
Version
|
Version
|
||||||
</Label>
|
</Label>
|
||||||
<div className="relative mt-2">
|
<div className="relative mt-2">
|
||||||
<ListboxButton className="grid w-full min-w-[10rem] cursor-default grid-cols-1 rounded-md bg-white py-1.5 pr-2 pl-3 text-left text-gray-900 outline-1 -outline-offset-1 outline-gray-300 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-blue-600 sm:text-sm/6">
|
<ListboxButton className="grid w-full min-w-[10rem] cursor-default grid-cols-1 rounded-md bg-zinc-900 py-1.5 pr-2 pl-3 text-left text-zinc-100 outline-1 -outline-offset-1 outline-zinc-800 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-blue-600 sm:text-sm/6">
|
||||||
<span className="col-start-1 row-start-1 truncate pr-6">
|
<span className="col-start-1 row-start-1 truncate pr-6">
|
||||||
{currentVersion}
|
{currentVersion}
|
||||||
</span>
|
</span>
|
||||||
@@ -282,13 +282,13 @@ export default function DownloadCards() {
|
|||||||
|
|
||||||
<ListboxOptions
|
<ListboxOptions
|
||||||
transition
|
transition
|
||||||
className="absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg outline-1 outline-black/5 data-leave:transition data-leave:duration-100 data-leave:ease-in data-closed:data-leave:opacity-0 sm:text-sm"
|
className="absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-zinc-900 py-1 text-base shadow-lg outline-1 outline-white/5 data-leave:transition data-leave:duration-100 data-leave:ease-in data-closed:data-leave:opacity-0 sm:text-sm"
|
||||||
>
|
>
|
||||||
{Object.keys(releasePages).map((version) => (
|
{Object.keys(releasePages).map((version) => (
|
||||||
<ListboxOption
|
<ListboxOption
|
||||||
key={version}
|
key={version}
|
||||||
value={version}
|
value={version}
|
||||||
className="group relative cursor-default py-2 pr-9 pl-3 text-gray-900 select-none data-focus:bg-blue-600 data-focus:text-white data-focus:outline-hidden"
|
className="group relative cursor-default py-2 pr-9 pl-3 text-zinc-100 select-none data-focus:bg-blue-600 data-focus:text-white data-focus:outline-hidden"
|
||||||
>
|
>
|
||||||
<span className="block truncate font-normal group-data-selected:font-semibold">
|
<span className="block truncate font-normal group-data-selected:font-semibold">
|
||||||
{version}
|
{version}
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ function CallToAction() {
|
|||||||
<div className="relative pt-20 pb-16 text-center sm:py-24">
|
<div className="relative pt-20 pb-16 text-center sm:py-24">
|
||||||
<hgroup>
|
<hgroup>
|
||||||
<Subheading>Get started</Subheading>
|
<Subheading>Get started</Subheading>
|
||||||
<p className="mt-6 text-3xl font-medium tracking-tight text-gray-950 sm:text-5xl">
|
<p className="mt-6 text-3xl font-medium tracking-tight text-white sm:text-5xl">
|
||||||
Ready to dive in?
|
Ready to dive in?
|
||||||
</p>
|
</p>
|
||||||
</hgroup>
|
</hgroup>
|
||||||
<p className="mx-auto mt-6 max-w-xs text-sm/6 text-gray-500">
|
<p className="mx-auto mt-6 max-w-xs text-sm/6 text-zinc-400">
|
||||||
Get started hosting Drop in 10 minutes or less, and explore all the
|
Get started hosting Drop in 10 minutes or less, and explore all the
|
||||||
features it has to offer.
|
features it has to offer.
|
||||||
</p>
|
</p>
|
||||||
@@ -33,7 +33,7 @@ function CallToAction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function SitemapHeading({ children }: { children: React.ReactNode }) {
|
function SitemapHeading({ children }: { children: React.ReactNode }) {
|
||||||
return <h3 className="text-sm/6 font-medium text-gray-950/50">{children}</h3>
|
return <h3 className="text-sm/6 font-medium text-zinc-100/50">{children}</h3>
|
||||||
}
|
}
|
||||||
|
|
||||||
function SitemapLinks({ children }: { children: React.ReactNode }) {
|
function SitemapLinks({ children }: { children: React.ReactNode }) {
|
||||||
@@ -45,7 +45,7 @@ function SitemapLink(props: React.ComponentPropsWithoutRef<typeof Link>) {
|
|||||||
<li>
|
<li>
|
||||||
<Link
|
<Link
|
||||||
{...props}
|
{...props}
|
||||||
className="font-medium text-gray-950 data-hover:text-gray-950/75"
|
className="font-medium text-zinc-100 data-hover:text-zinc-100/75"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
)
|
)
|
||||||
@@ -164,8 +164,8 @@ function SocialLinks() {
|
|||||||
|
|
||||||
function Copyright() {
|
function Copyright() {
|
||||||
return (
|
return (
|
||||||
<div className="text-xs text-gray-500">
|
<div className="text-xs text-zinc-400">
|
||||||
© {new Date().getFullYear()} Drop OSS. Licensed under AGPLv3 and
|
© {new Date().getFullYear()} Drop OSS. Website licensed under AGPLv3 and
|
||||||
Tailwind UI Plus (where applicable).
|
Tailwind UI Plus (where applicable).
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
@@ -173,39 +173,37 @@ function Copyright() {
|
|||||||
|
|
||||||
export function Footer() {
|
export function Footer() {
|
||||||
return (
|
return (
|
||||||
<footer>
|
<footer className="relative m-2 overflow-hidden rounded-4xl">
|
||||||
<Gradient className="relative">
|
<Gradient className="absolute inset-0 rounded-4xl" />
|
||||||
<div className="absolute inset-2 rounded-4xl bg-white/80" />
|
<Container>
|
||||||
<Container>
|
<CallToAction />
|
||||||
<CallToAction />
|
<PlusGrid className="pb-16">
|
||||||
<PlusGrid className="pb-16">
|
<PlusGridRow>
|
||||||
<PlusGridRow>
|
<div className="grid grid-cols-2 gap-y-10 pb-6 lg:grid-cols-6 lg:gap-8">
|
||||||
<div className="grid grid-cols-2 gap-y-10 pb-6 lg:grid-cols-6 lg:gap-8">
|
<div className="col-span-2 flex">
|
||||||
<div className="col-span-2 flex">
|
<PlusGridItem className="pt-6 lg:pb-6">
|
||||||
<PlusGridItem className="pt-6 lg:pb-6">
|
<Logo className="h-9" />
|
||||||
<Logo className="h-9" />
|
|
||||||
</PlusGridItem>
|
|
||||||
</div>
|
|
||||||
<div className="col-span-2 grid grid-cols-2 gap-x-8 gap-y-12 lg:col-span-4 lg:grid-cols-subgrid lg:pt-6">
|
|
||||||
<Sitemap />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</PlusGridRow>
|
|
||||||
<PlusGridRow className="flex justify-between">
|
|
||||||
<div>
|
|
||||||
<PlusGridItem className="py-3">
|
|
||||||
<Copyright />
|
|
||||||
</PlusGridItem>
|
</PlusGridItem>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex">
|
<div className="col-span-2 grid grid-cols-2 gap-x-8 gap-y-12 lg:col-span-4 lg:grid-cols-subgrid lg:pt-6">
|
||||||
<PlusGridItem className="flex items-center gap-8 py-3">
|
<Sitemap />
|
||||||
<SocialLinks />
|
|
||||||
</PlusGridItem>
|
|
||||||
</div>
|
</div>
|
||||||
</PlusGridRow>
|
</div>
|
||||||
</PlusGrid>
|
</PlusGridRow>
|
||||||
</Container>
|
<PlusGridRow className="flex justify-between">
|
||||||
</Gradient>
|
<div>
|
||||||
|
<PlusGridItem className="py-3">
|
||||||
|
<Copyright />
|
||||||
|
</PlusGridItem>
|
||||||
|
</div>
|
||||||
|
<div className="flex">
|
||||||
|
<PlusGridItem className="flex items-center gap-8 py-3">
|
||||||
|
<SocialLinks />
|
||||||
|
</PlusGridItem>
|
||||||
|
</div>
|
||||||
|
</PlusGridRow>
|
||||||
|
</PlusGrid>
|
||||||
|
</Container>
|
||||||
</footer>
|
</footer>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ export function Gradient({
|
|||||||
{...props}
|
{...props}
|
||||||
className={clsx(
|
className={clsx(
|
||||||
className,
|
className,
|
||||||
'bg-linear-115 from-blue-100 from-28% via-sky-200 via-70% to-cyan-100 sm:bg-linear-145',
|
'bg-linear-115 from-blue-900 from-28% via-sky-800 via-70% to-cyan-900 sm:bg-linear-145 opacity-30',
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
@@ -21,7 +21,7 @@ export function GradientBackground() {
|
|||||||
<div
|
<div
|
||||||
className={clsx(
|
className={clsx(
|
||||||
'absolute -top-44 -right-60 h-60 w-xl transform-gpu md:right-0',
|
'absolute -top-44 -right-60 h-60 w-xl transform-gpu md:right-0',
|
||||||
'bg-linear-115 from-blue-200 from-28% via-sky-100 via-70% to-blue-200',
|
'bg-linear-115 from-blue-700 from-28% via-sky-800 via-70% to-blue-600',
|
||||||
'rotate-[-10deg] rounded-full blur-3xl',
|
'rotate-[-10deg] rounded-full blur-3xl',
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -6,22 +6,22 @@ const components: MDXComponents = {
|
|||||||
<p className="my-8 text-base/8 first:mt-0 last:mb-0">{children}</p>
|
<p className="my-8 text-base/8 first:mt-0 last:mb-0">{children}</p>
|
||||||
),
|
),
|
||||||
h1: ({ children }) => (
|
h1: ({ children }) => (
|
||||||
<h2 className="mt-12 mb-10 text-4xl/8 font-medium tracking-tight text-gray-950 first:mt-0 last:mb-0">
|
<h2 className="mt-12 mb-10 text-4xl/8 font-medium tracking-tight text-zinc-100 first:mt-0 last:mb-0">
|
||||||
{children}
|
{children}
|
||||||
</h2>
|
</h2>
|
||||||
),
|
),
|
||||||
h2: ({ children }) => (
|
h2: ({ children }) => (
|
||||||
<h2 className="mt-12 mb-10 text-2xl/8 font-medium tracking-tight text-gray-950 first:mt-0 last:mb-0">
|
<h2 className="mt-12 mb-10 text-2xl/8 font-medium tracking-tight text-zinc-100 first:mt-0 last:mb-0">
|
||||||
{children}
|
{children}
|
||||||
</h2>
|
</h2>
|
||||||
),
|
),
|
||||||
h3: ({ children }) => (
|
h3: ({ children }) => (
|
||||||
<h3 className="mt-12 mb-10 text-xl/8 font-medium tracking-tight text-gray-950 first:mt-0 last:mb-0">
|
<h3 className="mt-12 mb-10 text-xl/8 font-medium tracking-tight text-zinc-100 first:mt-0 last:mb-0">
|
||||||
{children}
|
{children}
|
||||||
</h3>
|
</h3>
|
||||||
),
|
),
|
||||||
blockquote: ({ children }) => (
|
blockquote: ({ children }) => (
|
||||||
<blockquote className="my-10 border-l-2 border-l-gray-300 pl-6 text-base/8 text-gray-950 first:mt-0 last:mb-0">
|
<blockquote className="my-10 border-l-2 border-l-zinc-700 pl-6 text-base/8 text-zinc-100 first:mt-0 last:mb-0">
|
||||||
{children}
|
{children}
|
||||||
</blockquote>
|
</blockquote>
|
||||||
),
|
),
|
||||||
@@ -32,9 +32,9 @@ const components: MDXComponents = {
|
|||||||
className="w-full rounded-2xl"
|
className="w-full rounded-2xl"
|
||||||
/>
|
/>
|
||||||
),
|
),
|
||||||
hr: () => <hr className="my-8 border-t border-gray-200" />,
|
hr: () => <hr className="my-8 border-t border-zinc-800" />,
|
||||||
strong: ({ children }) => (
|
strong: ({ children }) => (
|
||||||
<strong className="font-semibold text-gray-950">{children}</strong>
|
<strong className="font-semibold text-zinc-100">{children}</strong>
|
||||||
),
|
),
|
||||||
code: ({ children }) => (
|
code: ({ children }) => (
|
||||||
<>
|
<>
|
||||||
@@ -60,7 +60,7 @@ const components: MDXComponents = {
|
|||||||
return (
|
return (
|
||||||
<Link
|
<Link
|
||||||
{...props}
|
{...props}
|
||||||
className="font-medium text-blue-600 underline decoration-blue-400 underline-offset-4 data-hover:decoration-blue-600"
|
className="font-medium text-blue-400 underline decoration-blue-400 underline-offset-4 data-hover:decoration-blue-600"
|
||||||
>
|
>
|
||||||
{props.children}
|
{props.children}
|
||||||
</Link>
|
</Link>
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ function DesktopNav() {
|
|||||||
<PlusGridItem key={href} className="relative flex">
|
<PlusGridItem key={href} className="relative flex">
|
||||||
<Link
|
<Link
|
||||||
href={href}
|
href={href}
|
||||||
className="flex items-center px-4 py-3 text-base font-medium text-gray-950 bg-blend-multiply data-hover:bg-black/2.5"
|
className="flex items-center px-4 py-3 text-base font-medium text-zinc-100 bg-blend-multiply data-hover:bg-white/2.5"
|
||||||
>
|
>
|
||||||
{label}
|
{label}
|
||||||
</Link>
|
</Link>
|
||||||
@@ -40,7 +40,7 @@ function DesktopNav() {
|
|||||||
function MobileNavButton() {
|
function MobileNavButton() {
|
||||||
return (
|
return (
|
||||||
<DisclosureButton
|
<DisclosureButton
|
||||||
className="flex size-12 items-center justify-center self-center rounded-lg data-hover:bg-black/5 lg:hidden"
|
className="flex size-12 items-center justify-center self-center rounded-lg data-hover:bg-white/5 lg:hidden"
|
||||||
aria-label="Open main menu"
|
aria-label="Open main menu"
|
||||||
>
|
>
|
||||||
<Bars2Icon className="size-6" />
|
<Bars2Icon className="size-6" />
|
||||||
@@ -63,15 +63,15 @@ function MobileNav() {
|
|||||||
}}
|
}}
|
||||||
key={href}
|
key={href}
|
||||||
>
|
>
|
||||||
<Link href={href} className="text-base font-medium text-gray-950">
|
<Link href={href} className="text-base font-medium text-zinc-100">
|
||||||
{label}
|
{label}
|
||||||
</Link>
|
</Link>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
<div className="absolute left-1/2 w-screen -translate-x-1/2">
|
<div className="absolute left-1/2 w-screen -translate-x-1/2">
|
||||||
<div className="absolute inset-x-0 top-0 border-t border-black/5" />
|
<div className="absolute inset-x-0 top-0 border-t border-white/5" />
|
||||||
<div className="absolute inset-x-0 top-2 border-t border-black/5" />
|
<div className="absolute inset-x-0 top-2 border-t border-white/5" />
|
||||||
</div>
|
</div>
|
||||||
</DisclosurePanel>
|
</DisclosurePanel>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -26,14 +26,14 @@ function FeaturedPosts() {
|
|||||||
const postAuthors = fetchPostAuthors()
|
const postAuthors = fetchPostAuthors()
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mt-16 bg-linear-to-t from-gray-100 pb-14">
|
<div className="mt-16 pb-14">
|
||||||
<Container>
|
<Container>
|
||||||
<h2 className="text-2xl font-medium tracking-tight">Featured</h2>
|
<h2 className="text-2xl font-medium tracking-tight">Featured</h2>
|
||||||
<div className="mt-6 grid grid-cols-1 gap-8 lg:grid-cols-3">
|
<div className="mt-6 grid grid-cols-1 gap-8 lg:grid-cols-3">
|
||||||
{featuredPosts.map((post) => (
|
{featuredPosts.map((post) => (
|
||||||
<div
|
<div
|
||||||
key={post._meta.path}
|
key={post._meta.path}
|
||||||
className="relative flex flex-col rounded-3xl bg-white p-2 shadow-md ring-1 shadow-black/5 ring-black/5"
|
className="relative flex flex-col rounded-3xl bg-zinc-900 p-2 shadow-md ring-1 shadow-white/5 ring-white/5"
|
||||||
>
|
>
|
||||||
{post.image && (
|
{post.image && (
|
||||||
<img
|
<img
|
||||||
@@ -43,7 +43,7 @@ function FeaturedPosts() {
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
<div className="flex flex-1 flex-col p-8">
|
<div className="flex flex-1 flex-col p-8">
|
||||||
<div className="text-sm/5 text-gray-700">
|
<div className="text-sm/5 text-zinc-400">
|
||||||
{dayjs(post.date).format('dddd, MMMM D, YYYY')}
|
{dayjs(post.date).format('dddd, MMMM D, YYYY')}
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-2 text-base/7 font-medium">
|
<div className="mt-2 text-base/7 font-medium">
|
||||||
@@ -52,7 +52,7 @@ function FeaturedPosts() {
|
|||||||
{post.title}
|
{post.title}
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
<div className="mt-2 flex-1 text-sm/6 text-gray-500">
|
<div className="mt-2 flex-1 text-sm/6 text-zinc-400">
|
||||||
{post.excerpt}
|
{post.excerpt}
|
||||||
</div>
|
</div>
|
||||||
{postAuthors[post.author ?? ''] && (
|
{postAuthors[post.author ?? ''] && (
|
||||||
@@ -62,7 +62,7 @@ function FeaturedPosts() {
|
|||||||
src={postAuthors[post.author ?? ''].avatar}
|
src={postAuthors[post.author ?? ''].avatar}
|
||||||
className="aspect-square size-6 rounded-full object-cover"
|
className="aspect-square size-6 rounded-full object-cover"
|
||||||
/>
|
/>
|
||||||
<div className="text-sm/5 text-gray-700">
|
<div className="text-sm/5 text-zinc-300">
|
||||||
{postAuthors[post.author ?? ''].name}
|
{postAuthors[post.author ?? ''].name}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -94,7 +94,7 @@ function Posts({ page, category }: { page: number; category?: string }) {
|
|||||||
{posts.map((post) => (
|
{posts.map((post) => (
|
||||||
<div
|
<div
|
||||||
key={post._meta.path}
|
key={post._meta.path}
|
||||||
className="relative grid grid-cols-1 border-b border-b-gray-100 py-10 first:border-t first:border-t-gray-200 max-sm:gap-3 sm:grid-cols-3"
|
className="relative grid grid-cols-1 border-b border-b-zinc-900 py-10 first:border-t first:border-t-zinc-900 max-sm:gap-3 sm:grid-cols-3"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<div className="text-sm/5 max-sm:text-gray-700 sm:font-medium">
|
<div className="text-sm/5 max-sm:text-gray-700 sm:font-medium">
|
||||||
@@ -109,7 +109,7 @@ function Posts({ page, category }: { page: number; category?: string }) {
|
|||||||
className="aspect-square size-6 rounded-full object-cover"
|
className="aspect-square size-6 rounded-full object-cover"
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
<div className="text-sm/5 text-gray-700">
|
<div className="text-sm/5 text-zinc-300">
|
||||||
{postAuthors[post.author ?? ''].name}
|
{postAuthors[post.author ?? ''].name}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -117,7 +117,7 @@ function Posts({ page, category }: { page: number; category?: string }) {
|
|||||||
</div>
|
</div>
|
||||||
<div className="sm:col-span-2 sm:max-w-2xl">
|
<div className="sm:col-span-2 sm:max-w-2xl">
|
||||||
<h2 className="text-sm/5 font-medium">{post.title}</h2>
|
<h2 className="text-sm/5 font-medium">{post.title}</h2>
|
||||||
<p className="mt-3 text-sm/6 text-gray-500">{post.excerpt}</p>
|
<p className="mt-3 text-sm/6 text-zinc-300">{post.excerpt}</p>
|
||||||
<div className="mt-4">
|
<div className="mt-4">
|
||||||
<Link
|
<Link
|
||||||
href={post.url}
|
href={post.url}
|
||||||
@@ -180,9 +180,9 @@ function Pagination({
|
|||||||
data-active={i + 1 === page ? true : undefined}
|
data-active={i + 1 === page ? true : undefined}
|
||||||
className={clsx(
|
className={clsx(
|
||||||
'size-7 rounded-lg text-center text-sm/7 font-medium',
|
'size-7 rounded-lg text-center text-sm/7 font-medium',
|
||||||
'data-hover:bg-gray-100',
|
'data-hover:bg-zinc-900',
|
||||||
'data-active:shadow-sm data-active:ring-1 data-active:ring-black/10',
|
'data-active:shadow-sm data-active:ring-1 data-active:ring-white/10',
|
||||||
'data-active:data-hover:bg-gray-50',
|
'data-active:data-hover:bg-zinc-900',
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{i + 1}
|
{i + 1}
|
||||||
|
|||||||
@@ -28,10 +28,10 @@ export function PlusGridRow({
|
|||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
className="absolute inset-y-0 left-1/2 -z-10 w-screen -translate-x-1/2"
|
className="absolute inset-y-0 left-1/2 -z-10 w-screen -translate-x-1/2"
|
||||||
>
|
>
|
||||||
<div className="absolute inset-x-0 top-0 border-t border-black/5"></div>
|
<div className="absolute inset-x-0 top-0 border-t border-white/5"></div>
|
||||||
<div className="absolute inset-x-0 top-2 border-t border-black/5"></div>
|
<div className="absolute inset-x-0 top-2 border-t border-white/5"></div>
|
||||||
<div className="absolute inset-x-0 bottom-0 hidden border-b border-black/5 group-last/row:block"></div>
|
<div className="absolute inset-x-0 bottom-0 hidden border-b border-white/5 group-last/row:block"></div>
|
||||||
<div className="absolute inset-x-0 bottom-2 hidden border-b border-black/5 group-last/row:block"></div>
|
<div className="absolute inset-x-0 bottom-2 hidden border-b border-white/5 group-last/row:block"></div>
|
||||||
</div>
|
</div>
|
||||||
{children}
|
{children}
|
||||||
</div>
|
</div>
|
||||||
@@ -83,7 +83,7 @@ export function PlusGridIcon({
|
|||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
className={clsx(
|
className={clsx(
|
||||||
className,
|
className,
|
||||||
'absolute size-[15px] fill-black/10',
|
'absolute size-[15px] fill-white/10',
|
||||||
yClass,
|
yClass,
|
||||||
xClass,
|
xClass,
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -76,19 +76,10 @@ function SponsorCard({
|
|||||||
ref={ref}
|
ref={ref}
|
||||||
style={{ opacity }}
|
style={{ opacity }}
|
||||||
{...props}
|
{...props}
|
||||||
className="relative flex aspect-9/16 w-64 shrink-0 snap-start scroll-ml-(--scroll-padding) flex-col justify-end overflow-hidden rounded-3xl sm:aspect-3/4 sm:w-72"
|
className="relative flex w-64 rounded-3xl sm:w-72 bg-black"
|
||||||
>
|
>
|
||||||
<img
|
|
||||||
alt=""
|
|
||||||
src={img}
|
|
||||||
className="absolute inset-x-0 top-0 aspect-square w-full object-contain"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
aria-hidden="true"
|
|
||||||
className="absolute inset-0 rounded-3xl bg-linear-to-t from-black from-[calc(7/16*100%)] ring-1 ring-gray-950/10 ring-inset sm:from-25%"
|
|
||||||
/>
|
|
||||||
<figure className="relative p-10">
|
<figure className="relative p-10">
|
||||||
<figcaption className="mt-6 border-t border-white/20 pt-6">
|
<figcaption className="pb-3 border-b border-white/20">
|
||||||
<p className="text-sm/6 font-medium text-white">{name}</p>
|
<p className="text-sm/6 font-medium text-white">{name}</p>
|
||||||
<p className="text-sm/6 font-medium">
|
<p className="text-sm/6 font-medium">
|
||||||
<span className="bg-linear-to-r from-sky-300 from-28% via-blue-200 via-70% to-cyan-300 bg-clip-text text-transparent">
|
<span className="bg-linear-to-r from-sky-300 from-28% via-blue-200 via-70% to-cyan-300 bg-clip-text text-transparent">
|
||||||
@@ -272,8 +263,8 @@ export function Sponsors() {
|
|||||||
data-active={activeIndex === i ? true : undefined}
|
data-active={activeIndex === i ? true : undefined}
|
||||||
aria-label={`Scroll to sponsorship from ${name}`}
|
aria-label={`Scroll to sponsorship from ${name}`}
|
||||||
className={clsx(
|
className={clsx(
|
||||||
'size-2.5 cursor-pointer rounded-full border border-transparent bg-gray-300 transition',
|
'size-2.5 cursor-pointer rounded-full border border-transparent bg-zinc-600 transition',
|
||||||
'data-active:bg-gray-400 data-hover:bg-gray-400',
|
'data-active:bg-blue-700 data-hover:bg-zinc-900',
|
||||||
'forced-colors:data-active:bg-[Highlight] forced-colors:data-focus:outline-offset-4',
|
'forced-colors:data-active:bg-[Highlight] forced-colors:data-focus:outline-offset-4',
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ function Person({
|
|||||||
<img alt="" src={img} className="size-12 rounded-full" />
|
<img alt="" src={img} className="size-12 rounded-full" />
|
||||||
<div className="text-sm/6">
|
<div className="text-sm/6">
|
||||||
<h3 className="font-medium group-hover:underline">{name}</h3>
|
<h3 className="font-medium group-hover:underline">{name}</h3>
|
||||||
<p className="text-gray-500">{description}</p>
|
<p className="text-zinc-400">{description}</p>
|
||||||
<p className="text-xs font-semibold text-gray-400 uppercase">
|
<p className="text-xs font-semibold text-blue-600/80">
|
||||||
{contributions} contribution(s)
|
{contributions} contribution(s)
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -105,14 +105,14 @@ export function Team() {
|
|||||||
</Lead>
|
</Lead>
|
||||||
<div className="mt-12 grid grid-cols-1 gap-12 lg:grid-cols-2">
|
<div className="mt-12 grid grid-cols-1 gap-12 lg:grid-cols-2">
|
||||||
<div className="max-w-lg">
|
<div className="max-w-lg">
|
||||||
<p className="text-sm/6 text-gray-600">
|
<p className="text-sm/6 text-zinc-400">
|
||||||
Drop OSS was started, mostly on a whim, in response to frustrations
|
Drop OSS was started, mostly on a whim, in response to frustrations
|
||||||
with the controlled nature of DRM games, and the missing comforts of
|
with the controlled nature of DRM games, and the missing comforts of
|
||||||
DRM-free games. Since then, we've put together a small circle
|
DRM-free games. Since then, we've put together a small circle
|
||||||
of dedicated maintainers and contributors to develop Drop and all
|
of dedicated maintainers and contributors to develop Drop and all
|
||||||
its amazing features.
|
its amazing features.
|
||||||
</p>
|
</p>
|
||||||
<p className="mt-8 text-sm/6 text-gray-600">
|
<p className="mt-8 text-sm/6 text-zinc-400">
|
||||||
If you know a little code, you can help out! We heavily encourage
|
If you know a little code, you can help out! We heavily encourage
|
||||||
contributions, especially if you're passionate about the
|
contributions, especially if you're passionate about the
|
||||||
project and enjoy writing code. We use a variety of stacks across
|
project and enjoy writing code. We use a variety of stacks across
|
||||||
@@ -124,8 +124,9 @@ export function Team() {
|
|||||||
className="w-full sm:w-auto"
|
className="w-full sm:w-auto"
|
||||||
href="https://developer.droposs.org/contributing"
|
href="https://developer.droposs.org/contributing"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
|
variant="outline"
|
||||||
>
|
>
|
||||||
Contribute
|
Contribute →
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -133,7 +134,7 @@ export function Team() {
|
|||||||
<Subheading id="team" as="h3" className="mt-24">
|
<Subheading id="team" as="h3" className="mt-24">
|
||||||
The team
|
The team
|
||||||
</Subheading>
|
</Subheading>
|
||||||
<hr className="mt-6 border-t border-gray-200" />
|
<hr className="mt-6 border-t border-zinc-800" />
|
||||||
<ul
|
<ul
|
||||||
role="list"
|
role="list"
|
||||||
className="mx-auto mt-16 grid grid-cols-1 gap-8 sm:grid-cols-3 lg:grid-cols-4"
|
className="mx-auto mt-16 grid grid-cols-1 gap-8 sm:grid-cols-3 lg:grid-cols-4"
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export function Heading({
|
|||||||
data-dark={dark ? 'true' : undefined}
|
data-dark={dark ? 'true' : undefined}
|
||||||
className={clsx(
|
className={clsx(
|
||||||
className,
|
className,
|
||||||
'text-4xl font-medium tracking-tighter text-pretty text-gray-950 data-dark:text-white sm:text-6xl',
|
'text-4xl font-medium tracking-tighter text-pretty text-white sm:text-6xl',
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
@@ -37,7 +37,7 @@ export function Subheading({
|
|||||||
data-dark={dark ? 'true' : undefined}
|
data-dark={dark ? 'true' : undefined}
|
||||||
className={clsx(
|
className={clsx(
|
||||||
className,
|
className,
|
||||||
'font-mono text-xs/5 font-semibold tracking-widest text-gray-500 uppercase data-dark:text-gray-400',
|
'font-mono text-xs/5 font-semibold tracking-widest uppercase text-zinc-500',
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
|
|||||||
Generated
+328
-317
File diff suppressed because it is too large
Load Diff
@@ -1,13 +1,45 @@
|
|||||||
onlyBuiltDependencies:
|
onlyBuiltDependencies:
|
||||||
- "@bufbuild/buf"
|
- '@bufbuild/buf'
|
||||||
- "@parcel/watcher"
|
- '@parcel/watcher'
|
||||||
- "@prisma/client"
|
- '@prisma/client'
|
||||||
- "@prisma/engines"
|
- '@prisma/engines'
|
||||||
- "@tailwindcss/oxide"
|
- '@tailwindcss/oxide'
|
||||||
- argon2
|
- argon2
|
||||||
- esbuild
|
- esbuild
|
||||||
- prisma
|
- prisma
|
||||||
- sharp
|
- sharp
|
||||||
- unrs-resolver
|
- unrs-resolver
|
||||||
|
|
||||||
|
overrides:
|
||||||
|
'@isaacs/brace-expansion@<=5.0.0': '>=5.0.1'
|
||||||
|
ajv@<6.14.0: '>=6.14.0'
|
||||||
|
devalue@<=5.6.2: '>=5.6.3'
|
||||||
|
devalue@>=5.1.0 <5.6.2: '>=5.6.2'
|
||||||
|
devalue@>=5.3.0 <=5.6.1: '>=5.6.2'
|
||||||
|
diff@>=6.0.0 <8.0.3: '>=8.0.3'
|
||||||
|
hono@<4.11.10: '>=4.11.10'
|
||||||
|
hono@<4.11.7: '>=4.11.7'
|
||||||
|
lodash-es@>=4.0.0 <=4.17.22: '>=4.17.23'
|
||||||
|
lodash@>=4.0.0 <=4.17.22: '>=4.17.23'
|
||||||
|
minimatch@<3.1.3: '>=3.1.3'
|
||||||
|
minimatch@<3.1.4: '>=3.1.4'
|
||||||
|
minimatch@>=10.0.0 <10.2.1: '>=10.2.1'
|
||||||
|
minimatch@>=10.0.0 <10.2.3: '>=10.2.3'
|
||||||
|
minimatch@>=5.0.0 <5.1.7: '>=5.1.7'
|
||||||
|
minimatch@>=5.0.0 <5.1.8: '>=5.1.8'
|
||||||
|
minimatch@>=9.0.0 <9.0.6: '>=9.0.6'
|
||||||
|
minimatch@>=9.0.0 <9.0.7: '>=9.0.7'
|
||||||
|
node-forge@<1.3.2: '>=1.3.2'
|
||||||
|
qs@<6.14.1: '>=6.14.1'
|
||||||
|
qs@>=6.7.0 <=6.14.1: '>=6.14.2'
|
||||||
|
rollup@>=4.0.0 <4.59.0: '>=4.59.0'
|
||||||
|
serialize-javascript@<=7.0.2: '>=7.0.3'
|
||||||
|
seroval@<1.4.1: '>=1.4.1'
|
||||||
|
seroval@<=1.4.0: '>=1.4.1'
|
||||||
|
tar@<7.5.7: '>=7.5.7'
|
||||||
|
tar@<7.5.8: '>=7.5.8'
|
||||||
|
tar@<=7.5.2: '>=7.5.3'
|
||||||
|
tar@<=7.5.3: '>=7.5.4'
|
||||||
|
undici@>=7.0.0 <7.18.2: '>=7.18.2'
|
||||||
|
|
||||||
shamefullyHoist: true
|
shamefullyHoist: true
|
||||||
|
|||||||
Reference in New Issue
Block a user