chore: update pages layout & move container into pages
This commit is contained in:
parent
80fe789b9d
commit
c1dbad14ec
@ -1,3 +1,4 @@
|
||||
import Container from '@/components/layout/container';
|
||||
import { BlurFadeDemo } from '@/components/magicui/example/blur-fade-example';
|
||||
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
|
||||
import { Button, buttonVariants } from '@/components/ui/button';
|
||||
@ -33,70 +34,74 @@ export default async function AboutPage() {
|
||||
const t = await getTranslations('AboutPage');
|
||||
|
||||
return (
|
||||
<div className="max-w-4xl mx-auto space-y-8">
|
||||
{/* about section */}
|
||||
<div className="relative max-w-(--breakpoint-md) mx-auto mb-24 mt-8 md:mt-16">
|
||||
<div className="mx-auto flex flex-col justify-between">
|
||||
<div className="grid gap-8 sm:grid-cols-2">
|
||||
{/* avatar and name */}
|
||||
<div className="flex items-center gap-8">
|
||||
<Avatar className="size-32 p-0.5">
|
||||
<AvatarImage
|
||||
className="rounded-full border-4 border-gray-200"
|
||||
src="/logo.png"
|
||||
alt="Avatar"
|
||||
/>
|
||||
<AvatarFallback>
|
||||
<div className="size-32 text-muted-foreground" />
|
||||
</AvatarFallback>
|
||||
</Avatar>
|
||||
<div>
|
||||
<h1 className="text-4xl text-foreground">{t('authorName')}</h1>
|
||||
<p className="text-base text-muted-foreground mt-2">
|
||||
{t('authorBio')}
|
||||
</p>
|
||||
<Container className="py-16 px-4">
|
||||
<div className="max-w-4xl mx-auto space-y-8">
|
||||
{/* about section */}
|
||||
<div className="relative max-w-(--breakpoint-md) mx-auto mb-24 mt-8 md:mt-16">
|
||||
<div className="mx-auto flex flex-col justify-between">
|
||||
<div className="grid gap-8 sm:grid-cols-2">
|
||||
{/* avatar and name */}
|
||||
<div className="flex items-center gap-8">
|
||||
<Avatar className="size-32 p-0.5">
|
||||
<AvatarImage
|
||||
className="rounded-full border-4 border-gray-200"
|
||||
src="/logo.png"
|
||||
alt="Avatar"
|
||||
/>
|
||||
<AvatarFallback>
|
||||
<div className="size-32 text-muted-foreground" />
|
||||
</AvatarFallback>
|
||||
</Avatar>
|
||||
<div>
|
||||
<h1 className="text-4xl text-foreground">
|
||||
{t('authorName')}
|
||||
</h1>
|
||||
<p className="text-base text-muted-foreground mt-2">
|
||||
{t('authorBio')}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* introduction */}
|
||||
<div>
|
||||
<p className="mb-8 text-base text-muted-foreground">
|
||||
{t('introduction')}
|
||||
</p>
|
||||
{/* introduction */}
|
||||
<div>
|
||||
<p className="mb-8 text-base text-muted-foreground">
|
||||
{t('introduction')}
|
||||
</p>
|
||||
|
||||
<div className="flex items-center gap-4">
|
||||
{websiteConfig.metadata.social?.twitter && (
|
||||
<a
|
||||
href={websiteConfig.metadata.social.twitter}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className={cn(
|
||||
buttonVariants({ variant: 'outline' }),
|
||||
'rounded-lg cursor-pointer'
|
||||
)}
|
||||
>
|
||||
<TwitterIcon className="mr-1 size-4" />
|
||||
{t('followMe')}
|
||||
</a>
|
||||
)}
|
||||
{websiteConfig.mail.supportEmail && (
|
||||
<div className="flex items-center gap-4">
|
||||
<Button className="rounded-lg cursor-pointer">
|
||||
<MailIcon className="mr-1 size-4" />
|
||||
<a href={`mailto:${websiteConfig.mail.supportEmail}`}>
|
||||
{t('talkWithMe')}
|
||||
</a>
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
<div className="flex items-center gap-4">
|
||||
{websiteConfig.metadata.social?.twitter && (
|
||||
<a
|
||||
href={websiteConfig.metadata.social.twitter}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className={cn(
|
||||
buttonVariants({ variant: 'outline' }),
|
||||
'rounded-lg cursor-pointer'
|
||||
)}
|
||||
>
|
||||
<TwitterIcon className="mr-1 size-4" />
|
||||
{t('followMe')}
|
||||
</a>
|
||||
)}
|
||||
{websiteConfig.mail.supportEmail && (
|
||||
<div className="flex items-center gap-4">
|
||||
<Button className="rounded-lg cursor-pointer">
|
||||
<MailIcon className="mr-1 size-4" />
|
||||
<a href={`mailto:${websiteConfig.mail.supportEmail}`}>
|
||||
{t('talkWithMe')}
|
||||
</a>
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* image section */}
|
||||
<BlurFadeDemo />
|
||||
</div>
|
||||
{/* image section */}
|
||||
<BlurFadeDemo />
|
||||
</div>
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import { getTranslations } from 'next-intl/server';
|
||||
import { notFound } from 'next/navigation';
|
||||
|
||||
import '@/styles/mdx.css';
|
||||
import Container from '@/components/layout/container';
|
||||
|
||||
export async function generateMetadata({
|
||||
params,
|
||||
@ -42,30 +43,32 @@ export default async function ChangelogPage(props: NextPageProps) {
|
||||
const t = await getTranslations('ChangelogPage');
|
||||
|
||||
return (
|
||||
<div className="max-w-4xl mx-auto space-y-8">
|
||||
{/* Header */}
|
||||
<div className="space-y-4">
|
||||
<h1 className="text-center text-3xl font-bold tracking-tight">
|
||||
{t('title')}
|
||||
</h1>
|
||||
<p className="text-center text-lg text-muted-foreground">
|
||||
{t('subtitle')}
|
||||
</p>
|
||||
</div>
|
||||
<Container className="py-16 px-4">
|
||||
<div className="max-w-4xl mx-auto space-y-8">
|
||||
{/* Header */}
|
||||
<div className="space-y-4">
|
||||
<h1 className="text-center text-3xl font-bold tracking-tight">
|
||||
{t('title')}
|
||||
</h1>
|
||||
<p className="text-center text-lg text-muted-foreground">
|
||||
{t('subtitle')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Releases */}
|
||||
<div className="mt-8">
|
||||
{releases.map((release) => (
|
||||
<ReleaseCard
|
||||
key={release.slug}
|
||||
title={release.title}
|
||||
description={release.description}
|
||||
date={release.date}
|
||||
version={release.version}
|
||||
content={release.body}
|
||||
/>
|
||||
))}
|
||||
{/* Releases */}
|
||||
<div className="mt-8">
|
||||
{releases.map((release) => (
|
||||
<ReleaseCard
|
||||
key={release.slug}
|
||||
title={release.title}
|
||||
description={release.description}
|
||||
date={release.date}
|
||||
version={release.version}
|
||||
content={release.body}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { ContactFormCard } from '@/components/contact/contact-form-card';
|
||||
import Container from '@/components/layout/container';
|
||||
import { constructMetadata } from '@/lib/metadata';
|
||||
import { getUrlWithLocale } from '@/lib/urls/urls';
|
||||
import type { Metadata } from 'next';
|
||||
@ -28,19 +29,21 @@ export default async function ContactPage() {
|
||||
const t = await getTranslations('ContactPage');
|
||||
|
||||
return (
|
||||
<div className="mx-auto max-w-4xl space-y-8 pb-16">
|
||||
{/* Header */}
|
||||
<div className="space-y-4">
|
||||
<h1 className="text-center text-3xl font-bold tracking-tight">
|
||||
{t('title')}
|
||||
</h1>
|
||||
<p className="text-center text-lg text-muted-foreground">
|
||||
{t('subtitle')}
|
||||
</p>
|
||||
</div>
|
||||
<Container className="py-16 px-4">
|
||||
<div className="mx-auto max-w-4xl space-y-8 pb-16">
|
||||
{/* Header */}
|
||||
<div className="space-y-4">
|
||||
<h1 className="text-center text-3xl font-bold tracking-tight">
|
||||
{t('title')}
|
||||
</h1>
|
||||
<p className="text-center text-lg text-muted-foreground">
|
||||
{t('subtitle')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Form */}
|
||||
<ContactFormCard />
|
||||
</div>
|
||||
{/* Form */}
|
||||
<ContactFormCard />
|
||||
</div>
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
@ -1,10 +1,5 @@
|
||||
import Container from '@/components/layout/container';
|
||||
import type { PropsWithChildren } from 'react';
|
||||
|
||||
export default function PageLayout({ children }: PropsWithChildren) {
|
||||
return (
|
||||
<Container className="py-16 px-4">
|
||||
<div className="mx-auto">{children}</div>
|
||||
</Container>
|
||||
);
|
||||
return <div className="mx-auto">{children}</div>;
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
import Container from '@/components/layout/container';
|
||||
import { AnimatedGradientTextDemo } from '@/components/magicui/example/animated-gradient-text-example';
|
||||
import { AnimatedGridPatternDemo } from '@/components/magicui/example/animated-grid-pattern-example';
|
||||
import { AnimatedListDemo } from '@/components/magicui/example/animated-list-example';
|
||||
@ -29,58 +30,60 @@ import { WordRotateDemo } from '@/components/magicui/example/word-rotate-example
|
||||
*/
|
||||
export default async function MagicuiPage() {
|
||||
return (
|
||||
<div className="mx-auto space-y-8">
|
||||
<RippleDemo />
|
||||
<div className="grid md:grid-cols-2 gap-4">
|
||||
<MarqueeDemoVertical />
|
||||
<AnimatedListDemo />
|
||||
<Container className="py-16 px-4">
|
||||
<div className="mx-auto space-y-8">
|
||||
<RippleDemo />
|
||||
<div className="grid md:grid-cols-2 gap-4">
|
||||
<MarqueeDemoVertical />
|
||||
<AnimatedListDemo />
|
||||
</div>
|
||||
<div className="grid md:grid-cols-4 gap-8">
|
||||
<div className="flex items-center justify-center">
|
||||
<AvatarCirclesDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<AnimatedGradientTextDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<AnimatedShinyTextDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<AnimatedSubscribeButtonDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<ShimmerButtonDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<ShinyButtonDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<RainbowButtonDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<PulsatingButtonDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<NumberTickerDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<InteractiveHoverButtonDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<HyperTextDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<WordRotateDemo />
|
||||
</div>
|
||||
</div>
|
||||
<TweetCardDemo id="1678577280489234432" />
|
||||
<BlurFadeDemo />
|
||||
<BentoDemo />
|
||||
<DotPatternDemo />
|
||||
<GridPatternDemo />
|
||||
<AnimatedGridPatternDemo />
|
||||
<InteractiveGridPatternDemo />
|
||||
<HeroVideoDialogDemoTopInBottomOut />
|
||||
</div>
|
||||
<div className="grid md:grid-cols-4 gap-8">
|
||||
<div className="flex items-center justify-center">
|
||||
<AvatarCirclesDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<AnimatedGradientTextDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<AnimatedShinyTextDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<AnimatedSubscribeButtonDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<ShimmerButtonDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<ShinyButtonDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<RainbowButtonDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<PulsatingButtonDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<NumberTickerDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<InteractiveHoverButtonDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<HyperTextDemo />
|
||||
</div>
|
||||
<div className="flex items-center justify-center">
|
||||
<WordRotateDemo />
|
||||
</div>
|
||||
</div>
|
||||
<TweetCardDemo id="1678577280489234432" />
|
||||
<BlurFadeDemo />
|
||||
<BentoDemo />
|
||||
<DotPatternDemo />
|
||||
<GridPatternDemo />
|
||||
<AnimatedGridPatternDemo />
|
||||
<InteractiveGridPatternDemo />
|
||||
<HeroVideoDialogDemoTopInBottomOut />
|
||||
</div>
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
import Container from '@/components/layout/container';
|
||||
import { WaitlistFormCard } from '@/components/waitlist/waitlist-form-card';
|
||||
import { constructMetadata } from '@/lib/metadata';
|
||||
import { getUrlWithLocale } from '@/lib/urls/urls';
|
||||
@ -24,19 +25,21 @@ export default async function WaitlistPage() {
|
||||
const t = await getTranslations('WaitlistPage');
|
||||
|
||||
return (
|
||||
<div className="mx-auto max-w-4xl space-y-8 pb-16">
|
||||
{/* Header */}
|
||||
<div className="space-y-4">
|
||||
<h1 className="text-center text-3xl font-bold tracking-tight">
|
||||
{t('title')}
|
||||
</h1>
|
||||
<h2 className="text-center text-lg text-muted-foreground">
|
||||
{t('subtitle')}
|
||||
</h2>
|
||||
</div>
|
||||
<Container className="py-16 px-4">
|
||||
<div className="mx-auto max-w-4xl space-y-8 pb-16">
|
||||
{/* Header */}
|
||||
<div className="space-y-4">
|
||||
<h1 className="text-center text-3xl font-bold tracking-tight">
|
||||
{t('title')}
|
||||
</h1>
|
||||
<h2 className="text-center text-lg text-muted-foreground">
|
||||
{t('subtitle')}
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
{/* Form */}
|
||||
<WaitlistFormCard />
|
||||
</div>
|
||||
{/* Form */}
|
||||
<WaitlistFormCard />
|
||||
</div>
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user