Merge remote-tracking branch 'origin/main' into cloudflare

This commit is contained in:
javayhu 2025-06-20 22:21:04 +08:00
commit 5d50135ed6
12 changed files with 293 additions and 1058 deletions

View File

@ -20,22 +20,17 @@
"preview": "opennextjs-cloudflare build && opennextjs-cloudflare preview", "preview": "opennextjs-cloudflare build && opennextjs-cloudflare preview",
"deploy": "opennextjs-cloudflare build && opennextjs-cloudflare deploy", "deploy": "opennextjs-cloudflare build && opennextjs-cloudflare deploy",
"upload": "opennextjs-cloudflare build && opennextjs-cloudflare upload", "upload": "opennextjs-cloudflare build && opennextjs-cloudflare upload",
"cf-typegen": "wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts" "cf-typegen": "wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts",
"knip": "knip"
}, },
"dependencies": { "dependencies": {
"@ai-sdk/openai": "^1.1.13", "@ai-sdk/openai": "^1.1.13",
"@aws-sdk/client-s3": "^3.758.0",
"@aws-sdk/s3-request-presigner": "^3.758.0",
"@base-ui-components/react": "1.0.0-beta.0", "@base-ui-components/react": "1.0.0-beta.0",
"@better-fetch/fetch": "^1.1.18", "@better-fetch/fetch": "^1.1.18",
"@content-collections/core": "^0.8.0",
"@content-collections/mdx": "^0.2.0",
"@content-collections/next": "^0.2.4",
"@dnd-kit/core": "^6.3.1", "@dnd-kit/core": "^6.3.1",
"@dnd-kit/modifiers": "^9.0.0", "@dnd-kit/modifiers": "^9.0.0",
"@dnd-kit/sortable": "^10.0.0", "@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2", "@dnd-kit/utilities": "^3.2.2",
"@fumadocs/content-collections": "^1.1.8",
"@hookform/resolvers": "^4.1.0", "@hookform/resolvers": "^4.1.0",
"@next/third-parties": "^15.3.0", "@next/third-parties": "^15.3.0",
"@openpanel/nextjs": "^1.0.7", "@openpanel/nextjs": "^1.0.7",
@ -101,7 +96,6 @@
"motion": "^12.4.3", "motion": "^12.4.3",
"next": "15.2.1", "next": "15.2.1",
"next-intl": "^4.0.0", "next-intl": "^4.0.0",
"next-plausible": "^3.12.4",
"next-safe-action": "^7.10.4", "next-safe-action": "^7.10.4",
"next-themes": "^0.4.4", "next-themes": "^0.4.4",
"pg": "^8.16.0", "pg": "^8.16.0",
@ -125,7 +119,6 @@
"tailwind-merge": "^3.0.2", "tailwind-merge": "^3.0.2",
"tailwindcss-animate": "^1.0.7", "tailwindcss-animate": "^1.0.7",
"tw-animate-css": "^1.2.4", "tw-animate-css": "^1.2.4",
"unist-util-visit": "^5.0.0",
"use-intl": "^3.26.5", "use-intl": "^3.26.5",
"use-media": "^1.5.0", "use-media": "^1.5.0",
"vaul": "^1.1.2", "vaul": "^1.1.2",
@ -134,21 +127,20 @@
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "1.9.4", "@biomejs/biome": "1.9.4",
"@content-collections/cli": "^0.1.6",
"@opennextjs/cloudflare": "^1.2.1", "@opennextjs/cloudflare": "^1.2.1",
"@tailwindcss/postcss": "^4.0.14", "@tailwindcss/postcss": "^4.0.14",
"@types/mdx": "^2.0.13", "@types/mdx": "^2.0.13",
"@types/node": "^20", "@types/node": "^20.19.0",
"@types/pg": "^8.11.11", "@types/pg": "^8.11.11",
"@types/react": "^19", "@types/react": "^19",
"@types/react-dom": "^19", "@types/react-dom": "^19",
"concurrently": "^9.1.2",
"drizzle-kit": "^0.30.4", "drizzle-kit": "^0.30.4",
"knip": "^5.61.2",
"postcss": "^8", "postcss": "^8",
"react-email": "3.0.7", "react-email": "3.0.7",
"tailwindcss": "^4.0.14", "tailwindcss": "^4.0.14",
"tsx": "^4.19.3", "tsx": "^4.19.3",
"typescript": "^5", "typescript": "^5.8.3",
"wrangler": "^4.14.1" "wrangler": "^4.14.1"
} }
} }

1261
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
import Container from '@/components/layout/container'; import Container from '@/components/layout/container';
import type { BlogCategory } from '@/types/blog-types'; import type { BlogCategory } from '@/types';
import { BlogCategoryListDesktop } from './blog-category-list-desktop'; import { BlogCategoryListDesktop } from './blog-category-list-desktop';
import { BlogCategoryListMobile } from './blog-category-list-mobile'; import { BlogCategoryListMobile } from './blog-category-list-mobile';

