mirror of
https://github.com/DeveloLongScript/MHSF.git
synced 2026-05-09 11:44:58 -05:00
Compare commits
5 Commits
5f4afdb4d0
...
5c9e3c7db3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c9e3c7db3 | ||
|
|
d679e19b84 | ||
|
|
2551dabf82 | ||
|
|
f000cdeaf9 | ||
|
|
98c834dad5 |
@ -46,7 +46,7 @@
|
||||
"next": "15.1.6",
|
||||
"next-themes": "^0.4.4",
|
||||
"react": "^19.0.0",
|
||||
"react-day-picker": "8.10.1",
|
||||
"react-day-picker": "9.5.1",
|
||||
"react-dom": "^19.0.0",
|
||||
"react-hook-form": "^7.54.2",
|
||||
"react-resizable-panels": "^2.1.7",
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
"next": "15.1.6",
|
||||
"next-themes": "^0.4.4",
|
||||
"react": "^19.0.0",
|
||||
"react-day-picker": "8.10.1",
|
||||
"react-day-picker": "9.5.1",
|
||||
"react-dom": "^19.0.0",
|
||||
"react-hook-form": "^7.54.2",
|
||||
"react-resizable-panels": "^2.1.7",
|
||||
|
||||
@ -32,23 +32,29 @@ import { withContentlayer } from "next-contentlayer";
|
||||
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
images: {
|
||||
remotePatterns: [
|
||||
{
|
||||
protocol: "https",
|
||||
hostname: "img.clerk.com",
|
||||
},
|
||||
],
|
||||
},
|
||||
async redirects() {
|
||||
return [
|
||||
{
|
||||
source: '/docs',
|
||||
destination: '/docs/getting-started',
|
||||
permanent: true,
|
||||
},
|
||||
]
|
||||
},
|
||||
images: {
|
||||
remotePatterns: [
|
||||
{
|
||||
protocol: "https",
|
||||
hostname: "img.clerk.com",
|
||||
},
|
||||
],
|
||||
},
|
||||
async redirects() {
|
||||
return [
|
||||
{
|
||||
source: "/docs",
|
||||
destination: "/docs/getting-started",
|
||||
permanent: true,
|
||||
},
|
||||
];
|
||||
},
|
||||
eslint: {
|
||||
ignoreDuringBuilds: true,
|
||||
},
|
||||
typescript: {
|
||||
ignoreBuildErrors: true,
|
||||
},
|
||||
};
|
||||
|
||||
export default withContentlayer(nextConfig);
|
||||
|
||||
@ -16,8 +16,9 @@
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.24.7",
|
||||
"@biomejs/biome": "^1.8.3",
|
||||
"@clerk/elements": "^0.22.2",
|
||||
"@clerk/nextjs": "^6.9.2",
|
||||
"@clerk/elements": "^0.23.0",
|
||||
"@clerk/nextjs": "^6.12.1",
|
||||
"@clerk/themes": "^2.2.20",
|
||||
"@emotion/is-prop-valid": "^1.3.0",
|
||||
"@linear/sdk": "^31.0.0",
|
||||
"@monaco-editor/react": "^4.6.0",
|
||||
@ -46,7 +47,7 @@
|
||||
"minimessage-2-html": "1.6.0",
|
||||
"minimessage-js": "^1.1.3",
|
||||
"mongodb": "^6.8.0",
|
||||
"next": "14.2.10",
|
||||
"next": "^15.2.0",
|
||||
"next-contentlayer": "^0.3.4",
|
||||
"next-css-obfuscator": "^2.2.16",
|
||||
"next-sitemap": "^4.2.3",
|
||||
@ -55,8 +56,8 @@
|
||||
"nprogress": "^0.2.0",
|
||||
"postcss-obfuscator": "^1.6.1",
|
||||
"prettier": "^3.3.1",
|
||||
"react": "^18",
|
||||
"react-dom": "^18",
|
||||
"react": "18.3.1",
|
||||
"react-dom": "18.3.1",
|
||||
"react-fade-in": "^2.0.1",
|
||||
"react-fast-marquee": "^1.6.5",
|
||||
"react-hot-toast": "^2.4.1",
|
||||
@ -92,8 +93,8 @@
|
||||
"@types/canvas-confetti": "^1.6.4",
|
||||
"@types/node": "^20",
|
||||
"@types/nprogress": "^0.2.3",
|
||||
"@types/react": "^18",
|
||||
"@types/react-dom": "^18",
|
||||
"@types/react": "19.0.10",
|
||||
"@types/react-dom": "19.0.4",
|
||||
"@types/react-twemoji": "^0.4.3",
|
||||
"@unocss/eslint-config": "^0.61.5",
|
||||
"@unocss/preset-uno": "^0.61.5",
|
||||
@ -105,7 +106,7 @@
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "^1.0.0",
|
||||
"eslint": "^8",
|
||||
"eslint-config-next": "14.2.3",
|
||||
"eslint-config-next": "15.2.0",
|
||||
"framer-motion": "^11.3.8",
|
||||
"geist": "^1.3.0",
|
||||
"mangle-css-class-webpack-plugin": "^5.1.0",
|
||||
@ -121,5 +122,9 @@
|
||||
"typescript": "^5",
|
||||
"vaul": "^0.9.1",
|
||||
"zod": "^3.23.8"
|
||||
},
|
||||
"resolutions": {
|
||||
"@types/react": "19.0.10",
|
||||
"@types/react-dom": "19.0.4"
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import { use } from "react";
|
||||
/*
|
||||
* MHSF, Minehut Server List
|
||||
* All external content is rather licensed under the ECA Agreement
|
||||
@ -41,28 +42,30 @@ import { notFound } from "next/navigation";
|
||||
export const generateStaticParams = async () =>
|
||||
allDocs.map((post) => ({ slug: [post._raw.flattenedPath] }));
|
||||
|
||||
export const generateMetadata = ({
|
||||
params,
|
||||
}: {
|
||||
params: { slug: string[] };
|
||||
}) => {
|
||||
const post = allDocs.find(
|
||||
export const generateMetadata = async (
|
||||
props: {
|
||||
params: Promise<{ slug: string[] }>;
|
||||
}
|
||||
) => {
|
||||
const params = await props.params;
|
||||
const post = allDocs.find(
|
||||
(post) => post._raw.flattenedPath === params.slug.join("/"),
|
||||
);
|
||||
if (!post) notFound();
|
||||
return { title: post.title + " | MHSF Docs", themeColor: "#000000" };
|
||||
if (!post) notFound();
|
||||
return { title: post.title + " | MHSF Docs", themeColor: "#000000" };
|
||||
};
|
||||
|
||||
const PostLayout = ({ params }: { params: { slug: string[] } }) => {
|
||||
const doc = allDocs.find(
|
||||
const PostLayout = (props0: { params: Promise<{ slug: string[] }> }) => {
|
||||
const params = use(props0.params);
|
||||
const doc = allDocs.find(
|
||||
(post) => post._raw.flattenedPath === params.slug.join("/"),
|
||||
);
|
||||
|
||||
if (!doc) notFound();
|
||||
console.log(doc);
|
||||
const MDXContent = useMDXComponent(doc.body.code);
|
||||
if (!doc) notFound();
|
||||
console.log(doc);
|
||||
const MDXContent = useMDXComponent(doc.body.code);
|
||||
|
||||
return (
|
||||
return (
|
||||
<main className="relative py-6 lg:gap-10 lg:py-8 xl:grid xl:grid-cols-[1fr_300px]">
|
||||
<div className="mx-auto w-full min-w-0">
|
||||
<div className="pb-12 pt-8 prose dark:prose-invert">
|
||||
|
||||
@ -30,10 +30,11 @@
|
||||
|
||||
import Embed from "@/components/feat/Embed";
|
||||
|
||||
export default function EmbedPage({
|
||||
params,
|
||||
}: {
|
||||
params: { server: string };
|
||||
}) {
|
||||
return <Embed params={params} />;
|
||||
export default async function EmbedPage(
|
||||
props: {
|
||||
params: Promise<{ server: string }>;
|
||||
}
|
||||
) {
|
||||
const params = await props.params;
|
||||
return <Embed params={params} />;
|
||||
}
|
||||
|
||||
@ -32,13 +32,11 @@ import type { Metadata, ResolvingMetadata } from "next";
|
||||
import CustomizeRoot from "@/components/CustomizeRoot";
|
||||
|
||||
type Props = {
|
||||
params: { server: string };
|
||||
params: Promise<{ server: string }>;
|
||||
};
|
||||
|
||||
export async function generateMetadata(
|
||||
{ params }: Props,
|
||||
parent: ResolvingMetadata
|
||||
): Promise<Metadata> {
|
||||
export async function generateMetadata(props: Props, parent: ResolvingMetadata): Promise<Metadata> {
|
||||
const params = await props.params;
|
||||
// read route params
|
||||
const { server } = params;
|
||||
const json = await (
|
||||
@ -89,7 +87,8 @@ export async function generateMetadata(
|
||||
};
|
||||
}
|
||||
|
||||
export default function ServerPage({ params }: { params: { server: string } }) {
|
||||
export default async function ServerPage(props: { params: Promise<{ server: string }> }) {
|
||||
const params = await props.params;
|
||||
return (
|
||||
<main>
|
||||
<CustomizeRoot params={params} />
|
||||
|
||||
@ -28,19 +28,25 @@
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
"use client";
|
||||
"use client";;
|
||||
import { use } from "react";
|
||||
|
||||
import { LoadingSpinner } from "@/components/ui/loading-spinner";
|
||||
import { useServerExists } from "@/lib/hooks/use-server-exists";
|
||||
import { notFound } from "next/navigation";
|
||||
|
||||
export default function ServerLayout({
|
||||
params,
|
||||
children,
|
||||
}: {
|
||||
params: { server: string };
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
export default function ServerLayout(
|
||||
props: {
|
||||
params: Promise<{ server: string }>;
|
||||
children: React.ReactNode;
|
||||
}
|
||||
) {
|
||||
const params = use(props.params);
|
||||
|
||||
const {
|
||||
children
|
||||
} = props;
|
||||
|
||||
const { serverExists, loading } = useServerExists(params.server);
|
||||
|
||||
if (loading) return <LoadingSpinner />;
|
||||
|
||||
@ -37,13 +37,11 @@ import TabServer from "@/components/misc/TabServer";
|
||||
import type { Metadata, ResolvingMetadata } from "next";
|
||||
|
||||
type Props = {
|
||||
params: { server: string };
|
||||
params: Promise<{ server: string }>;
|
||||
};
|
||||
|
||||
export async function generateMetadata(
|
||||
{ params }: Props,
|
||||
parent: ResolvingMetadata
|
||||
): Promise<Metadata> {
|
||||
export async function generateMetadata(props: Props, parent: ResolvingMetadata): Promise<Metadata> {
|
||||
const params = await props.params;
|
||||
// read route params
|
||||
const { server } = params;
|
||||
const json = await (
|
||||
@ -126,7 +124,8 @@ export async function generateMetadata(
|
||||
};
|
||||
}
|
||||
|
||||
export default function ServerPage({ params }: { params: { server: string } }) {
|
||||
export default async function ServerPage(props: { params: Promise<{ server: string }> }) {
|
||||
const params = await props.params;
|
||||
return (
|
||||
<main style={{ "color-scheme": "dark" } as React.CSSProperties}>
|
||||
<ColorProvider server={params.server}>
|
||||
|
||||
@ -40,13 +40,11 @@ import { MonthlyChart } from "@/components/charts/MonthlyChart";
|
||||
import { DailyChart } from "@/components/charts/DailyChart";
|
||||
|
||||
type Props = {
|
||||
params: { server: string };
|
||||
params: Promise<{ server: string }>;
|
||||
};
|
||||
|
||||
export async function generateMetadata(
|
||||
{ params }: Props,
|
||||
parent: ResolvingMetadata
|
||||
): Promise<Metadata> {
|
||||
export async function generateMetadata(props: Props, parent: ResolvingMetadata): Promise<Metadata> {
|
||||
const params = await props.params;
|
||||
// read route params
|
||||
const { server } = params;
|
||||
const json = await (
|
||||
@ -97,7 +95,8 @@ export async function generateMetadata(
|
||||
};
|
||||
}
|
||||
|
||||
export default function ServerPage({ params }: { params: { server: string } }) {
|
||||
export default async function ServerPage(props: { params: Promise<{ server: string }> }) {
|
||||
const params = await props.params;
|
||||
return (
|
||||
<main style={{ "color-scheme": "dark" } as React.CSSProperties}>
|
||||
<ColorProvider server={params.server}>
|
||||
|
||||
@ -28,53 +28,18 @@
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
import { Sidebar } from "@/components/docs/Sidebar";
|
||||
import {
|
||||
Breadcrumb,
|
||||
BreadcrumbItem,
|
||||
BreadcrumbLink,
|
||||
BreadcrumbList,
|
||||
BreadcrumbPage,
|
||||
BreadcrumbSeparator,
|
||||
} from "@/components/ui/breadcrumb";
|
||||
import { Separator } from "@/components/ui/separator";
|
||||
import {
|
||||
SidebarInset,
|
||||
SidebarProvider,
|
||||
SidebarTrigger,
|
||||
} from "@/components/ui/sidebar";
|
||||
import "./globals.css";
|
||||
|
||||
export default function Page() {
|
||||
return (
|
||||
<SidebarProvider>
|
||||
<Sidebar />
|
||||
<SidebarInset>
|
||||
<header className="flex sticky top-0 bg-background h-16 shrink-0 items-center gap-2 border-b px-4">
|
||||
<SidebarTrigger className="-ml-1" />
|
||||
<Separator orientation="vertical" className="mr-2 h-4" />
|
||||
<Breadcrumb>
|
||||
<BreadcrumbList>
|
||||
<BreadcrumbItem className="hidden md:block">
|
||||
<BreadcrumbLink href="#">
|
||||
Building Your Application
|
||||
</BreadcrumbLink>
|
||||
</BreadcrumbItem>
|
||||
<BreadcrumbSeparator className="hidden md:block" />
|
||||
<BreadcrumbItem>
|
||||
<BreadcrumbPage>Data Fetching</BreadcrumbPage>
|
||||
</BreadcrumbItem>
|
||||
</BreadcrumbList>
|
||||
</Breadcrumb>
|
||||
</header>
|
||||
<div className="flex flex-1 flex-col gap-4 p-4">
|
||||
{Array.from({ length: 24 }).map((_, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className="aspect-video h-12 w-full rounded-lg bg-muted/50"
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</SidebarInset>
|
||||
</SidebarProvider>
|
||||
);
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<html lang="en">
|
||||
<body>
|
||||
<main>{children}</main>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
16
apps/www/src/app/not-found.tsx
Normal file
16
apps/www/src/app/not-found.tsx
Normal file
@ -0,0 +1,16 @@
|
||||
import Footer from "@/components/misc/Footer";
|
||||
import Link from "next/link";
|
||||
|
||||
export default function NotFound() {
|
||||
return (
|
||||
<>
|
||||
<span className="flex justify-center items-center text-center min-h-screen h-max">
|
||||
<div className="block">
|
||||
That page couldn't be found <br />
|
||||
<Link href="/">Go home</Link>
|
||||
</div>
|
||||
</span>
|
||||
<Footer />
|
||||
</>
|
||||
);
|
||||
}
|
||||
@ -1,34 +1,45 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
"noEmit": true,
|
||||
"esModuleInterop": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "bundler",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"jsx": "preserve",
|
||||
"incremental": true,
|
||||
"plugins": [
|
||||
{
|
||||
"name": "next"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"contentlayer/generated": ["./.contentlayer/generated"],
|
||||
"@/*": ["./src/*"]
|
||||
}
|
||||
},
|
||||
"include": [
|
||||
"next-env.d.ts",
|
||||
"**/*.ts",
|
||||
"**/*.tsx",
|
||||
".next/types/**/*.ts",
|
||||
".contentlayer/generated",
|
||||
"docs/legal/external-content-agreement.mdx"
|
||||
],
|
||||
"exclude": ["node_modules"]
|
||||
"compilerOptions": {
|
||||
"lib": [
|
||||
"dom",
|
||||
"dom.iterable",
|
||||
"esnext"
|
||||
],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
"noEmit": true,
|
||||
"esModuleInterop": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "bundler",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"jsx": "preserve",
|
||||
"incremental": true,
|
||||
"plugins": [
|
||||
{
|
||||
"name": "next"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"contentlayer/generated": [
|
||||
"./.contentlayer/generated"
|
||||
],
|
||||
"@/*": [
|
||||
"./src/*"
|
||||
]
|
||||
},
|
||||
"target": "ES2017"
|
||||
},
|
||||
"include": [
|
||||
"next-env.d.ts",
|
||||
"**/*.ts",
|
||||
"**/*.tsx",
|
||||
".next/types/**/*.ts",
|
||||
".contentlayer/generated",
|
||||
"docs/legal/external-content-agreement.mdx"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
]
|
||||
}
|
||||
|
||||
42
package.json
42
package.json
@ -1,23 +1,23 @@
|
||||
{
|
||||
"name": "MHSF-Modern",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "turbo build",
|
||||
"dev": "turbo dev --filter=!cron",
|
||||
"lint": "turbo lint",
|
||||
"format": "prettier --write \"**/*.{ts,tsx,md}\""
|
||||
},
|
||||
"devDependencies": {
|
||||
"prettier": "^3.5.0",
|
||||
"turbo": "^2.4.2",
|
||||
"typescript": "5.7.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"packageManager": "yarn@1.22.22",
|
||||
"workspaces": [
|
||||
"apps/*",
|
||||
"packages/*"
|
||||
]
|
||||
"name": "MHSF-Modern",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "turbo build",
|
||||
"dev": "turbo dev --filter=!cron",
|
||||
"lint": "turbo lint",
|
||||
"format": "prettier --write \"**/*.{ts,tsx,md}\""
|
||||
},
|
||||
"devDependencies": {
|
||||
"prettier": "^3.5.0",
|
||||
"turbo": "^2.4.4",
|
||||
"typescript": "5.7.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"packageManager": "yarn@1.22.22",
|
||||
"workspaces": [
|
||||
"apps/*",
|
||||
"packages/*"
|
||||
]
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user