chore: upgrade Next.js, next-intl, and Headless UI to latest versions

This commit is contained in:
Mauricio Siu
2025-03-02 18:50:34 -06:00
parent 06b33b6d8d
commit 9d8df9986e
11 changed files with 295 additions and 184 deletions

View File

@@ -13,3 +13,11 @@ yarn dev
```
Open http://localhost:3000 with your browser to see the result.
For Blog Page, you can use the following command to generate the static pages:
```
GHOST_URL=""
GHOST_KEY=""
```

View File

@@ -1,7 +1,7 @@
import { CopyButton } from "@/components/ui/copy-button";
import { getPost, getPosts } from "@/lib/ghost";
import type { Metadata, ResolvingMetadata } from "next";
import { getTranslations } from "next-intl/server";
import { getTranslations, setRequestLocale } from "next-intl/server";
import Image from "next/image";
import Link from "next/link";
import { notFound } from "next/navigation";
@@ -27,7 +27,8 @@ export async function generateMetadata(
{ params }: Props,
parent: ResolvingMetadata,
): Promise<Metadata> {
const post = await getPost(params.slug);
const { locale, slug } = await params;
const post = await getPost(slug);
if (!post) {
return {
@@ -36,10 +37,10 @@ export async function generateMetadata(
}
const ogUrl = new URL(
`/${params.locale}/api/og`,
`/${locale}/api/og`,
process.env.NEXT_PUBLIC_APP_URL || "http://localhost:3000",
);
ogUrl.searchParams.set("slug", params.slug);
ogUrl.searchParams.set("slug", slug);
return {
title: post.title,
@@ -69,10 +70,14 @@ export async function generateMetadata(
export async function generateStaticParams() {
const posts = await getPosts();
const locales = ["en", "fr", "zh-Hans"];
return posts.map((post) => ({
slug: post.slug,
}));
return posts.flatMap((post) =>
locales.map((locale) => ({
locale,
slug: post.slug,
})),
);
}
interface CodeProps
@@ -126,13 +131,14 @@ async function CodeBlock(props: LanguageProps) {
<CopyButton text={format} />
<div
dangerouslySetInnerHTML={{ __html: out }}
className="text-sm p-4 rounded-lg bg-[#18191F]"
className="text-sm p-4 rounded-lg bg-[#18191F] overflow-auto"
/>
</div>
);
}
export default async function BlogPostPage({ params }: Props) {
const { locale, slug } = params;
const { locale, slug } = await params;
// setRequestLocale(locale);
const t = await getTranslations({ locale, namespace: "blog" });
const post = await getPost(slug);
const allPosts = await getPosts();
@@ -164,7 +170,10 @@ export default async function BlogPostPage({ params }: Props) {
const components: Partial<Components> = {
h1: ({ node, ...props }) => (
<h1 className="text-3xl text-primary font-bold mt-8 mb-4" {...props} />
<h1
className="text-xl md:text-2xl xl:text-3xl text-primary font-bold mt-8 mb-4"
{...props}
/>
),
h2: ({ node, ...props }) => (
<h2 className="text-2xl text-primary/90 font-bold mt-6 mb-3" {...props} />
@@ -230,7 +239,7 @@ export default async function BlogPostPage({ params }: Props) {
<ZoomableImage
src={src || ""}
alt={alt || ""}
className="object-cover max-w-lg mx-auto rounded-lg border border-border"
className="object-cover max-w-lg mx-auto rounded-lg border max-lg:w-64 border-border overflow-hidden"
/>
),
code: ({ inline, className, children, ...props }: CodeProps) => {
@@ -245,7 +254,7 @@ export default async function BlogPostPage({ params }: Props) {
};
return (
<article className="container mx-auto px-4 py-12 max-w-5xl">
<article className="container mx-auto px-4 pb-12 max-w-5xl">
<Link
href="/blog"
className="inline-flex items-center mb-8 text-primary hover:text-primary/80 transition-colors"
@@ -267,7 +276,9 @@ export default async function BlogPostPage({ params }: Props) {
<div className=" rounded-lg p-8 shadow-lg border border-border">
<header className="mb-8">
<h1 className="text-4xl font-bold mb-4">{post.title}</h1>
<h1 className="text-2xl md:text-3xl xl:text-4xl font-bold mb-4">
{post.title}
</h1>
<div className="flex items-center mb-6">
{post.primary_author?.profile_image && (
<div className="relative h-12 w-12 rounded-full overflow-hidden mr-4">

View File

@@ -2,7 +2,7 @@ import { getPosts, getTags } from "@/lib/ghost";
import type { Post } from "@/lib/ghost";
import { RssIcon } from "lucide-react";
import type { Metadata } from "next";
import { getTranslations } from "next-intl/server";
import { getTranslations, setRequestLocale } from "next-intl/server";
import Link from "next/link";
import { BlogPostCard } from "./components/BlogPostCard";
import { SearchAndFilter } from "./components/SearchAndFilter";
@@ -19,19 +19,22 @@ export const metadata: Metadata = {
};
export default async function BlogPage({
params: { locale },
params,
searchParams,
}: {
params: { locale: string };
searchParams: { [key: string]: string | string[] | undefined };
}) {
const { locale } = await params;
const searchParams2 = await searchParams;
setRequestLocale(locale);
const t = await getTranslations({ locale, namespace: "blog" });
const posts = await getPosts();
const tags = (await getTags()) as Tag[];
const search =
typeof searchParams.search === "string" ? searchParams.search : "";
typeof searchParams2.search === "string" ? searchParams2.search : "";
const selectedTag =
typeof searchParams.tag === "string" ? searchParams.tag : "";
typeof searchParams2.tag === "string" ? searchParams2.tag : "";
const filteredPosts = posts.filter((post) => {
const matchesSearch =

View File

@@ -4,6 +4,7 @@ import "react-photo-view/dist/react-photo-view.css";
import { Footer } from "@/components/Footer";
import { Header } from "@/components/Header";
import type { Metadata } from "next";
import { setRequestLocale } from "next-intl/server";
export const metadata: Metadata = {
metadataBase: new URL("https://dokploy.com"),
@@ -75,6 +76,8 @@ export default async function RootLayout({
children: React.ReactNode;
params: { locale: string };
}) {
const { locale } = await params;
setRequestLocale(locale);
return (
<div className="flex h-full flex-col">
<Header />

View File

@@ -1,5 +0,0 @@
import { SlimLayout } from "@/components/SlimLayout";
export default function NotFound() {
return <SlimLayout />;
}

View File

@@ -7,8 +7,11 @@ import { Pricing } from "@/components/pricing";
import { SecondaryFeaturesSections } from "@/components/secondary-features";
import { Sponsors } from "@/components/sponsors";
import { StatsSection } from "@/components/stats";
import { setRequestLocale } from "next-intl/server";
export default function Home() {
export default async function Home({ params }: { params: { locale: string } }) {
const { locale } = await params;
setRequestLocale(locale);
return (
<div>
<main>

View File

@@ -1,20 +1,18 @@
import { Link } from "@/i18n/routing";
import { useTranslations } from "next-intl";
export function SlimLayout() {
const t = useTranslations("404");
return (
<>
<main className="flex flex-auto items-center justify-center text-center">
<div>
<h1 className="mb-4 text-6xl font-semibold text-primary">404</h1>
<p className="mb-4 text-lg text-muted-foreground">{t("title")}</p>
<p className="mb-4 text-lg text-muted-foreground">Not found.</p>
<p className="mt-4 text-muted-foreground">
{t("des")}{" "}
Go back to home
<Link href="/" className="text-primary">
{t("action")}
Go back to home
</Link>
p{" "}
.
</p>
</div>
</main>

View File

@@ -6,8 +6,6 @@ import { useEffect, useState } from "react";
import { cn } from "@/lib/utils";
import { useTranslations } from "next-intl";
import { Container } from "./Container";
import Safari from "./ui/safari";
const features = [
{

View File

@@ -1,12 +1,15 @@
import { getRequestConfig } from "next-intl/server";
import { notFound } from "next/navigation";
import { routing } from "./routing";
export default getRequestConfig(async ({ locale }) => {
export default getRequestConfig(async ({ requestLocale }) => {
let locale = await requestLocale;
// Validate that the incoming `locale` parameter is valid
if (!routing.locales.includes(locale as any)) notFound();
if (!locale || !routing.locales.includes(locale as any)) {
locale = routing.defaultLocale;
}
return {
locale,
messages: (await import(`../locales/${locale}.json`)).default,
};
});

View File

@@ -12,7 +12,7 @@
},
"browserslist": "defaults, not ie <= 11",
"dependencies": {
"@headlessui/react": "^1.7.17",
"@headlessui/react": "^2.2.0",
"@headlessui/tailwindcss": "^0.2.0",
"@radix-ui/react-accordion": "^1.2.1",
"@radix-ui/react-avatar": "^1.1.1",
@@ -32,8 +32,8 @@
"clsx": "^2.1.0",
"framer-motion": "^11.3.19",
"lucide-react": "0.364.0",
"next": "14.2.2",
"next-intl": "^3.19.0",
"next": "15.2.0",
"next-intl": "^3.26.5",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-ga4": "^2.1.0",

383
pnpm-lock.yaml generated
View File

@@ -92,8 +92,8 @@ importers:
apps/website:
dependencies:
'@headlessui/react':
specifier: ^1.7.17
version: 1.7.19(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
specifier: ^2.2.0
version: 2.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@headlessui/tailwindcss':
specifier: ^0.2.0
version: 0.2.1(tailwindcss@3.4.7)
@@ -155,11 +155,11 @@ importers:
specifier: 0.364.0
version: 0.364.0(react@18.2.0)
next:
specifier: 14.2.2
version: 14.2.2(@babel/core@7.26.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
specifier: 15.2.0
version: 15.2.0(@babel/core@7.26.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
next-intl:
specifier: ^3.19.0
version: 3.19.0(next@14.2.2(@babel/core@7.26.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0)
specifier: ^3.26.5
version: 3.26.5(next@15.2.0(@babel/core@7.26.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0)
react:
specifier: 18.2.0
version: 18.2.0
@@ -814,9 +814,24 @@ packages:
react: '>=16.8.0'
react-dom: '>=16.8.0'
'@floating-ui/react-dom@2.1.2':
resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==}
peerDependencies:
react: '>=16.8.0'
react-dom: '>=16.8.0'
'@floating-ui/react@0.26.28':
resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==}
peerDependencies:
react: '>=16.8.0'
react-dom: '>=16.8.0'
'@floating-ui/utils@0.2.5':
resolution: {integrity: sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==}
'@floating-ui/utils@0.2.9':
resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
'@formatjs/ecma402-abstract@2.0.0':
resolution: {integrity: sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==}
@@ -839,12 +854,12 @@ packages:
resolution: {integrity: sha512-vVnuwLqW8WJsg09EanNHnXnzsjYYsZE7JlD4M1sLvDnWGjvYJKNU6VpRqDxOiDChUszDZFKhxQSNYGShF0bKJg==}
engines: {node: '>=18.0.0'}
'@headlessui/react@1.7.19':
resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==}
'@headlessui/react@2.2.0':
resolution: {integrity: sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==}
engines: {node: '>=10'}
peerDependencies:
react: ^16 || ^17 || ^18
react-dom: ^16 || ^17 || ^18
react: ^18 || ^19 || ^19.0.0-rc
react-dom: ^18 || ^19 || ^19.0.0-rc
'@headlessui/tailwindcss@0.2.1':
resolution: {integrity: sha512-2+5+NZ+RzMyrVeCZOxdbvkUSssSxGvcUxphkIfSVLpRiKsj+/63T2TOL9dBYMXVfj/CGr6hMxSRInzXv6YY7sA==}
@@ -988,17 +1003,11 @@ packages:
'@mixmark-io/domino@2.2.0':
resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==}
'@next/env@14.2.2':
resolution: {integrity: sha512-sk72qRfM1Q90XZWYRoJKu/UWlTgihrASiYw/scb15u+tyzcze3bOuJ/UV6TBOQEeUaxOkRqGeuGUdiiuxc5oqw==}
'@next/env@15.0.3':
resolution: {integrity: sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==}
'@next/swc-darwin-arm64@14.2.2':
resolution: {integrity: sha512-3iPgMhzbalizGwHNFUcGnDhFPSgVBHQ8aqSTAMxB5BvJG0oYrDf1WOJZlbXBgunOEj/8KMVbejEur/FpvFsgFQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
'@next/env@15.2.0':
resolution: {integrity: sha512-eMgJu1RBXxxqqnuRJQh5RozhskoNUDHBFybvi+Z+yK9qzKeG7dadhv/Vp1YooSZmCnegf7JxWuapV77necLZNA==}
'@next/swc-darwin-arm64@15.0.3':
resolution: {integrity: sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==}
@@ -1006,10 +1015,10 @@ packages:
cpu: [arm64]
os: [darwin]
'@next/swc-darwin-x64@14.2.2':
resolution: {integrity: sha512-x7Afi/jt0ZBRUZHTi49yyej4o8znfIMHO4RvThuoc0P+uli8Jd99y5GKjxoYunPKsXL09xBXEM1+OQy2xEL0Ag==}
'@next/swc-darwin-arm64@15.2.0':
resolution: {integrity: sha512-rlp22GZwNJjFCyL7h5wz9vtpBVuCt3ZYjFWpEPBGzG712/uL1bbSkS675rVAUCRZ4hjoTJ26Q7IKhr5DfJrHDA==}
engines: {node: '>= 10'}
cpu: [x64]
cpu: [arm64]
os: [darwin]
'@next/swc-darwin-x64@15.0.3':
@@ -1018,11 +1027,11 @@ packages:
cpu: [x64]
os: [darwin]
'@next/swc-linux-arm64-gnu@14.2.2':
resolution: {integrity: sha512-zbfPtkk7L41ODMJwSp5VbmPozPmMMQrzAc0HAUomVeVIIwlDGs/UCqLJvLNDt4jpWgc21SjjyIn762lNGrMaUA==}
'@next/swc-darwin-x64@15.2.0':
resolution: {integrity: sha512-DiU85EqSHogCz80+sgsx90/ecygfCSGl5P3b4XDRVZpgujBm5lp4ts7YaHru7eVTyZMjHInzKr+w0/7+qDrvMA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
cpu: [x64]
os: [darwin]
'@next/swc-linux-arm64-gnu@15.0.3':
resolution: {integrity: sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==}
@@ -1030,8 +1039,8 @@ packages:
cpu: [arm64]
os: [linux]
'@next/swc-linux-arm64-musl@14.2.2':
resolution: {integrity: sha512-wPbS3pI/JU16rm3XdLvvTmlsmm1nd+sBa2ohXgBZcShX4TgOjD4R+RqHKlI1cjo/jDZKXt6OxmcU0Iys0OC/yg==}
'@next/swc-linux-arm64-gnu@15.2.0':
resolution: {integrity: sha512-VnpoMaGukiNWVxeqKHwi8MN47yKGyki5q+7ql/7p/3ifuU2341i/gDwGK1rivk0pVYbdv5D8z63uu9yMw0QhpQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
@@ -1042,10 +1051,10 @@ packages:
cpu: [arm64]
os: [linux]
'@next/swc-linux-x64-gnu@14.2.2':
resolution: {integrity: sha512-NqWOHqqq8iC9tuHvZxjQ2tX+jWy2X9y8NX2mcB4sj2bIccuCxbIZrU/ThFPZZPauygajZuVQ6zediejQHwZHwQ==}
'@next/swc-linux-arm64-musl@15.2.0':
resolution: {integrity: sha512-ka97/ssYE5nPH4Qs+8bd8RlYeNeUVBhcnsNUmFM6VWEob4jfN9FTr0NBhXVi1XEJpj3cMfgSRW+LdE3SUZbPrw==}
engines: {node: '>= 10'}
cpu: [x64]
cpu: [arm64]
os: [linux]
'@next/swc-linux-x64-gnu@15.0.3':
@@ -1054,8 +1063,8 @@ packages:
cpu: [x64]
os: [linux]
'@next/swc-linux-x64-musl@14.2.2':
resolution: {integrity: sha512-lGepHhwb9sGhCcU7999+iK1ZZT+6rrIoVg40MP7DZski9GIZP80wORSbt5kJzh9v2x2ev2lxC6VgwMQT0PcgTA==}
'@next/swc-linux-x64-gnu@15.2.0':
resolution: {integrity: sha512-zY1JduE4B3q0k2ZCE+DAF/1efjTXUsKP+VXRtrt/rJCTgDlUyyryx7aOgYXNc1d8gobys/Lof9P9ze8IyRDn7Q==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
@@ -1066,11 +1075,11 @@ packages:
cpu: [x64]
os: [linux]
'@next/swc-win32-arm64-msvc@14.2.2':
resolution: {integrity: sha512-TZSh/48SfcLEQ4rD25VVn2kdIgUWmMflRX3OiyPwGNXn3NiyPqhqei/BaqCYXViIQ+6QsG9R0C8LftMqy8JPMA==}
'@next/swc-linux-x64-musl@15.2.0':
resolution: {integrity: sha512-QqvLZpurBD46RhaVaVBepkVQzh8xtlUN00RlG4Iq1sBheNugamUNPuZEH1r9X1YGQo1KqAe1iiShF0acva3jHQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
cpu: [x64]
os: [linux]
'@next/swc-win32-arm64-msvc@15.0.3':
resolution: {integrity: sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==}
@@ -1078,16 +1087,10 @@ packages:
cpu: [arm64]
os: [win32]
'@next/swc-win32-ia32-msvc@14.2.2':
resolution: {integrity: sha512-M0tBVNMEBJN2ZNQWlcekMn6pvLria7Sa2Fai5znm7CCJz4pP3lrvlSxhKdkCerk0D9E0bqx5yAo3o2Q7RrD4gA==}
'@next/swc-win32-arm64-msvc@15.2.0':
resolution: {integrity: sha512-ODZ0r9WMyylTHAN6pLtvUtQlGXBL9voljv6ujSlcsjOxhtXPI1Ag6AhZK0SE8hEpR1374WZZ5w33ChpJd5fsjw==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
'@next/swc-win32-x64-msvc@14.2.2':
resolution: {integrity: sha512-a/20E/wtTJZ3Ykv3f/8F0l7TtgQa2LWHU2oNB9bsu0VjqGuGGHmm/q6waoUNQYTVPYrrlxxaHjJcDV6aiSTt/w==}
engines: {node: '>= 10'}
cpu: [x64]
cpu: [arm64]
os: [win32]
'@next/swc-win32-x64-msvc@15.0.3':
@@ -1096,6 +1099,12 @@ packages:
cpu: [x64]
os: [win32]
'@next/swc-win32-x64-msvc@15.2.0':
resolution: {integrity: sha512-8+4Z3Z7xa13NdUuUAcpVNA6o76lNPniBd9Xbo02bwXQXnZgFvEopwY2at5+z7yHl47X9qbZpvwatZ2BRo3EdZw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -1577,6 +1586,40 @@ packages:
'@radix-ui/rect@1.1.0':
resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==}
'@react-aria/focus@3.19.1':
resolution: {integrity: sha512-bix9Bu1Ue7RPcYmjwcjhB14BMu2qzfJ3tMQLqDc9pweJA66nOw8DThy3IfVr8Z7j2PHktOLf9kcbiZpydKHqzg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-aria/interactions@3.23.0':
resolution: {integrity: sha512-0qR1atBIWrb7FzQ+Tmr3s8uH5mQdyRH78n0krYaG8tng9+u1JlSi8DGRSaC9ezKyNB84m7vHT207xnHXGeJ3Fg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-aria/ssr@3.9.7':
resolution: {integrity: sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==}
engines: {node: '>= 12'}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-aria/utils@3.27.0':
resolution: {integrity: sha512-p681OtApnKOdbeN8ITfnnYqfdHS0z7GE+4l8EXlfLnr70Rp/9xicBO6d2rU+V/B3JujDw2gPWxYKEnEeh0CGCw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-stately/utils@3.10.5':
resolution: {integrity: sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@react-types/shared@3.27.0':
resolution: {integrity: sha512-gvznmLhi6JPEf0bsq7SwRYTHAKKq/wcmKqFez9sRdbED+SPMUmK5omfZ6w3EwUFQHbYUa4zPBYedQ7Knv70RMw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1
'@resvg/resvg-js-android-arm-eabi@2.6.2':
resolution: {integrity: sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==}
engines: {node: '>= 10'}
@@ -1682,8 +1725,8 @@ packages:
'@swc/helpers@0.5.13':
resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==}
'@swc/helpers@0.5.5':
resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==}
'@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
'@tabler/icons-react@3.21.0':
resolution: {integrity: sha512-Qq0GnZzzccbv/zuMyXAUUPlogNAqx9KsF8cr/ev3bxs+GMObqNEjXv1eZl9GFzxyQTS435siJNU8A1BaIYhX8g==}
@@ -2447,9 +2490,6 @@ packages:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
gray-matter@4.0.3:
resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
engines: {node: '>=6.0'}
@@ -2981,19 +3021,15 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
negotiator@0.6.3:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
engines: {node: '>= 0.6'}
negotiator@1.0.0:
resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
engines: {node: '>= 0.6'}
next-intl@3.19.0:
resolution: {integrity: sha512-ciiHYBwR3ztoMdJZgFmt0LII7GYTsLA/MFt3y681q4Lw4fI5EYNCZSYb9XA/BIt3ZX5S1TLUP1uOERy1dIQvMg==}
next-intl@3.26.5:
resolution: {integrity: sha512-EQlCIfY0jOhRldiFxwSXG+ImwkQtDEfQeSOEQp6ieAGSLWGlgjdb/Ck/O7wMfC430ZHGeUKVKax8KGusTPKCgg==}
peerDependencies:
next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0
react: ^16.8.0 || ^17.0.0 || ^18.0.0
next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
next-themes@0.4.3:
resolution: {integrity: sha512-nG84VPkTdUHR2YeD89YchvV4I9RbiMAql3GiLEQlPvq1ioaqPaIReK+yMRdg/zgiXws620qS1rU30TiWmmG9lA==}
@@ -3001,24 +3037,6 @@ packages:
react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
next@14.2.2:
resolution: {integrity: sha512-oGwUaa2bCs47FbuxWMpOoXtBMPYpvTPgdZr3UAo+pu7Ns00z9otmYpoeV1HEiYL06AlRQQIA/ypK526KjJfaxg==}
engines: {node: '>=18.17.0'}
hasBin: true
peerDependencies:
'@opentelemetry/api': ^1.1.0
'@playwright/test': ^1.41.2
react: ^18.2.0
react-dom: ^18.2.0
sass: ^1.3.0
peerDependenciesMeta:
'@opentelemetry/api':
optional: true
'@playwright/test':
optional: true
sass:
optional: true
next@15.0.3:
resolution: {integrity: sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
@@ -3040,6 +3058,27 @@ packages:
sass:
optional: true
next@15.2.0:
resolution: {integrity: sha512-VaiM7sZYX8KIAHBrRGSFytKknkrexNfGb8GlG6e93JqueCspuGte8i4ybn8z4ww1x3f2uzY4YpTaBEW4/hvsoQ==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true
peerDependencies:
'@opentelemetry/api': ^1.1.0
'@playwright/test': ^1.41.2
babel-plugin-react-compiler: '*'
react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
sass: ^1.3.0
peerDependenciesMeta:
'@opentelemetry/api':
optional: true
'@playwright/test':
optional: true
babel-plugin-react-compiler:
optional: true
sass:
optional: true
node-releases@2.0.18:
resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
@@ -3568,19 +3607,6 @@ packages:
style-to-object@1.0.6:
resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==}
styled-jsx@5.1.1:
resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
engines: {node: '>= 12.0.0'}
peerDependencies:
'@babel/core': '*'
babel-plugin-macros: '*'
react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
peerDependenciesMeta:
'@babel/core':
optional: true
babel-plugin-macros:
optional: true
styled-jsx@5.1.6:
resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
engines: {node: '>= 12.0.0'}
@@ -3607,6 +3633,9 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
tabbable@6.2.0:
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
tailwind-merge@2.4.0:
resolution: {integrity: sha512-49AwoOQNKdqKPd9CViyH5wJoSKsCDjUlzL8DxuGp3P1FsGY36NJDAa18jLZcaHAUUuTj+JB8IAo8zWgBNvBF7A==}
@@ -3661,6 +3690,9 @@ packages:
tslib@2.6.3:
resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
tsx@4.19.2:
resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==}
engines: {node: '>=18.0.0'}
@@ -3738,10 +3770,10 @@ packages:
'@types/react':
optional: true
use-intl@3.19.0:
resolution: {integrity: sha512-JOA73+YdtArxkvFKrneLAhH55m+x+sA9Wj8w8rYkHkHvcW/76w5T3szSmBG063vH3UqLoIKlsDVBBUfpkB7GMg==}
use-intl@3.26.5:
resolution: {integrity: sha512-OdsJnC/znPvHCHLQH/duvQNXnP1w0hPfS+tkSi3mAbfjYBGh4JnyfdwkQBfIVf7t8gs9eSX/CntxUMvtKdG2MQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
use-sidecar@1.1.2:
resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
@@ -4303,8 +4335,24 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
'@floating-ui/react-dom@2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@floating-ui/dom': 1.6.8
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
'@floating-ui/react@0.26.28(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@floating-ui/react-dom': 2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@floating-ui/utils': 0.2.9
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
tabbable: 6.2.0
'@floating-ui/utils@0.2.5': {}
'@floating-ui/utils@0.2.9': {}
'@formatjs/ecma402-abstract@2.0.0':
dependencies:
'@formatjs/intl-localematcher': 0.5.4
@@ -4339,10 +4387,12 @@ snapshots:
js-yaml: 4.1.0
prettier: 3.3.3
'@headlessui/react@1.7.19(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
'@headlessui/react@2.2.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@floating-ui/react': 0.26.28(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@react-aria/focus': 3.19.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@react-aria/interactions': 3.23.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@tanstack/react-virtual': 3.8.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
client-only: 0.0.1
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -4485,61 +4535,58 @@ snapshots:
'@mixmark-io/domino@2.2.0': {}
'@next/env@14.2.2': {}
'@next/env@15.0.3': {}
'@next/swc-darwin-arm64@14.2.2':
optional: true
'@next/env@15.2.0': {}
'@next/swc-darwin-arm64@15.0.3':
optional: true
'@next/swc-darwin-x64@14.2.2':
'@next/swc-darwin-arm64@15.2.0':
optional: true
'@next/swc-darwin-x64@15.0.3':
optional: true
'@next/swc-linux-arm64-gnu@14.2.2':
'@next/swc-darwin-x64@15.2.0':
optional: true
'@next/swc-linux-arm64-gnu@15.0.3':
optional: true
'@next/swc-linux-arm64-musl@14.2.2':
'@next/swc-linux-arm64-gnu@15.2.0':
optional: true
'@next/swc-linux-arm64-musl@15.0.3':
optional: true
'@next/swc-linux-x64-gnu@14.2.2':
'@next/swc-linux-arm64-musl@15.2.0':
optional: true
'@next/swc-linux-x64-gnu@15.0.3':
optional: true
'@next/swc-linux-x64-musl@14.2.2':
'@next/swc-linux-x64-gnu@15.2.0':
optional: true
'@next/swc-linux-x64-musl@15.0.3':
optional: true
'@next/swc-win32-arm64-msvc@14.2.2':
'@next/swc-linux-x64-musl@15.2.0':
optional: true
'@next/swc-win32-arm64-msvc@15.0.3':
optional: true
'@next/swc-win32-ia32-msvc@14.2.2':
optional: true
'@next/swc-win32-x64-msvc@14.2.2':
'@next/swc-win32-arm64-msvc@15.2.0':
optional: true
'@next/swc-win32-x64-msvc@15.0.3':
optional: true
'@next/swc-win32-x64-msvc@15.2.0':
optional: true
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -5311,6 +5358,49 @@ snapshots:
'@radix-ui/rect@1.1.0': {}
'@react-aria/focus@3.19.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@react-aria/interactions': 3.23.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@react-aria/utils': 3.27.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@react-types/shared': 3.27.0(react@18.2.0)
'@swc/helpers': 0.5.15
clsx: 2.1.1
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
'@react-aria/interactions@3.23.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@react-aria/ssr': 3.9.7(react@18.2.0)
'@react-aria/utils': 3.27.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@react-types/shared': 3.27.0(react@18.2.0)
'@swc/helpers': 0.5.15
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
'@react-aria/ssr@3.9.7(react@18.2.0)':
dependencies:
'@swc/helpers': 0.5.15
react: 18.2.0
'@react-aria/utils@3.27.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@react-aria/ssr': 3.9.7(react@18.2.0)
'@react-stately/utils': 3.10.5(react@18.2.0)
'@react-types/shared': 3.27.0(react@18.2.0)
'@swc/helpers': 0.5.15
clsx: 2.1.1
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
'@react-stately/utils@3.10.5(react@18.2.0)':
dependencies:
'@swc/helpers': 0.5.15
react: 18.2.0
'@react-types/shared@3.27.0(react@18.2.0)':
dependencies:
react: 18.2.0
'@resvg/resvg-js-android-arm-eabi@2.6.2':
optional: true
@@ -5409,10 +5499,9 @@ snapshots:
dependencies:
tslib: 2.6.3
'@swc/helpers@0.5.5':
'@swc/helpers@0.5.15':
dependencies:
'@swc/counter': 0.1.3
tslib: 2.6.3
tslib: 2.8.1
'@tabler/icons-react@3.21.0(react@18.2.0)':
dependencies:
@@ -6246,8 +6335,6 @@ snapshots:
gopd@1.2.0: {}
graceful-fs@4.2.11: {}
gray-matter@4.0.3:
dependencies:
js-yaml: 3.14.1
@@ -7077,48 +7164,21 @@ snapshots:
nanoid@3.3.7: {}
negotiator@0.6.3: {}
negotiator@1.0.0: {}
next-intl@3.19.0(next@14.2.2(@babel/core@7.26.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0):
next-intl@3.26.5(next@15.2.0(@babel/core@7.26.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0):
dependencies:
'@formatjs/intl-localematcher': 0.5.4
negotiator: 0.6.3
next: 14.2.2(@babel/core@7.26.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@formatjs/intl-localematcher': 0.5.7
negotiator: 1.0.0
next: 15.2.0(@babel/core@7.26.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
react: 18.2.0
use-intl: 3.19.0(react@18.2.0)
use-intl: 3.26.5(react@18.2.0)
next-themes@0.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
next@14.2.2(@babel/core@7.26.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
dependencies:
'@next/env': 14.2.2
'@swc/helpers': 0.5.5
busboy: 1.6.0
caniuse-lite: 1.0.30001643
graceful-fs: 4.2.11
postcss: 8.4.31
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
styled-jsx: 5.1.1(@babel/core@7.26.9)(react@18.2.0)
optionalDependencies:
'@next/swc-darwin-arm64': 14.2.2
'@next/swc-darwin-x64': 14.2.2
'@next/swc-linux-arm64-gnu': 14.2.2
'@next/swc-linux-arm64-musl': 14.2.2
'@next/swc-linux-x64-gnu': 14.2.2
'@next/swc-linux-x64-musl': 14.2.2
'@next/swc-win32-arm64-msvc': 14.2.2
'@next/swc-win32-ia32-msvc': 14.2.2
'@next/swc-win32-x64-msvc': 14.2.2
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
next@15.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@next/env': 15.0.3
@@ -7144,6 +7204,31 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
next@15.2.0(@babel/core@7.26.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
dependencies:
'@next/env': 15.2.0
'@swc/counter': 0.1.3
'@swc/helpers': 0.5.15
busboy: 1.6.0
caniuse-lite: 1.0.30001679
postcss: 8.4.31
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
styled-jsx: 5.1.6(@babel/core@7.26.9)(react@18.2.0)
optionalDependencies:
'@next/swc-darwin-arm64': 15.2.0
'@next/swc-darwin-x64': 15.2.0
'@next/swc-linux-arm64-gnu': 15.2.0
'@next/swc-linux-arm64-musl': 15.2.0
'@next/swc-linux-x64-gnu': 15.2.0
'@next/swc-linux-x64-musl': 15.2.0
'@next/swc-win32-arm64-msvc': 15.2.0
'@next/swc-win32-x64-msvc': 15.2.0
sharp: 0.33.5
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
node-releases@2.0.18: {}
normalize-path@3.0.0: {}
@@ -7714,7 +7799,7 @@ snapshots:
dependencies:
inline-style-parser: 0.2.3
styled-jsx@5.1.1(@babel/core@7.26.9)(react@18.2.0):
styled-jsx@5.1.6(@babel/core@7.26.9)(react@18.2.0):
dependencies:
client-only: 0.0.1
react: 18.2.0
@@ -7742,6 +7827,8 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
tabbable@6.2.0: {}
tailwind-merge@2.4.0: {}
tailwind-merge@2.5.4: {}
@@ -7830,6 +7917,8 @@ snapshots:
tslib@2.6.3: {}
tslib@2.8.1: {}
tsx@4.19.2:
dependencies:
esbuild: 0.23.1
@@ -7924,7 +8013,7 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
use-intl@3.19.0(react@18.2.0):
use-intl@3.26.5(react@18.2.0):
dependencies:
'@formatjs/fast-memoize': 2.2.0
intl-messageformat: 10.5.14