From 9d8df9986eff66ce434ea99f031e3abd8a369f83 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 2 Mar 2025 18:50:34 -0600 Subject: [PATCH] chore: upgrade Next.js, next-intl, and Headless UI to latest versions --- apps/website/README.md | 8 + .../website/app/[locale]/blog/[slug]/page.tsx | 37 +- apps/website/app/[locale]/blog/page.tsx | 11 +- apps/website/app/[locale]/layout.tsx | 3 + apps/website/app/[locale]/not-found.tsx | 5 - apps/website/app/[locale]/page.tsx | 5 +- apps/website/components/SlimLayout.tsx | 10 +- .../website/components/secondary-features.tsx | 2 - apps/website/i18n/request.tsx | 9 +- apps/website/package.json | 6 +- pnpm-lock.yaml | 383 +++++++++++------- 11 files changed, 295 insertions(+), 184 deletions(-) delete mode 100644 apps/website/app/[locale]/not-found.tsx diff --git a/apps/website/README.md b/apps/website/README.md index 5756291..693a4a8 100644 --- a/apps/website/README.md +++ b/apps/website/README.md @@ -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="" +``` \ No newline at end of file diff --git a/apps/website/app/[locale]/blog/[slug]/page.tsx b/apps/website/app/[locale]/blog/[slug]/page.tsx index 63a7c74..d9b8618 100644 --- a/apps/website/app/[locale]/blog/[slug]/page.tsx +++ b/apps/website/app/[locale]/blog/[slug]/page.tsx @@ -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 { - 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) {
); } 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 = { h1: ({ node, ...props }) => ( -

+

), h2: ({ node, ...props }) => (

@@ -230,7 +239,7 @@ export default async function BlogPostPage({ params }: Props) { ), code: ({ inline, className, children, ...props }: CodeProps) => { @@ -245,7 +254,7 @@ export default async function BlogPostPage({ params }: Props) { }; return ( -
+
-

{post.title}

+

+ {post.title} +

{post.primary_author?.profile_image && (
diff --git a/apps/website/app/[locale]/blog/page.tsx b/apps/website/app/[locale]/blog/page.tsx index 498120d..091a27b 100644 --- a/apps/website/app/[locale]/blog/page.tsx +++ b/apps/website/app/[locale]/blog/page.tsx @@ -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 = diff --git a/apps/website/app/[locale]/layout.tsx b/apps/website/app/[locale]/layout.tsx index 212861a..8a7729e 100644 --- a/apps/website/app/[locale]/layout.tsx +++ b/apps/website/app/[locale]/layout.tsx @@ -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 (
diff --git a/apps/website/app/[locale]/not-found.tsx b/apps/website/app/[locale]/not-found.tsx deleted file mode 100644 index fa38b6a..0000000 --- a/apps/website/app/[locale]/not-found.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { SlimLayout } from "@/components/SlimLayout"; - -export default function NotFound() { - return ; -} diff --git a/apps/website/app/[locale]/page.tsx b/apps/website/app/[locale]/page.tsx index 37c0216..c7d65a2 100644 --- a/apps/website/app/[locale]/page.tsx +++ b/apps/website/app/[locale]/page.tsx @@ -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 (
diff --git a/apps/website/components/SlimLayout.tsx b/apps/website/components/SlimLayout.tsx index 9c93ed9..93639a0 100644 --- a/apps/website/components/SlimLayout.tsx +++ b/apps/website/components/SlimLayout.tsx @@ -1,20 +1,18 @@ import { Link } from "@/i18n/routing"; -import { useTranslations } from "next-intl"; export function SlimLayout() { - const t = useTranslations("404"); return ( <>

404

-

{t("title")}

+

Not found.

- {t("des")}{" "} + Go back to home - {t("action")} + Go back to home - p{" "} + .

diff --git a/apps/website/components/secondary-features.tsx b/apps/website/components/secondary-features.tsx index ca4db6a..b8979f4 100644 --- a/apps/website/components/secondary-features.tsx +++ b/apps/website/components/secondary-features.tsx @@ -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 = [ { diff --git a/apps/website/i18n/request.tsx b/apps/website/i18n/request.tsx index 943d952..47f595d 100644 --- a/apps/website/i18n/request.tsx +++ b/apps/website/i18n/request.tsx @@ -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, }; }); diff --git a/apps/website/package.json b/apps/website/package.json index f1750c1..fcb3829 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -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", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e3fee80..d0cd9c4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -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