View File

@ -3,7 +3,7 @@
import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group'; import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group';
import { LocaleLink } from '@/i18n/navigation'; import { LocaleLink } from '@/i18n/navigation';
import { cn } from '@/lib/utils'; import { cn } from '@/lib/utils';
import type { BlogCategory } from '@/types/blog-types'; import type { BlogCategory } from '@/types';
import { useTranslations } from 'next-intl'; import { useTranslations } from 'next-intl';
import { useParams } from 'next/navigation'; import { useParams } from 'next/navigation';

View File

@ -9,7 +9,7 @@ import {
DrawerTitle, DrawerTitle,
DrawerTrigger, DrawerTrigger,
} from '@/components/ui/drawer'; } from '@/components/ui/drawer';
import type { BlogCategory } from '@/types/blog-types'; import type { BlogCategory } from '@/types';
import { LayoutListIcon } from 'lucide-react'; import { LayoutListIcon } from 'lucide-react';
import { useTranslations } from 'next-intl'; import { useTranslations } from 'next-intl';
import { useParams } from 'next/navigation'; import { useParams } from 'next/navigation';

View File

@ -11,7 +11,7 @@ interface ContactMessageProps extends BaseEmailProps {
message: string; message: string;
} }
export function ContactMessage({ export default function ContactMessage({
name, name,
email, email,
message, message,
@ -40,5 +40,3 @@ ContactMessage.PreviewProps = {
email: 'username@example.com', email: 'username@example.com',
message: 'This is a test message', message: 'This is a test message',
}; };
export default ContactMessage;

View File

@ -11,7 +11,7 @@ interface ForgotPasswordProps extends BaseEmailProps {
name: string; name: string;
} }
export function ForgotPassword({ export default function ForgotPassword({
url, url,
name, name,
locale, locale,
@ -38,5 +38,3 @@ ForgotPassword.PreviewProps = {
url: 'https://mksaas.com', url: 'https://mksaas.com',
name: 'username', name: 'username',
}; };
export default ForgotPassword;

View File

@ -7,7 +7,7 @@ import { createTranslator } from 'use-intl/core';
interface SubscribeNewsletterProps extends BaseEmailProps {} interface SubscribeNewsletterProps extends BaseEmailProps {}
export function SubscribeNewsletter({ export default function SubscribeNewsletter({
locale, locale,
messages, messages,
}: SubscribeNewsletterProps) { }: SubscribeNewsletterProps) {
@ -29,5 +29,3 @@ SubscribeNewsletter.PreviewProps = {
locale: routing.defaultLocale, locale: routing.defaultLocale,
messages: defaultMessages, messages: defaultMessages,
}; };
export default SubscribeNewsletter;

View File

@ -11,7 +11,12 @@ interface VerifyEmailProps extends BaseEmailProps {
name: string; name: string;
} }
export function VerifyEmail({ url, name, locale, messages }: VerifyEmailProps) { export default function VerifyEmail({
url,
name,
locale,
messages,
}: VerifyEmailProps) {
const t = createTranslator({ const t = createTranslator({
locale, locale,
messages, messages,
@ -33,5 +38,3 @@ VerifyEmail.PreviewProps = {
url: 'https://mksaas.com', url: 'https://mksaas.com',
name: 'username', name: 'username',
}; };
export default VerifyEmail;

View File

@ -1,8 +1,8 @@
import type { Locale, Messages } from 'next-intl'; import type { Locale, Messages } from 'next-intl';
import { ContactMessage } from './templates/contact-message'; import ContactMessage from './templates/contact-message';
import { ForgotPassword } from './templates/forgot-password'; import ForgotPassword from './templates/forgot-password';
import { SubscribeNewsletter } from './templates/subscribe-newsletter'; import SubscribeNewsletter from './templates/subscribe-newsletter';
import { VerifyEmail } from './templates/verify-email'; import VerifyEmail from './templates/verify-email';
/** /**
* list all the email templates here * list all the email templates here

View File

@ -1,25 +0,0 @@
/**
* Blog Category
*
* we can not pass CategoryType from server component to client component
* so we need to define a new type, and use it in the client component
*/
export type BlogCategory = {
slug: string;
name: string;
description: string;
};
export type BlogAuthor = {
slug: string;
name: string;
description: string;
avatar: string;
};
export type BlogPost = {
slug: string;
title: string;
description: string;
date: string;
};

12
src/types/index.d.ts vendored
View File

@ -163,3 +163,15 @@ export type MenuItem = {
export type NestedMenuItem = MenuItem & { export type NestedMenuItem = MenuItem & {
items?: MenuItem[]; // The items to display in the nested menu items?: MenuItem[]; // The items to display in the nested menu
}; };
/**
* Blog Category
*
* we can not pass CategoryType from server component to client component
* so we need to define a new type, and use it in the client component
*/
export type BlogCategory = {
slug: string;
name: string;
description: string;
};