From 998577a5cdb875d65b455888eee554f4e61ae072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albert=20Ma=C3=B1osa?= <26429103+albertms10@users.noreply.github.com> Date: Sat, 15 Mar 2025 02:09:00 +0100 Subject: [PATCH 01/13] =?UTF-8?q?feat(i18n):=20=F0=9F=8C=90=20tradueix=20l?= =?UTF-8?q?es=20rutes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bun.lock | 110 ++++++++---------- package.json | 23 ++-- src/app/(markdown)/layout.tsx | 9 -- .../(markdown)/associacions/associacions.mdx | 0 .../(markdown)/associacions/layout.tsx | 11 +- .../(markdown)/associacions/page.tsx | 11 +- .../(markdown)/avis-legal/avis-legal.mdx | 0 .../(markdown)/avis-legal/layout.tsx | 11 +- .../(markdown)/avis-legal/page.tsx | 9 +- .../(markdown)/bibliografia/bibliografia.mdx | 0 .../(markdown)/bibliografia/layout.tsx | 11 +- .../(markdown)/bibliografia/page.tsx | 9 +- .../{ => [locale]}/(markdown)/cicle/cicle.mdx | 0 .../(markdown)/cicle/layout.tsx | 11 +- .../{ => [locale]}/(markdown)/cicle/page.tsx | 9 +- .../(markdown)/formacio/formacio.mdx | 0 .../(markdown)/formacio/layout.tsx | 11 +- .../(markdown)/formacio/page.tsx | 9 +- .../{ => [locale]}/(markdown)/full/full.mdx | 0 .../{ => [locale]}/(markdown)/full/layout.tsx | 11 +- .../{ => [locale]}/(markdown)/full/page.tsx | 9 +- src/app/[locale]/(markdown)/layout.tsx | 14 +++ .../(markdown)/noticies/[slug]/layout.tsx | 10 +- .../(markdown)/noticies/[slug]/page.tsx | 18 ++- .../2022-02-18-finalitzacio-tubs-girona.mdx | 0 ...4-23-5e-aniversari-associacio-vendrell.mdx | 0 ...22-08-10-inauguracio-orgue-seu-manresa.mdx | 0 .../2022-10-15-nova-junta-directiva.mdx | 0 .../_posts/2023-02-01-carta-vanguardia.mdx | 0 .../2023-07-03-presentacio-43e-cicle.mdx | 0 .../2023-07-06-nou-orgue-a-cabrera-de-mar.mdx | 0 ...ue-a-santa-gueraula-de-les-espremulles.mdx | 0 .../(markdown)/noticies/layout.tsx | 11 +- .../(markdown)/noticies/noticies.mdx | 0 .../(markdown)/noticies/page.tsx | 16 ++- .../(markdown)/noticies/posts.ts | 5 +- .../[municipi]/[edifici]/[orgue]/layout.tsx | 12 +- .../[municipi]/[edifici]/[orgue]/page.tsx | 18 +-- .../[comarca]/[municipi]/[edifici]/layout.tsx | 12 +- .../[comarca]/[municipi]/[edifici]/page.tsx | 17 +-- .../[comarca]/[municipi]/layout.tsx | 10 +- .../[provincia]/[comarca]/[municipi]/page.tsx | 13 ++- .../orgues/[provincia]/[comarca]/layout.tsx | 10 +- .../orgues/[provincia]/[comarca]/page.tsx | 9 +- .../(markdown)/orgues/[provincia]/layout.tsx | 10 +- .../(markdown)/orgues/[provincia]/page.tsx | 9 +- .../(markdown)/orgues/layout.tsx | 12 +- .../(markdown)/orgues/orgueNavigation.ts | 0 .../(markdown)/orgues/orgues.mdx | 0 .../{ => [locale]}/(markdown)/orgues/page.tsx | 9 +- .../(markdown)/orgues/redirects.ts | 8 +- .../components/procedencia-dades.tsx | 0 .../politica-de-privacitat-socis/layout.tsx | 11 +- .../politica-de-privacitat-socis/page.tsx | 9 +- .../politica-de-privacitat-socis.mdx | 0 .../politica-de-privacitat/layout.tsx | 11 +- .../politica-de-privacitat/page.tsx | 9 +- .../politica-de-privacitat.mdx | 0 .../(markdown)/qui-som/layout.tsx | 11 +- .../(markdown)/qui-som/page.tsx | 9 +- .../(markdown)/qui-som/qui-som.mdx | 0 src/app/[locale]/[...rest]/page.tsx | 5 + src/app/[locale]/layout.tsx | 100 ++++++++++++++++ src/app/[locale]/not-found.tsx | 14 +++ src/app/{ => [locale]}/page.tsx | 13 ++- src/app/_actions/quick-search.ts | 7 +- src/app/error.tsx | 2 +- src/app/layout.tsx | 77 ++---------- src/app/not-found.tsx | 18 ++- src/app/robots.ts | 3 +- src/app/sitemap.ts | 9 +- src/components/article-card.tsx | 2 +- src/components/cookie/use-cookie.tsx | 8 +- src/components/footer.tsx | 16 ++- src/components/main-header.tsx | 8 +- src/components/navbar.tsx | 20 ++-- src/components/page-breadcrumb.tsx | 8 +- src/components/pipe-organ-card.tsx | 4 +- src/components/pipe-organ-hover-card.tsx | 4 +- src/components/search-bar.tsx | 4 +- src/components/ui/navigation-menu.tsx | 2 +- src/database/orgues-repository.ts | 2 +- src/i18n/request.ts | 9 +- src/i18n/routing.ts | 91 +++++++++++++++ src/lib/route.ts | 5 +- src/mdx-components.tsx | 2 +- src/messages/en.json | 97 +++++++++++++++ src/middleware.ts | 13 ++- 88 files changed, 744 insertions(+), 346 deletions(-) delete mode 100644 src/app/(markdown)/layout.tsx rename src/app/{ => [locale]}/(markdown)/associacions/associacions.mdx (100%) rename src/app/{ => [locale]}/(markdown)/associacions/layout.tsx (61%) rename src/app/{ => [locale]}/(markdown)/associacions/page.tsx (64%) rename src/app/{ => [locale]}/(markdown)/avis-legal/avis-legal.mdx (100%) rename src/app/{ => [locale]}/(markdown)/avis-legal/layout.tsx (62%) rename src/app/{ => [locale]}/(markdown)/avis-legal/page.tsx (70%) rename src/app/{ => [locale]}/(markdown)/bibliografia/bibliografia.mdx (100%) rename src/app/{ => [locale]}/(markdown)/bibliografia/layout.tsx (61%) rename src/app/{ => [locale]}/(markdown)/bibliografia/page.tsx (70%) rename src/app/{ => [locale]}/(markdown)/cicle/cicle.mdx (100%) rename src/app/{ => [locale]}/(markdown)/cicle/layout.tsx (62%) rename src/app/{ => [locale]}/(markdown)/cicle/page.tsx (69%) rename src/app/{ => [locale]}/(markdown)/formacio/formacio.mdx (100%) rename src/app/{ => [locale]}/(markdown)/formacio/layout.tsx (61%) rename src/app/{ => [locale]}/(markdown)/formacio/page.tsx (70%) rename src/app/{ => [locale]}/(markdown)/full/full.mdx (100%) rename src/app/{ => [locale]}/(markdown)/full/layout.tsx (62%) rename src/app/{ => [locale]}/(markdown)/full/page.tsx (69%) create mode 100644 src/app/[locale]/(markdown)/layout.tsx rename src/app/{ => [locale]}/(markdown)/noticies/[slug]/layout.tsx (73%) rename src/app/{ => [locale]}/(markdown)/noticies/[slug]/page.tsx (87%) rename src/app/{ => [locale]}/(markdown)/noticies/_posts/2022-02-18-finalitzacio-tubs-girona.mdx (100%) rename src/app/{ => [locale]}/(markdown)/noticies/_posts/2022-04-23-5e-aniversari-associacio-vendrell.mdx (100%) rename src/app/{ => [locale]}/(markdown)/noticies/_posts/2022-08-10-inauguracio-orgue-seu-manresa.mdx (100%) rename src/app/{ => [locale]}/(markdown)/noticies/_posts/2022-10-15-nova-junta-directiva.mdx (100%) rename src/app/{ => [locale]}/(markdown)/noticies/_posts/2023-02-01-carta-vanguardia.mdx (100%) rename src/app/{ => [locale]}/(markdown)/noticies/_posts/2023-07-03-presentacio-43e-cicle.mdx (100%) rename src/app/{ => [locale]}/(markdown)/noticies/_posts/2023-07-06-nou-orgue-a-cabrera-de-mar.mdx (100%) rename src/app/{ => [locale]}/(markdown)/noticies/_posts/2024-12-28-nou-orgue-a-santa-gueraula-de-les-espremulles.mdx (100%) rename src/app/{ => [locale]}/(markdown)/noticies/layout.tsx (61%) rename src/app/{ => [locale]}/(markdown)/noticies/noticies.mdx (100%) rename src/app/{ => [locale]}/(markdown)/noticies/page.tsx (68%) rename src/app/{ => [locale]}/(markdown)/noticies/posts.ts (92%) rename src/app/{ => [locale]}/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/layout.tsx (78%) rename src/app/{ => [locale]}/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/page.tsx (81%) rename src/app/{ => [locale]}/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/layout.tsx (79%) rename src/app/{ => [locale]}/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/page.tsx (81%) rename src/app/{ => [locale]}/(markdown)/orgues/[provincia]/[comarca]/[municipi]/layout.tsx (85%) rename src/app/{ => [locale]}/(markdown)/orgues/[provincia]/[comarca]/[municipi]/page.tsx (81%) rename src/app/{ => [locale]}/(markdown)/orgues/[provincia]/[comarca]/layout.tsx (83%) rename src/app/{ => [locale]}/(markdown)/orgues/[provincia]/[comarca]/page.tsx (71%) rename src/app/{ => [locale]}/(markdown)/orgues/[provincia]/layout.tsx (80%) rename src/app/{ => [locale]}/(markdown)/orgues/[provincia]/page.tsx (67%) rename src/app/{ => [locale]}/(markdown)/orgues/layout.tsx (54%) rename src/app/{ => [locale]}/(markdown)/orgues/orgueNavigation.ts (100%) rename src/app/{ => [locale]}/(markdown)/orgues/orgues.mdx (100%) rename src/app/{ => [locale]}/(markdown)/orgues/page.tsx (69%) rename src/app/{ => [locale]}/(markdown)/orgues/redirects.ts (95%) rename src/app/{ => [locale]}/(markdown)/politica-de-privacitat-socis/components/procedencia-dades.tsx (100%) rename src/app/{ => [locale]}/(markdown)/politica-de-privacitat-socis/layout.tsx (61%) rename src/app/{ => [locale]}/(markdown)/politica-de-privacitat-socis/page.tsx (72%) rename src/app/{ => [locale]}/(markdown)/politica-de-privacitat-socis/politica-de-privacitat-socis.mdx (100%) rename src/app/{ => [locale]}/(markdown)/politica-de-privacitat/layout.tsx (60%) rename src/app/{ => [locale]}/(markdown)/politica-de-privacitat/page.tsx (71%) rename src/app/{ => [locale]}/(markdown)/politica-de-privacitat/politica-de-privacitat.mdx (100%) rename src/app/{ => [locale]}/(markdown)/qui-som/layout.tsx (61%) rename src/app/{ => [locale]}/(markdown)/qui-som/page.tsx (69%) rename src/app/{ => [locale]}/(markdown)/qui-som/qui-som.mdx (100%) create mode 100644 src/app/[locale]/[...rest]/page.tsx create mode 100644 src/app/[locale]/layout.tsx create mode 100644 src/app/[locale]/not-found.tsx rename src/app/{ => [locale]}/page.tsx (91%) create mode 100644 src/i18n/routing.ts create mode 100644 src/messages/en.json diff --git a/bun.lock b/bun.lock index 2e3c7ef..8b2d678 100644 --- a/bun.lock +++ b/bun.lock @@ -5,7 +5,7 @@ "dependencies": { "@mdx-js/loader": "^3.1.0", "@mdx-js/react": "^3.1.0", - "@next/mdx": "^15.2.1", + "@next/mdx": "^15.2.2", "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-dropdown-menu": "^2.1.6", "@radix-ui/react-hover-card": "^1.1.6", @@ -17,14 +17,14 @@ "@vercel/speed-insights": "^1.2.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "cmdk": "^1.0.4", + "cmdk": "^1.1.1", "embla-carousel-autoplay": "^8.5.2", "embla-carousel-fade": "^8.5.2", "embla-carousel-react": "^8.5.2", - "lucide-react": "^0.479.0", - "next": "15.2.1", - "next-intl": "^3.26.5", - "next-themes": "^0.4.4", + "lucide-react": "^0.482.0", + "next": "15.2.2", + "next-intl": "^4.0.2", + "next-themes": "^0.4.6", "react": "^19.0.0", "react-dom": "^19.0.0", "react-scrollspy-navigation": "^2.0.6", @@ -38,18 +38,18 @@ "vaul": "^1.1.2", }, "devDependencies": { - "@tailwindcss/postcss": "^4.0.12", + "@tailwindcss/postcss": "^4.0.14", "@tailwindcss/typography": "^0.5.16", - "@types/bun": "^1.2.4", + "@types/bun": "^1.2.5", "@types/node": "^22.13.10", "@types/react": "^19.0.10", "@types/react-dom": "^19.0.4", "eslint": "^9.22.0", - "eslint-config-next": "15.2.1", + "eslint-config-next": "15.2.2", "postcss": "^8.5.3", "prettier": "^3.5.3", "schema-dts": "^1.1.5", - "tailwindcss": "^4.0.12", + "tailwindcss": "^4.0.14", "typescript": "^5.8.2", }, }, @@ -147,27 +147,27 @@ "@mdx-js/react": ["@mdx-js/react@3.1.0", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ=="], - "@next/env": ["@next/env@15.2.1", "", {}, "sha512-JmY0qvnPuS2NCWOz2bbby3Pe0VzdAQ7XpEB6uLIHmtXNfAsAO0KLQLkuAoc42Bxbo3/jMC3dcn9cdf+piCcG2Q=="], + "@next/env": ["@next/env@15.2.2", "", {}, "sha512-yWgopCfA9XDR8ZH3taB5nRKtKJ1Q5fYsTOuYkzIIoS8TJ0UAUKAGF73JnGszbjk2ufAQDj6mDdgsJAFx5CLtYQ=="], - "@next/eslint-plugin-next": ["@next/eslint-plugin-next@15.2.1", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-6ppeToFd02z38SllzWxayLxjjNfzvc7Wm07gQOKSLjyASvKcXjNStZrLXMHuaWkhjqxe+cnhb2uzfWXm1VEj/Q=="], + "@next/eslint-plugin-next": ["@next/eslint-plugin-next@15.2.2", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-1+BzokFuFQIfLaRxUKf2u5In4xhPV7tUgKcK53ywvFl6+LXHWHpFkcV7VNeKlyQKUotwiq4fy/aDNF9EiUp4RQ=="], - "@next/mdx": ["@next/mdx@15.2.1", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-C03Xzo05o0GxASwtFLKWBDZht0ez3C/fZATMfVIfEg/TcWqa/ND6UTgyor7LFdrNvvaGjCRCFnEwYzF/l6PuHA=="], + "@next/mdx": ["@next/mdx@15.2.2", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-2Pv/+MjzBxpctrL84BuS7pjlV4tNiV1VUrdBgaXmdXXNEjrgo1WrmlUkQpV7zQdyzE5NBrAtdlQqzU6Hyr2E3A=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.2.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-aWXT+5KEREoy3K5AKtiKwioeblmOvFFjd+F3dVleLvvLiQ/mD//jOOuUcx5hzcO9ISSw4lrqtUPntTpK32uXXQ=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.2.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HNBRnz+bkZ+KfyOExpUxTMR0Ow8nkkcE6IlsdEa9W/rI7gefud19+Sn1xYKwB9pdCdxIP1lPru/ZfjfA+iT8pw=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@15.2.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-E/w8ervu4fcG5SkLhvn1NE/2POuDCDEy5gFbfhmnYXkyONZR68qbUlJlZwuN82o7BrBVAw+tkR8nTIjGiMW1jQ=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@15.2.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-mJOUwp7al63tDpLpEFpKwwg5jwvtL1lhRW2fI1Aog0nYCPAhxbJsaZKdoVyPZCy8MYf/iQVNDuk/+i29iLCzIA=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@15.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-gXDX5lIboebbjhiMT6kFgu4svQyjoSed6dHyjx5uZsjlvTwOAnZpn13w9XDaIMFFHw7K8CpBK7HfDKw0VZvUXQ=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@15.2.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-5ZZ0Zwy3SgMr7MfWtRE7cQWVssfOvxYfD9O7XHM7KM4nrf5EOeqwq67ZXDgo86LVmffgsu5tPO57EeFKRnrfSQ=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@15.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-3v0pF/adKZkBWfUffmB/ROa+QcNTrnmYG4/SS+r52HPwAK479XcWoES2I+7F7lcbqc7mTeVXrIvb4h6rR/iDKg=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@15.2.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-cgKWBuFMLlJ4TWcFHl1KOaVVUAF8vy4qEvX5KsNd0Yj5mhu989QFCq1WjuaEbv/tO1ZpsQI6h/0YR8bLwEi+nA=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@15.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-RbsVq2iB6KFJRZ2cHrU67jLVLKeuOIhnQB05ygu5fCNgg8oTewxweJE8XlLV+Ii6Y6u4EHwETdUiRNXIAfpBww=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@15.2.2", "", { "os": "linux", "cpu": "x64" }, "sha512-c3kWSOSsVL8rcNBBfOq1+/j2PKs2nsMwJUV4icUxRgGBwUOfppeh7YhN5s79enBQFU+8xRgVatFkhHU1QW7yUA=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@15.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-QHsMLAyAIu6/fWjHmkN/F78EFPKmhQlyX5C8pRIS2RwVA7z+t9cTb0IaYWC3EHLOTjsU7MNQW+n2xGXr11QPpg=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@15.2.2", "", { "os": "linux", "cpu": "x64" }, "sha512-PXTW9PLTxdNlVYgPJ0equojcq1kNu5NtwcNjRjHAB+/sdoKZ+X8FBu70fdJFadkxFIGekQTyRvPMFF+SOJaQjw=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@15.2.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-Gk42XZXo1cE89i3hPLa/9KZ8OuupTjkDmhLaMKFohjf9brOeZVEa3BQy1J9s9TWUqPhgAEbwv6B2+ciGfe54Vw=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@15.2.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-nG644Es5llSGEcTaXhnGWR/aThM/hIaz0jx4MDg4gWC8GfTCp8eDBWZ77CVuv2ha/uL9Ce+nPTfYkSLG67/sHg=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.2.1", "", { "os": "win32", "cpu": "x64" }, "sha512-YjqXCl8QGhVlMR8uBftWk0iTmvtntr41PhG1kvzGp0sUP/5ehTM+cwx25hKE54J0CRnHYjSGjSH3gkHEaHIN9g=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@15.2.2", "", { "os": "win32", "cpu": "x64" }, "sha512-52nWy65S/R6/kejz3jpvHAjZDPKIbEQu4x9jDBzmB9jJfuOy5rspjKu4u77+fI4M/WzLXrrQd57hlFGzz1ubcQ=="], "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], @@ -245,43 +245,45 @@ "@rushstack/eslint-patch": ["@rushstack/eslint-patch@1.10.4", "", {}, "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA=="], + "@schummar/icu-type-parser": ["@schummar/icu-type-parser@1.21.5", "", {}, "sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw=="], + "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], "@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="], - "@tailwindcss/node": ["@tailwindcss/node@4.0.12", "", { "dependencies": { "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "tailwindcss": "4.0.12" } }, "sha512-a6J11K1Ztdln9OrGfoM75/hChYPcHYGNYimqciMrvKXRmmPaS8XZTHhdvb5a3glz4Kd4ZxE1MnuFE2c0fGGmtg=="], + "@tailwindcss/node": ["@tailwindcss/node@4.0.14", "", { "dependencies": { "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", "tailwindcss": "4.0.14" } }, "sha512-Ux9NbFkKWYE4rfUFz6M5JFLs/GEYP6ysxT8uSyPn6aTbh2K3xDE1zz++eVK4Vwx799fzMF8CID9sdHn4j/Ab8w=="], - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.0.12", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.0.12", "@tailwindcss/oxide-darwin-arm64": "4.0.12", "@tailwindcss/oxide-darwin-x64": "4.0.12", "@tailwindcss/oxide-freebsd-x64": "4.0.12", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.12", "@tailwindcss/oxide-linux-arm64-gnu": "4.0.12", "@tailwindcss/oxide-linux-arm64-musl": "4.0.12", "@tailwindcss/oxide-linux-x64-gnu": "4.0.12", "@tailwindcss/oxide-linux-x64-musl": "4.0.12", "@tailwindcss/oxide-win32-arm64-msvc": "4.0.12", "@tailwindcss/oxide-win32-x64-msvc": "4.0.12" } }, "sha512-DWb+myvJB9xJwelwT9GHaMc1qJj6MDXRDR0CS+T8IdkejAtu8ctJAgV4r1drQJLPeS7mNwq2UHW2GWrudTf63A=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.0.14", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.0.14", "@tailwindcss/oxide-darwin-arm64": "4.0.14", "@tailwindcss/oxide-darwin-x64": "4.0.14", "@tailwindcss/oxide-freebsd-x64": "4.0.14", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.14", "@tailwindcss/oxide-linux-arm64-gnu": "4.0.14", "@tailwindcss/oxide-linux-arm64-musl": "4.0.14", "@tailwindcss/oxide-linux-x64-gnu": "4.0.14", "@tailwindcss/oxide-linux-x64-musl": "4.0.14", "@tailwindcss/oxide-win32-arm64-msvc": "4.0.14", "@tailwindcss/oxide-win32-x64-msvc": "4.0.14" } }, "sha512-M8VCNyO/NBi5vJ2cRcI9u8w7Si+i76a7o1vveoGtbbjpEYJZYiyc7f2VGps/DqawO56l3tImIbq2OT/533jcrA=="], - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.0.12", "", { "os": "android", "cpu": "arm64" }, "sha512-dAXCaemu3mHLXcA5GwGlQynX8n7tTdvn5i1zAxRvZ5iC9fWLl5bGnjZnzrQqT7ttxCvRwdVf3IHUnMVdDBO/kQ=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.0.14", "", { "os": "android", "cpu": "arm64" }, "sha512-VBFKC2rFyfJ5J8lRwjy6ub3rgpY186kAcYgiUr8ArR8BAZzMruyeKJ6mlsD22Zp5ZLcPW/FXMasJiJBx0WsdQg=="], - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.0.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-vPNI+TpJQ7sizselDXIJdYkx9Cu6JBdtmRWujw9pVIxW8uz3O2PjgGGzL/7A0sXI8XDjSyRChrUnEW9rQygmJQ=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.0.14", "", { "os": "darwin", "cpu": "arm64" }, "sha512-U3XOwLrefGr2YQZ9DXasDSNWGPZBCh8F62+AExBEDMLDfvLLgI/HDzY8Oq8p/JtqkAY38sWPOaNnRwEGKU5Zmg=="], - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.0.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-RL/9jM41Fdq4Efr35C5wgLx98BirnrfwuD+zgMFK6Ir68HeOSqBhW9jsEeC7Y/JcGyPd3MEoJVIU4fAb7YLg7A=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.0.14", "", { "os": "darwin", "cpu": "x64" }, "sha512-V5AjFuc3ndWGnOi1d379UsODb0TzAS2DYIP/lwEbfvafUaD2aNZIcbwJtYu2DQqO2+s/XBvDVA+w4yUyaewRwg=="], - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.0.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-7WzWiax+LguJcMEimY0Q4sBLlFXu1tYxVka3+G2M9KmU/3m84J3jAIV4KZWnockbHsbb2XgrEjtlJKVwHQCoRA=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.0.14", "", { "os": "freebsd", "cpu": "x64" }, "sha512-tXvtxbaZfcPfqBwW3f53lTcyH6EDT+1eT7yabwcfcxTs+8yTPqxsDUhrqe9MrnEzpNkd+R/QAjJapfd4tjWdLg=="], - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.0.12", "", { "os": "linux", "cpu": "arm" }, "sha512-X9LRC7jjE1QlfIaBbXjY0PGeQP87lz5mEfLSVs2J1yRc9PSg1tEPS9NBqY4BU9v5toZgJgzKeaNltORyTs22TQ=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.0.14", "", { "os": "linux", "cpu": "arm" }, "sha512-cSeLNWWqIWeSTmBntQvyY2/2gcLX8rkPFfDDTQVF8qbRcRMVPLxBvFVJyfSAYRNch6ZyVH2GI6dtgALOBDpdNA=="], - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.0.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-i24IFNq2402zfDdoWKypXz0ZNS2G4NKaA82tgBlE2OhHIE+4mg2JDb5wVfyP6R+MCm5grgXvurcIcKWvo44QiQ=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.0.14", "", { "os": "linux", "cpu": "arm64" }, "sha512-bwDWLBalXFMDItcSXzFk6y7QKvj6oFlaY9vM+agTlwFL1n1OhDHYLZkSjaYsh6KCeG0VB0r7H8PUJVOM1LRZyg=="], - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.0.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-LmOdshJBfAGIBG0DdBWhI0n5LTMurnGGJCHcsm9F//ISfsHtCnnYIKgYQui5oOz1SUCkqsMGfkAzWyNKZqbGNw=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.0.14", "", { "os": "linux", "cpu": "arm64" }, "sha512-gVkJdnR/L6iIcGYXx64HGJRmlme2FGr/aZH0W6u4A3RgPMAb+6ELRLi+UBiH83RXBm9vwCfkIC/q8T51h8vUJQ=="], - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.0.12", "", { "os": "linux", "cpu": "x64" }, "sha512-OSK667qZRH30ep8RiHbZDQfqkXjnzKxdn0oRwWzgCO8CoTxV+MvIkd0BWdQbYtYuM1wrakARV/Hwp0eA/qzdbw=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.0.14", "", { "os": "linux", "cpu": "x64" }, "sha512-EE+EQ+c6tTpzsg+LGO1uuusjXxYx0Q00JE5ubcIGfsogSKth8n8i2BcS2wYTQe4jXGs+BQs35l78BIPzgwLddw=="], - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.0.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uylhWq6OWQ8krV8Jk+v0H/3AZKJW6xYMgNMyNnUbbYXWi7hIVdxRKNUB5UvrlC3RxtgsK5EAV2i1CWTRsNcAnA=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.0.14", "", { "os": "linux", "cpu": "x64" }, "sha512-KCCOzo+L6XPT0oUp2Jwh233ETRQ/F6cwUnMnR0FvMUCbkDAzHbcyOgpfuAtRa5HD0WbTbH4pVD+S0pn1EhNfbw=="], - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.0.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-XDLnhMoXZEEOir1LK43/gHHwK84V1GlV8+pAncUAIN2wloeD+nNciI9WRIY/BeFTqES22DhTIGoilSO39xDb2g=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.0.14", "", { "os": "win32", "cpu": "arm64" }, "sha512-AHObFiFL9lNYcm3tZSPqa/cHGpM5wOrNmM2uOMoKppp+0Hom5uuyRh0QkOp7jftsHZdrZUpmoz0Mp6vhh2XtUg=="], - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.0.12", "", { "os": "win32", "cpu": "x64" }, "sha512-I/BbjCLpKDQucvtn6rFuYLst1nfFwSMYyPzkx/095RE+tuzk5+fwXuzQh7T3fIBTcbn82qH/sFka7yPGA50tLw=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.0.14", "", { "os": "win32", "cpu": "x64" }, "sha512-rNXXMDJfCJLw/ZaFTOLOHoGULxyXfh2iXTGiChFiYTSgKBKQHIGEpV0yn5N25WGzJJ+VBnRjHzlmDqRV+d//oQ=="], - "@tailwindcss/postcss": ["@tailwindcss/postcss@4.0.12", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.0.12", "@tailwindcss/oxide": "4.0.12", "lightningcss": "^1.29.1", "postcss": "^8.4.41", "tailwindcss": "4.0.12" } }, "sha512-r59Sdr8djCW4dL3kvc4aWU8PHdUAVM3O3te2nbYzXsWwKLlHPCuUoZAc9FafXb/YyNDZOMI7sTbKTKFmwOrMjw=="], + "@tailwindcss/postcss": ["@tailwindcss/postcss@4.0.14", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.0.14", "@tailwindcss/oxide": "4.0.14", "lightningcss": "1.29.2", "postcss": "^8.4.41", "tailwindcss": "4.0.14" } }, "sha512-+uIR6KtKhla1XeIanF27KtrfYy+PX+R679v5LxbkmEZlhQe3g8rk+wKj7Xgt++rWGRuFLGMXY80Ek8JNn+kN/g=="], "@tailwindcss/typography": ["@tailwindcss/typography@0.5.16", "", { "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" } }, "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA=="], "@types/acorn": ["@types/acorn@4.0.6", "", { "dependencies": { "@types/estree": "*" } }, "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ=="], - "@types/bun": ["@types/bun@1.2.4", "", { "dependencies": { "bun-types": "1.2.4" } }, "sha512-QtuV5OMR8/rdKJs213iwXDpfVvnskPXY/S0ZiFbsTjQZycuqPbMW8Gf/XhLfwE5njW8sxI2WjISURXPlHypMFA=="], + "@types/bun": ["@types/bun@1.2.5", "", { "dependencies": { "bun-types": "1.2.5" } }, "sha512-w2OZTzrZTVtbnJew1pdFmgV99H0/L+Pvw+z1P67HaR18MHOzYnTYOi6qzErhK8HyT+DB782ADVPPE92Xu2/Opg=="], "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], @@ -379,7 +381,7 @@ "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - "bun-types": ["bun-types@1.2.4", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-nDPymR207ZZEoWD4AavvEaa/KZe/qlrbMSchqpQwovPZCKc7pwMoENjEtHgMKaAjJhy+x6vfqSBA1QU3bJgs0Q=="], + "bun-types": ["bun-types@1.2.5", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-3oO6LVGGRRKI4kHINx5PIdIgnLRb7l/SprhzqXapmoYkFl5m4j6EvALvbDVuuBFaamB46Ap6HCUxIXNLCGy+tg=="], "busboy": ["busboy@1.6.0", "", { "dependencies": { "streamsearch": "^1.1.0" } }, "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA=="], @@ -411,7 +413,7 @@ "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], - "cmdk": ["cmdk@1.0.4", "", { "dependencies": { "@radix-ui/react-dialog": "^1.1.2", "@radix-ui/react-id": "^1.1.0", "@radix-ui/react-primitive": "^2.0.0", "use-sync-external-store": "^1.2.2" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-AnsjfHyHpQ/EFeAnG216WY7A5LiYCoZzCSygiLvfXC3H3LFGCprErteUcszaVluGOhuOTbJS3jWHrSDYPBBygg=="], + "cmdk": ["cmdk@1.1.1", "", { "dependencies": { "@radix-ui/react-compose-refs": "^1.1.1", "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-id": "^1.1.0", "@radix-ui/react-primitive": "^2.0.2" }, "peerDependencies": { "react": "^18 || ^19 || ^19.0.0-rc", "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg=="], "collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="], @@ -503,7 +505,7 @@ "eslint": ["eslint@9.22.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.19.2", "@eslint/config-helpers": "^0.1.0", "@eslint/core": "^0.12.0", "@eslint/eslintrc": "^3.3.0", "@eslint/js": "9.22.0", "@eslint/plugin-kit": "^0.2.7", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.3.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ=="], - "eslint-config-next": ["eslint-config-next@15.2.1", "", { "dependencies": { "@next/eslint-plugin-next": "15.2.1", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.0.0" }, "peerDependencies": { "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-mhsprz7l0no8X+PdDnVHF4dZKu9YBJp2Rf6ztWbXBLJ4h6gxmW//owbbGJMBVUU+PibGJDAqZhW4pt8SC8HSow=="], + "eslint-config-next": ["eslint-config-next@15.2.2", "", { "dependencies": { "@next/eslint-plugin-next": "15.2.2", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.0.0" }, "peerDependencies": { "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-g34RI7RFS4HybYFwGa/okj+8WZM+/fy+pEM+aqRQoVvM4gQhKrd4wIEddKmlZfWD75j8LTwB5zwkmNv3DceH1A=="], "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], @@ -767,7 +769,7 @@ "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - "lucide-react": ["lucide-react@0.479.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-aBhNnveRhorBOK7uA4gDjgaf+YlHMdMhQ/3cupk6exM10hWlEU+2QtWYOfhXhjAsmdb6LeKR+NZnow4UxRRiTQ=="], + "lucide-react": ["lucide-react@0.482.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-XM8PzHzSrg8ATmmO+fzf+JyYlVVdQnJjuyLDj2p4V2zEtcKeBNAqAoJIGFv1x2HSBa7kT8gpYUxwdQ0g7nypfw=="], "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], @@ -897,11 +899,11 @@ "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "next": ["next@15.2.1", "", { "dependencies": { "@next/env": "15.2.1", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.15", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.2.1", "@next/swc-darwin-x64": "15.2.1", "@next/swc-linux-arm64-gnu": "15.2.1", "@next/swc-linux-arm64-musl": "15.2.1", "@next/swc-linux-x64-gnu": "15.2.1", "@next/swc-linux-x64-musl": "15.2.1", "@next/swc-win32-arm64-msvc": "15.2.1", "@next/swc-win32-x64-msvc": "15.2.1", "sharp": "^0.33.5" }, "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" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-zxbsdQv3OqWXybK5tMkPCBKyhIz63RstJ+NvlfkaLMc/m5MwXgz2e92k+hSKcyBpyADhMk2C31RIiaDjUZae7g=="], + "next": ["next@15.2.2", "", { "dependencies": { "@next/env": "15.2.2", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.15", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.2.2", "@next/swc-darwin-x64": "15.2.2", "@next/swc-linux-arm64-gnu": "15.2.2", "@next/swc-linux-arm64-musl": "15.2.2", "@next/swc-linux-x64-gnu": "15.2.2", "@next/swc-linux-x64-musl": "15.2.2", "@next/swc-win32-arm64-msvc": "15.2.2", "@next/swc-win32-x64-msvc": "15.2.2", "sharp": "^0.33.5" }, "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" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-dgp8Kcx5XZRjMw2KNwBtUzhngRaURPioxoNIVl5BOyJbhi9CUgEtKDO7fx5wh8Z8vOVX1nYZ9meawJoRrlASYA=="], - "next-intl": ["next-intl@3.26.5", "", { "dependencies": { "@formatjs/intl-localematcher": "^0.5.4", "negotiator": "^1.0.0", "use-intl": "^3.26.5" }, "peerDependencies": { "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" } }, "sha512-EQlCIfY0jOhRldiFxwSXG+ImwkQtDEfQeSOEQp6ieAGSLWGlgjdb/Ck/O7wMfC430ZHGeUKVKax8KGusTPKCgg=="], + "next-intl": ["next-intl@4.0.2", "", { "dependencies": { "@formatjs/intl-localematcher": "^0.5.4", "negotiator": "^1.0.0", "use-intl": "^4.0.2" }, "peerDependencies": { "next": "^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", "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-3cKVflwdrqxCOvAL+DtGN68qR802i0PEj0dttkAD5IK5XxOjugQs4yU8aSakvPMbkOrhEJ+89z5lG2EAqi7Gkw=="], - "next-themes": ["next-themes@0.4.4", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-LDQ2qIOJF0VnuVrrMSMLrWGjRMkq+0mpgl6e0juCLqdJ+oo8Q84JRWT6Wh11VDQKkMMe+dVzDKLWs5n87T+PkQ=="], + "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], @@ -1081,7 +1083,7 @@ "tailwind-merge": ["tailwind-merge@3.0.2", "", {}, "sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw=="], - "tailwindcss": ["tailwindcss@4.0.12", "", {}, "sha512-bT0hJo91FtncsAMSsMzUkoo/iEU0Xs5xgFgVC9XmdM9bw5MhZuQFjPNl6wxAE0SiQF/YTZJa+PndGWYSDtuxAg=="], + "tailwindcss": ["tailwindcss@4.0.14", "", {}, "sha512-92YT2dpt671tFiHH/e1ok9D987N9fHD5VWoly1CdPD/Cd1HMglvZwP3nx2yTj2lbXDAHt8QssZkxTLCCTNL+xw=="], "tailwindcss-animate": ["tailwindcss-animate@1.0.7", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA=="], @@ -1135,12 +1137,10 @@ "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], - "use-intl": ["use-intl@3.26.5", "", { "dependencies": { "@formatjs/fast-memoize": "^2.2.0", "intl-messageformat": "^10.5.14" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" } }, "sha512-OdsJnC/znPvHCHLQH/duvQNXnP1w0hPfS+tkSi3mAbfjYBGh4JnyfdwkQBfIVf7t8gs9eSX/CntxUMvtKdG2MQ=="], + "use-intl": ["use-intl@4.0.2", "", { "dependencies": { "@formatjs/fast-memoize": "^2.2.0", "@schummar/icu-type-parser": "1.21.5", "intl-messageformat": "^10.5.14" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" } }, "sha512-6RAP/5KJMRzLMLS25/BVh2u09cRK8S6HRGc1RnZvqR547qAKZCpjYylOqMPU9eNIirAiKoGmsoUPa7JrlaA/yg=="], "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], - "use-sync-external-store": ["use-sync-external-store@1.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw=="], - "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], "vaul": ["vaul@1.1.2", "", { "dependencies": { "@radix-ui/react-dialog": "^1.1.1" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA=="], @@ -1179,10 +1179,6 @@ "@typescript-eslint/typescript-estree/semver": ["semver@7.6.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A=="], - "cmdk/@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.5", "", { "dependencies": { "@radix-ui/primitive": "1.1.1", "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.4", "@radix-ui/react-focus-guards": "1.1.1", "@radix-ui/react-focus-scope": "1.1.1", "@radix-ui/react-id": "1.1.0", "@radix-ui/react-portal": "1.1.3", "@radix-ui/react-presence": "1.1.2", "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-slot": "1.1.1", "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-LaO3e5h/NOEL4OfXjxD43k9Dx+vn+8n+PCFt6uhX/BADFflllyv3WJG6rgvvSVBxpTch938Qq/LGc2MMxipXPw=="], - - "cmdk/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.0.1", "", { "dependencies": { "@radix-ui/react-slot": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg=="], - "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], "eslint-import-resolver-typescript/enhanced-resolve": ["enhanced-resolve@5.18.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ=="], @@ -1217,18 +1213,6 @@ "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - "cmdk/@radix-ui/react-dialog/@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.4", "", { "dependencies": { "@radix-ui/primitive": "1.1.1", "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-escape-keydown": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-XDUI0IVYVSwjMXxM6P4Dfti7AH+Y4oS/TB+sglZ/EXc7cqLwGAmp1NlMrcUjj7ks6R5WTZuWKv44FBbLpwU3sA=="], - - "cmdk/@radix-ui/react-dialog/@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.1", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA=="], - - "cmdk/@radix-ui/react-dialog/@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw=="], - - "cmdk/@radix-ui/react-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.1.1", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g=="], - - "cmdk/@radix-ui/react-dialog/react-remove-scroll": ["react-remove-scroll@2.6.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.1", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw=="], - - "cmdk/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.1.1", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g=="], - "eslint-import-resolver-typescript/fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "hast-util-to-estree/style-to-object/inline-style-parser": ["inline-style-parser@0.1.1", "", {}, "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="], diff --git a/package.json b/package.json index f9b030c..4e385e5 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "dependencies": { "@mdx-js/loader": "^3.1.0", "@mdx-js/react": "^3.1.0", - "@next/mdx": "^15.2.1", + "@next/mdx": "^15.2.2", "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-dropdown-menu": "^2.1.6", "@radix-ui/react-hover-card": "^1.1.6", @@ -26,14 +26,14 @@ "@vercel/speed-insights": "^1.2.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "cmdk": "^1.0.4", + "cmdk": "^1.1.1", "embla-carousel-autoplay": "^8.5.2", "embla-carousel-fade": "^8.5.2", "embla-carousel-react": "^8.5.2", - "lucide-react": "^0.479.0", - "next": "15.2.1", - "next-intl": "^3.26.5", - "next-themes": "^0.4.4", + "lucide-react": "^0.482.0", + "next": "15.2.2", + "next-intl": "^4.0.2", + "next-themes": "^0.4.6", "react": "^19.0.0", "react-dom": "^19.0.0", "react-scrollspy-navigation": "^2.0.6", @@ -47,18 +47,19 @@ "vaul": "^1.1.2" }, "devDependencies": { - "@tailwindcss/postcss": "^4.0.12", + "@tailwindcss/postcss": "^4.0.14", "@tailwindcss/typography": "^0.5.16", - "@types/bun": "^1.2.4", + "@types/bun": "^1.2.5", "@types/node": "^22.13.10", "@types/react": "^19.0.10", "@types/react-dom": "^19.0.4", "eslint": "^9.22.0", - "eslint-config-next": "15.2.1", + "eslint-config-next": "15.2.2", "postcss": "^8.5.3", "prettier": "^3.5.3", "schema-dts": "^1.1.5", - "tailwindcss": "^4.0.12", + "tailwindcss": "^4.0.14", "typescript": "^5.8.2" - } + }, + "packageManager": "pnpm@9.15.1+sha512.1acb565e6193efbebda772702950469150cf12bcc764262e7587e71d19dc98a423dff9536e57ea44c49bdf790ff694e83c27be5faa23d67e0c033b583be4bfcf" } diff --git a/src/app/(markdown)/layout.tsx b/src/app/(markdown)/layout.tsx deleted file mode 100644 index 1f35094..0000000 --- a/src/app/(markdown)/layout.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import type { PropsWithChildren } from "react"; - -export default async function Layout({ - children, -}: Readonly) { - return ( -
{children}
- ); -} diff --git a/src/app/(markdown)/associacions/associacions.mdx b/src/app/[locale]/(markdown)/associacions/associacions.mdx similarity index 100% rename from src/app/(markdown)/associacions/associacions.mdx rename to src/app/[locale]/(markdown)/associacions/associacions.mdx diff --git a/src/app/(markdown)/associacions/layout.tsx b/src/app/[locale]/(markdown)/associacions/layout.tsx similarity index 61% rename from src/app/(markdown)/associacions/layout.tsx rename to src/app/[locale]/(markdown)/associacions/layout.tsx index f10966f..c5d16fd 100644 --- a/src/app/(markdown)/associacions/layout.tsx +++ b/src/app/[locale]/(markdown)/associacions/layout.tsx @@ -1,24 +1,27 @@ import { route } from "@/lib/route"; import type { Metadata } from "next"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { PropsWithChildren } from "react"; export async function generateMetadata(): Promise { const t = await getTranslations("metadata"); - const canonical = route("associacions"); + const canonical = route("associacions") as string; return { title: t("associations"), description: t("associationsDescription"), alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/associacions/page.tsx b/src/app/[locale]/(markdown)/associacions/page.tsx similarity index 64% rename from src/app/(markdown)/associacions/page.tsx rename to src/app/[locale]/(markdown)/associacions/page.tsx index cdc3590..590e663 100644 --- a/src/app/(markdown)/associacions/page.tsx +++ b/src/app/[locale]/(markdown)/associacions/page.tsx @@ -2,17 +2,22 @@ import { Scaffold } from "@/components/scaffold"; import { TOC } from "@/components/toc"; import { route } from "@/lib/route"; import { findMDXHeadings } from "@/mdx-components"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import Associacions from "./associacions.mdx"; -export default async function Page() { +export default async function Page({ + params, +}: Readonly<{ params: Promise<{ locale: string }> }>) { + const { locale } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); return ( } > diff --git a/src/app/(markdown)/avis-legal/avis-legal.mdx b/src/app/[locale]/(markdown)/avis-legal/avis-legal.mdx similarity index 100% rename from src/app/(markdown)/avis-legal/avis-legal.mdx rename to src/app/[locale]/(markdown)/avis-legal/avis-legal.mdx diff --git a/src/app/(markdown)/avis-legal/layout.tsx b/src/app/[locale]/(markdown)/avis-legal/layout.tsx similarity index 62% rename from src/app/(markdown)/avis-legal/layout.tsx rename to src/app/[locale]/(markdown)/avis-legal/layout.tsx index d1567a8..b152c31 100644 --- a/src/app/(markdown)/avis-legal/layout.tsx +++ b/src/app/[locale]/(markdown)/avis-legal/layout.tsx @@ -1,24 +1,27 @@ import { route } from "@/lib/route"; import type { Metadata } from "next"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import type { PropsWithChildren } from "react"; export async function generateMetadata(): Promise { const t = await getTranslations("metadata"); - const canonical = route("avis-legal"); + const canonical = route("avis-legal") as string; return { title: t("legalNotice"), description: t("legalNoticeDescription"), alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/avis-legal/page.tsx b/src/app/[locale]/(markdown)/avis-legal/page.tsx similarity index 70% rename from src/app/(markdown)/avis-legal/page.tsx rename to src/app/[locale]/(markdown)/avis-legal/page.tsx index 66ddc03..42d9050 100644 --- a/src/app/(markdown)/avis-legal/page.tsx +++ b/src/app/[locale]/(markdown)/avis-legal/page.tsx @@ -2,10 +2,15 @@ import { Scaffold } from "@/components/scaffold"; import { TOC } from "@/components/toc"; import { route } from "@/lib/route"; import { findMDXHeadings } from "@/mdx-components"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import AvisLegal from "./avis-legal.mdx"; -export default async function Page() { +export default async function Page({ + params, +}: Readonly<{ params: Promise<{ locale: string }> }>) { + const { locale } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); return ( diff --git a/src/app/(markdown)/bibliografia/bibliografia.mdx b/src/app/[locale]/(markdown)/bibliografia/bibliografia.mdx similarity index 100% rename from src/app/(markdown)/bibliografia/bibliografia.mdx rename to src/app/[locale]/(markdown)/bibliografia/bibliografia.mdx diff --git a/src/app/(markdown)/bibliografia/layout.tsx b/src/app/[locale]/(markdown)/bibliografia/layout.tsx similarity index 61% rename from src/app/(markdown)/bibliografia/layout.tsx rename to src/app/[locale]/(markdown)/bibliografia/layout.tsx index efae3d5..8544c2b 100644 --- a/src/app/(markdown)/bibliografia/layout.tsx +++ b/src/app/[locale]/(markdown)/bibliografia/layout.tsx @@ -1,24 +1,27 @@ import { route } from "@/lib/route"; import type { Metadata } from "next"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { PropsWithChildren } from "react"; export async function generateMetadata(): Promise { const t = await getTranslations("metadata"); - const canonical = route("bibliografia"); + const canonical = route("bibliografia") as string; return { title: t("references"), description: t("referencesDescription"), alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/bibliografia/page.tsx b/src/app/[locale]/(markdown)/bibliografia/page.tsx similarity index 70% rename from src/app/(markdown)/bibliografia/page.tsx rename to src/app/[locale]/(markdown)/bibliografia/page.tsx index 7f02f27..c7e7a32 100644 --- a/src/app/(markdown)/bibliografia/page.tsx +++ b/src/app/[locale]/(markdown)/bibliografia/page.tsx @@ -2,10 +2,15 @@ import { Scaffold } from "@/components/scaffold"; import { TOC } from "@/components/toc"; import { route } from "@/lib/route"; import { findMDXHeadings } from "@/mdx-components"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import Bibliografia from "./bibliografia.mdx"; -export default async function Page() { +export default async function Page({ + params, +}: Readonly<{ params: Promise<{ locale: string }> }>) { + const { locale } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); return ( diff --git a/src/app/(markdown)/cicle/cicle.mdx b/src/app/[locale]/(markdown)/cicle/cicle.mdx similarity index 100% rename from src/app/(markdown)/cicle/cicle.mdx rename to src/app/[locale]/(markdown)/cicle/cicle.mdx diff --git a/src/app/(markdown)/cicle/layout.tsx b/src/app/[locale]/(markdown)/cicle/layout.tsx similarity index 62% rename from src/app/(markdown)/cicle/layout.tsx rename to src/app/[locale]/(markdown)/cicle/layout.tsx index f5ec9b2..ad6f6c4 100644 --- a/src/app/(markdown)/cicle/layout.tsx +++ b/src/app/[locale]/(markdown)/cicle/layout.tsx @@ -1,24 +1,27 @@ import { route } from "@/lib/route"; import type { Metadata } from "next"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { PropsWithChildren } from "react"; export async function generateMetadata(): Promise { const t = await getTranslations("metadata"); - const canonical = route("cicle"); + const canonical = route("cicle") as string; return { title: t("concertSeries"), description: t("concertSeriesDescription"), alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/cicle/page.tsx b/src/app/[locale]/(markdown)/cicle/page.tsx similarity index 69% rename from src/app/(markdown)/cicle/page.tsx rename to src/app/[locale]/(markdown)/cicle/page.tsx index 8029696..62a8a4a 100644 --- a/src/app/(markdown)/cicle/page.tsx +++ b/src/app/[locale]/(markdown)/cicle/page.tsx @@ -2,10 +2,15 @@ import { Scaffold } from "@/components/scaffold"; import { TOC } from "@/components/toc"; import { route } from "@/lib/route"; import { findMDXHeadings } from "@/mdx-components"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import Cicle from "./cicle.mdx"; -export default async function Page() { +export default async function Page({ + params, +}: Readonly<{ params: Promise<{ locale: string }> }>) { + const { locale } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); return ( diff --git a/src/app/(markdown)/formacio/formacio.mdx b/src/app/[locale]/(markdown)/formacio/formacio.mdx similarity index 100% rename from src/app/(markdown)/formacio/formacio.mdx rename to src/app/[locale]/(markdown)/formacio/formacio.mdx diff --git a/src/app/(markdown)/formacio/layout.tsx b/src/app/[locale]/(markdown)/formacio/layout.tsx similarity index 61% rename from src/app/(markdown)/formacio/layout.tsx rename to src/app/[locale]/(markdown)/formacio/layout.tsx index 5c9b241..1ce1502 100644 --- a/src/app/(markdown)/formacio/layout.tsx +++ b/src/app/[locale]/(markdown)/formacio/layout.tsx @@ -1,24 +1,27 @@ import { route } from "@/lib/route"; import type { Metadata } from "next"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { PropsWithChildren } from "react"; export async function generateMetadata(): Promise { const t = await getTranslations("metadata"); - const canonical = route("formacio"); + const canonical = route("formacio") as string; return { title: t("education"), description: t("educationDescription"), alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/formacio/page.tsx b/src/app/[locale]/(markdown)/formacio/page.tsx similarity index 70% rename from src/app/(markdown)/formacio/page.tsx rename to src/app/[locale]/(markdown)/formacio/page.tsx index 061abf0..a99aa38 100644 --- a/src/app/(markdown)/formacio/page.tsx +++ b/src/app/[locale]/(markdown)/formacio/page.tsx @@ -2,10 +2,15 @@ import { Scaffold } from "@/components/scaffold"; import { TOC } from "@/components/toc"; import { route } from "@/lib/route"; import { findMDXHeadings } from "@/mdx-components"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import Formacio from "./formacio.mdx"; -export default async function Page() { +export default async function Page({ + params, +}: Readonly<{ params: Promise<{ locale: string }> }>) { + const { locale } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); return ( diff --git a/src/app/(markdown)/full/full.mdx b/src/app/[locale]/(markdown)/full/full.mdx similarity index 100% rename from src/app/(markdown)/full/full.mdx rename to src/app/[locale]/(markdown)/full/full.mdx diff --git a/src/app/(markdown)/full/layout.tsx b/src/app/[locale]/(markdown)/full/layout.tsx similarity index 62% rename from src/app/(markdown)/full/layout.tsx rename to src/app/[locale]/(markdown)/full/layout.tsx index 60d01b1..ad36ab3 100644 --- a/src/app/(markdown)/full/layout.tsx +++ b/src/app/[locale]/(markdown)/full/layout.tsx @@ -1,24 +1,27 @@ import { route } from "@/lib/route"; import type { Metadata } from "next"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { PropsWithChildren } from "react"; export async function generateMetadata(): Promise { const t = await getTranslations("metadata"); - const canonical = route("full"); + const canonical = route("full") as string; return { title: t("factSheet"), description: t("factSheetDescription"), alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/full/page.tsx b/src/app/[locale]/(markdown)/full/page.tsx similarity index 69% rename from src/app/(markdown)/full/page.tsx rename to src/app/[locale]/(markdown)/full/page.tsx index a10254c..68388b6 100644 --- a/src/app/(markdown)/full/page.tsx +++ b/src/app/[locale]/(markdown)/full/page.tsx @@ -2,10 +2,15 @@ import { Scaffold } from "@/components/scaffold"; import { TOC } from "@/components/toc"; import { route } from "@/lib/route"; import { findMDXHeadings } from "@/mdx-components"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import Full from "./full.mdx"; -export default async function Page() { +export default async function Page({ + params, +}: Readonly<{ params: Promise<{ locale: string }> }>) { + const { locale } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); return ( diff --git a/src/app/[locale]/(markdown)/layout.tsx b/src/app/[locale]/(markdown)/layout.tsx new file mode 100644 index 0000000..a384693 --- /dev/null +++ b/src/app/[locale]/(markdown)/layout.tsx @@ -0,0 +1,14 @@ +import { setRequestLocale } from "next-intl/server"; +import type { PropsWithChildren } from "react"; + +export default async function Layout({ + children, + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + + return ( +
{children}
+ ); +} diff --git a/src/app/(markdown)/noticies/[slug]/layout.tsx b/src/app/[locale]/(markdown)/noticies/[slug]/layout.tsx similarity index 73% rename from src/app/(markdown)/noticies/[slug]/layout.tsx rename to src/app/[locale]/(markdown)/noticies/[slug]/layout.tsx index 5d2be2a..0c82fb0 100644 --- a/src/app/(markdown)/noticies/[slug]/layout.tsx +++ b/src/app/[locale]/(markdown)/noticies/[slug]/layout.tsx @@ -1,5 +1,6 @@ import { route } from "@/lib/route"; import type { Metadata } from "next"; +import { setRequestLocale } from "next-intl/server"; import type { PropsWithChildren } from "react"; import { posts } from "../posts"; @@ -20,20 +21,23 @@ export async function generateMetadata({ }): Promise { const { slug } = await params; const post = posts[slug]; - const canonical = route("post", { slug: post.slug }); + const canonical = route("post", { slug: post.slug }) as string; return { title: post.title, description: post.subtitle, alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/noticies/[slug]/page.tsx b/src/app/[locale]/(markdown)/noticies/[slug]/page.tsx similarity index 87% rename from src/app/(markdown)/noticies/[slug]/page.tsx rename to src/app/[locale]/(markdown)/noticies/[slug]/page.tsx index b9a4b41..632e333 100644 --- a/src/app/(markdown)/noticies/[slug]/page.tsx +++ b/src/app/[locale]/(markdown)/noticies/[slug]/page.tsx @@ -2,20 +2,22 @@ import { ArticleCard } from "@/components/article-card"; import { Scaffold } from "@/components/scaffold"; import { TOC } from "@/components/toc"; import { Badge } from "@/components/ui/badge"; +import { Link } from "@/i18n/routing"; import { route } from "@/lib/route"; import { findMDXHeadings } from "@/mdx-components"; import { CalendarIcon, UserIcon } from "lucide-react"; -import { getLocale, getTranslations } from "next-intl/server"; -import Link from "next/link"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { posts, sortedPosts } from "../posts"; import { PublicacioParams } from "./layout"; export default async function Page({ params, }: { - params: Promise; + params: Promise; }) { - const locale = await getLocale(); + const { locale } = await params; + setRequestLocale(locale); + const dateFormat = Intl.DateTimeFormat(locale, { day: "numeric", month: "long", @@ -89,7 +91,13 @@ export default async function Page({ .filter((latest) => latest.slug !== post.slug) .slice(0, 3) .map((post) => ( - + ))} diff --git a/src/app/(markdown)/noticies/_posts/2022-02-18-finalitzacio-tubs-girona.mdx b/src/app/[locale]/(markdown)/noticies/_posts/2022-02-18-finalitzacio-tubs-girona.mdx similarity index 100% rename from src/app/(markdown)/noticies/_posts/2022-02-18-finalitzacio-tubs-girona.mdx rename to src/app/[locale]/(markdown)/noticies/_posts/2022-02-18-finalitzacio-tubs-girona.mdx diff --git a/src/app/(markdown)/noticies/_posts/2022-04-23-5e-aniversari-associacio-vendrell.mdx b/src/app/[locale]/(markdown)/noticies/_posts/2022-04-23-5e-aniversari-associacio-vendrell.mdx similarity index 100% rename from src/app/(markdown)/noticies/_posts/2022-04-23-5e-aniversari-associacio-vendrell.mdx rename to src/app/[locale]/(markdown)/noticies/_posts/2022-04-23-5e-aniversari-associacio-vendrell.mdx diff --git a/src/app/(markdown)/noticies/_posts/2022-08-10-inauguracio-orgue-seu-manresa.mdx b/src/app/[locale]/(markdown)/noticies/_posts/2022-08-10-inauguracio-orgue-seu-manresa.mdx similarity index 100% rename from src/app/(markdown)/noticies/_posts/2022-08-10-inauguracio-orgue-seu-manresa.mdx rename to src/app/[locale]/(markdown)/noticies/_posts/2022-08-10-inauguracio-orgue-seu-manresa.mdx diff --git a/src/app/(markdown)/noticies/_posts/2022-10-15-nova-junta-directiva.mdx b/src/app/[locale]/(markdown)/noticies/_posts/2022-10-15-nova-junta-directiva.mdx similarity index 100% rename from src/app/(markdown)/noticies/_posts/2022-10-15-nova-junta-directiva.mdx rename to src/app/[locale]/(markdown)/noticies/_posts/2022-10-15-nova-junta-directiva.mdx diff --git a/src/app/(markdown)/noticies/_posts/2023-02-01-carta-vanguardia.mdx b/src/app/[locale]/(markdown)/noticies/_posts/2023-02-01-carta-vanguardia.mdx similarity index 100% rename from src/app/(markdown)/noticies/_posts/2023-02-01-carta-vanguardia.mdx rename to src/app/[locale]/(markdown)/noticies/_posts/2023-02-01-carta-vanguardia.mdx diff --git a/src/app/(markdown)/noticies/_posts/2023-07-03-presentacio-43e-cicle.mdx b/src/app/[locale]/(markdown)/noticies/_posts/2023-07-03-presentacio-43e-cicle.mdx similarity index 100% rename from src/app/(markdown)/noticies/_posts/2023-07-03-presentacio-43e-cicle.mdx rename to src/app/[locale]/(markdown)/noticies/_posts/2023-07-03-presentacio-43e-cicle.mdx diff --git a/src/app/(markdown)/noticies/_posts/2023-07-06-nou-orgue-a-cabrera-de-mar.mdx b/src/app/[locale]/(markdown)/noticies/_posts/2023-07-06-nou-orgue-a-cabrera-de-mar.mdx similarity index 100% rename from src/app/(markdown)/noticies/_posts/2023-07-06-nou-orgue-a-cabrera-de-mar.mdx rename to src/app/[locale]/(markdown)/noticies/_posts/2023-07-06-nou-orgue-a-cabrera-de-mar.mdx diff --git a/src/app/(markdown)/noticies/_posts/2024-12-28-nou-orgue-a-santa-gueraula-de-les-espremulles.mdx b/src/app/[locale]/(markdown)/noticies/_posts/2024-12-28-nou-orgue-a-santa-gueraula-de-les-espremulles.mdx similarity index 100% rename from src/app/(markdown)/noticies/_posts/2024-12-28-nou-orgue-a-santa-gueraula-de-les-espremulles.mdx rename to src/app/[locale]/(markdown)/noticies/_posts/2024-12-28-nou-orgue-a-santa-gueraula-de-les-espremulles.mdx diff --git a/src/app/(markdown)/noticies/layout.tsx b/src/app/[locale]/(markdown)/noticies/layout.tsx similarity index 61% rename from src/app/(markdown)/noticies/layout.tsx rename to src/app/[locale]/(markdown)/noticies/layout.tsx index 4991a6d..8f51c7f 100644 --- a/src/app/(markdown)/noticies/layout.tsx +++ b/src/app/[locale]/(markdown)/noticies/layout.tsx @@ -1,24 +1,27 @@ import { route } from "@/lib/route"; import type { Metadata } from "next"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { PropsWithChildren } from "react"; export async function generateMetadata(): Promise { const t = await getTranslations("metadata"); - const canonical = route("noticies"); + const canonical = route("noticies") as string; return { title: t("news"), description: t("newsDescription"), alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/noticies/noticies.mdx b/src/app/[locale]/(markdown)/noticies/noticies.mdx similarity index 100% rename from src/app/(markdown)/noticies/noticies.mdx rename to src/app/[locale]/(markdown)/noticies/noticies.mdx diff --git a/src/app/(markdown)/noticies/page.tsx b/src/app/[locale]/(markdown)/noticies/page.tsx similarity index 68% rename from src/app/(markdown)/noticies/page.tsx rename to src/app/[locale]/(markdown)/noticies/page.tsx index 8195e86..4df3e68 100644 --- a/src/app/(markdown)/noticies/page.tsx +++ b/src/app/[locale]/(markdown)/noticies/page.tsx @@ -1,14 +1,19 @@ import { ArticleCard } from "@/components/article-card"; import { Scaffold } from "@/components/scaffold"; import { TOC } from "@/components/toc"; +import { Link } from "@/i18n/routing"; import { route } from "@/lib/route"; import { findMDXHeadings } from "@/mdx-components"; -import { getTranslations } from "next-intl/server"; -import Link from "next/link"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import Noticies from "./noticies.mdx"; import { sortedPosts } from "./posts"; -export default async function Page() { +export default async function Page({ + params, +}: Readonly<{ params: Promise<{ locale: string }> }>) { + const { locale } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); return ( @@ -29,7 +34,10 @@ function LatestPosts() { return (
    {sortedPosts.map((post) => ( - + ))} diff --git a/src/app/(markdown)/noticies/posts.ts b/src/app/[locale]/(markdown)/noticies/posts.ts similarity index 92% rename from src/app/(markdown)/noticies/posts.ts rename to src/app/[locale]/(markdown)/noticies/posts.ts index cc5c9a4..591bba4 100644 --- a/src/app/(markdown)/noticies/posts.ts +++ b/src/app/[locale]/(markdown)/noticies/posts.ts @@ -17,7 +17,10 @@ export interface PostData extends MatterPostData { type MatchTuple = [string, string, string]; -const postsDirectory = join(process.cwd(), "src/app/(markdown)/noticies/_posts"); +const postsDirectory = join( + process.cwd(), + "src/app/[locale]/(markdown)/noticies/_posts", +); const fileNameRegExp = /^(\d{4}-\d{2}-\d{2})-(.*?)\.mdx?$/; export const posts = await getPosts(); diff --git a/src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/layout.tsx b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/layout.tsx similarity index 78% rename from src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/layout.tsx rename to src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/layout.tsx index 00535d3..e91b7c2 100644 --- a/src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/layout.tsx +++ b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/layout.tsx @@ -1,6 +1,7 @@ -import { orgueNavigation } from "@/app/(markdown)/orgues/orgueNavigation"; +import { orgueNavigation } from "@/app/[locale]/(markdown)/orgues/orgueNavigation"; import { route } from "@/lib/route"; import { Metadata } from "next"; +import { setRequestLocale } from "next-intl/server"; import { PropsWithChildren } from "react"; import { OrguesEdificiParams } from "../layout"; @@ -34,19 +35,22 @@ export async function generateMetadata({ municipi: municipi.link, edifici: edifici.link, orgue: orgue.link, - }); + }) as string; return { title: `${orgue.nom} ${edifici.de ?? "de "}${edifici.nom} ${municipi.de_nom ?? `de ${municipi.nom}`}`, alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/page.tsx b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/page.tsx similarity index 81% rename from src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/page.tsx rename to src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/page.tsx index ac75f22..9a8f627 100644 --- a/src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/page.tsx +++ b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/[orgue]/page.tsx @@ -1,20 +1,22 @@ -import { orgueNavigation } from "@/app/(markdown)/orgues/orgueNavigation"; -import { slugs } from "@/app/(markdown)/orgues/redirects"; +import { orgueNavigation } from "@/app/[locale]/(markdown)/orgues/orgueNavigation"; +import { slugs } from "@/app/[locale]/(markdown)/orgues/redirects"; import { CopyButton } from "@/components/copy-button"; import { Scaffold } from "@/components/scaffold"; import { route } from "@/lib/route"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { OrguesOrgueParams } from "./layout"; export default async function Page({ params, }: { - params: Promise; + params: Promise; }) { + const { locale, ...navigation } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); - const { provincia, comarca, municipi, edifici, orgue } = orgueNavigation( - await params, - ); + const { provincia, comarca, municipi, edifici, orgue } = + orgueNavigation(navigation); return ( diff --git a/src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/layout.tsx b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/layout.tsx similarity index 79% rename from src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/layout.tsx rename to src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/layout.tsx index fc19a63..b79a110 100644 --- a/src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/layout.tsx +++ b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/layout.tsx @@ -1,6 +1,7 @@ -import { orgueNavigation } from "@/app/(markdown)/orgues/orgueNavigation"; +import { orgueNavigation } from "@/app/[locale]/(markdown)/orgues/orgueNavigation"; import { route } from "@/lib/route"; import type { Metadata } from "next"; +import { setRequestLocale } from "next-intl/server"; import { PropsWithChildren } from "react"; import { OrguesMunicipiParams } from "../layout"; @@ -33,19 +34,22 @@ export async function generateMetadata({ comarca: comarca.link, municipi: municipi.link, edifici: edifici.link, - }); + }) as string; return { title: `${edifici.orgues ? "Orgues" : "Orgue"} ${edifici.de ?? "de "}${edifici.nom} ${municipi.de_nom ?? `de ${municipi.nom}`}`, alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/page.tsx b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/page.tsx similarity index 81% rename from src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/page.tsx rename to src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/page.tsx index 666ad3e..711b028 100644 --- a/src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/page.tsx +++ b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/[edifici]/page.tsx @@ -1,20 +1,21 @@ -import { orgueNavigation } from "@/app/(markdown)/orgues/orgueNavigation"; -import { slugs } from "@/app/(markdown)/orgues/redirects"; +import { orgueNavigation } from "@/app/[locale]/(markdown)/orgues/orgueNavigation"; +import { slugs } from "@/app/[locale]/(markdown)/orgues/redirects"; import { CopyButton } from "@/components/copy-button"; import { Scaffold } from "@/components/scaffold"; import { route } from "@/lib/route"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { OrguesEdificiParams } from "./layout"; export default async function Page({ params, }: { - params: Promise; + params: Promise; }) { + const { locale, ...navigation } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); - const { provincia, comarca, municipi, edifici } = orgueNavigation( - await params, - ); + const { provincia, comarca, municipi, edifici } = orgueNavigation(navigation); return ( diff --git a/src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/layout.tsx b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/layout.tsx similarity index 85% rename from src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/layout.tsx rename to src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/layout.tsx index 434d6d0..391c9a5 100644 --- a/src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/layout.tsx +++ b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/layout.tsx @@ -1,6 +1,7 @@ import orgues from "@/database/orgues.json" with { type: "json" }; import { route } from "@/lib/route"; import { Metadata } from "next"; +import { setRequestLocale } from "next-intl/server"; import { PropsWithChildren } from "react"; import { orgueNavigation } from "../../../orgueNavigation"; import { OrguesComarcaParams } from "../layout"; @@ -34,19 +35,22 @@ export async function generateMetadata({ provincia: provincia.link, comarca: comarca.link, municipi: municipi.link, - }); + }) as string; return { title: `Orgues ${municipi.de_nom ?? `de ${municipi.nom}`}`, alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/page.tsx b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/page.tsx similarity index 81% rename from src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/page.tsx rename to src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/page.tsx index 4246c31..139c9d8 100644 --- a/src/app/(markdown)/orgues/[provincia]/[comarca]/[municipi]/page.tsx +++ b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/[municipi]/page.tsx @@ -1,19 +1,22 @@ -import { orgueNavigation } from "@/app/(markdown)/orgues/orgueNavigation"; +import { orgueNavigation } from "@/app/[locale]/(markdown)/orgues/orgueNavigation"; import { PipeOrganCard } from "@/components/pipe-organ-card"; import { Scaffold } from "@/components/scaffold"; import { orgues } from "@/database/orgues-repository"; import { route } from "@/lib/route"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { OrguesMunicipiParams } from "./layout"; export default async function Page({ params, }: { - params: Promise; + params: Promise; }) { + const { locale, ...navigation } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); - const { provincia, comarca, municipi } = orgueNavigation(await params); - const { de_nom, nom, edificis } = orgues(await params); + const { provincia, comarca, municipi } = orgueNavigation(navigation); + const { de_nom, nom, edificis } = orgues(navigation); return ( ) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/orgues/[provincia]/[comarca]/page.tsx b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/page.tsx similarity index 71% rename from src/app/(markdown)/orgues/[provincia]/[comarca]/page.tsx rename to src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/page.tsx index 62e1e9a..a5cc0bf 100644 --- a/src/app/(markdown)/orgues/[provincia]/[comarca]/page.tsx +++ b/src/app/[locale]/(markdown)/orgues/[provincia]/[comarca]/page.tsx @@ -1,16 +1,19 @@ import { Scaffold } from "@/components/scaffold"; import { route } from "@/lib/route"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { orgueNavigation } from "../../orgueNavigation"; import { OrguesComarcaParams } from "./layout"; export default async function Page({ params, }: { - params: Promise; + params: Promise; }) { + const { locale, ...navigation } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); - const { provincia, comarca } = orgueNavigation(await params); + const { provincia, comarca } = orgueNavigation(navigation); return ( ; }): Promise { const { provincia } = orgueNavigation(await params); - const canonical = route("provincia", { provincia: provincia.link }); + const canonical = route("provincia", { provincia: provincia.link }) as string; return { title: `Orgues de ${provincia.nom}`, alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/orgues/[provincia]/page.tsx b/src/app/[locale]/(markdown)/orgues/[provincia]/page.tsx similarity index 67% rename from src/app/(markdown)/orgues/[provincia]/page.tsx rename to src/app/[locale]/(markdown)/orgues/[provincia]/page.tsx index 1aa6048..2c84acc 100644 --- a/src/app/(markdown)/orgues/[provincia]/page.tsx +++ b/src/app/[locale]/(markdown)/orgues/[provincia]/page.tsx @@ -1,16 +1,19 @@ import { Scaffold } from "@/components/scaffold"; import { route } from "@/lib/route"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { orgueNavigation } from "../orgueNavigation"; import { OrguesProvinciaParams } from "./layout"; export default async function Page({ params, }: { - params: Promise; + params: Promise; }) { + const { locale, ...navigation } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); - const { provincia } = orgueNavigation(await params); + const { provincia } = orgueNavigation(navigation); return ( { const t = await getTranslations("metadata"); - const canonical = route("orgues"); + const canonical = route("orgues") as string; return { title: t("pipeOrgans"), description: t("pipeOrgansDescription"), alternates: { canonical, - languages: { "x-default": canonical }, }, }; } -export default function Layout({ children }: Readonly) { +export default async function Layout({ + children, + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); return children; } diff --git a/src/app/(markdown)/orgues/orgueNavigation.ts b/src/app/[locale]/(markdown)/orgues/orgueNavigation.ts similarity index 100% rename from src/app/(markdown)/orgues/orgueNavigation.ts rename to src/app/[locale]/(markdown)/orgues/orgueNavigation.ts diff --git a/src/app/(markdown)/orgues/orgues.mdx b/src/app/[locale]/(markdown)/orgues/orgues.mdx similarity index 100% rename from src/app/(markdown)/orgues/orgues.mdx rename to src/app/[locale]/(markdown)/orgues/orgues.mdx diff --git a/src/app/(markdown)/orgues/page.tsx b/src/app/[locale]/(markdown)/orgues/page.tsx similarity index 69% rename from src/app/(markdown)/orgues/page.tsx rename to src/app/[locale]/(markdown)/orgues/page.tsx index e2983f8..68522ca 100644 --- a/src/app/(markdown)/orgues/page.tsx +++ b/src/app/[locale]/(markdown)/orgues/page.tsx @@ -2,10 +2,15 @@ import { Scaffold } from "@/components/scaffold"; import { TOC } from "@/components/toc"; import { route } from "@/lib/route"; import { findMDXHeadings } from "@/mdx-components"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import Orgues from "./orgues.mdx"; -export default async function Page() { +export default async function Page({ + params, +}: Readonly<{ params: Promise<{ locale: string }> }>) { + const { locale } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); return ( diff --git a/src/app/(markdown)/orgues/redirects.ts b/src/app/[locale]/(markdown)/orgues/redirects.ts similarity index 95% rename from src/app/(markdown)/orgues/redirects.ts rename to src/app/[locale]/(markdown)/orgues/redirects.ts index 46678fa..ba4b8a8 100644 --- a/src/app/(markdown)/orgues/redirects.ts +++ b/src/app/[locale]/(markdown)/orgues/redirects.ts @@ -40,7 +40,7 @@ function* computeRedirects() { comarca: comarca.link, municipi: municipi.link, edifici: edifici.link, - }), + }) as string, ); } else { for (const orgue of edifici.orgues) { @@ -52,7 +52,7 @@ function* computeRedirects() { municipi: municipi.link, edifici: edifici.link, orgue: orgue.link, - }), + }) as string, ); } } @@ -66,7 +66,7 @@ function* computeRedirects() { comarca: comarca.link, municipi: municipi.link, edifici: edifici.link, - }), + }) as string, ); } else { for (const orgue of edifici.orgues) { @@ -78,7 +78,7 @@ function* computeRedirects() { municipi: municipi.link, edifici: edifici.link, orgue: orgue.link, - }), + }) as string, ); } } diff --git a/src/app/(markdown)/politica-de-privacitat-socis/components/procedencia-dades.tsx b/src/app/[locale]/(markdown)/politica-de-privacitat-socis/components/procedencia-dades.tsx similarity index 100% rename from src/app/(markdown)/politica-de-privacitat-socis/components/procedencia-dades.tsx rename to src/app/[locale]/(markdown)/politica-de-privacitat-socis/components/procedencia-dades.tsx diff --git a/src/app/(markdown)/politica-de-privacitat-socis/layout.tsx b/src/app/[locale]/(markdown)/politica-de-privacitat-socis/layout.tsx similarity index 61% rename from src/app/(markdown)/politica-de-privacitat-socis/layout.tsx rename to src/app/[locale]/(markdown)/politica-de-privacitat-socis/layout.tsx index abc8960..922af9a 100644 --- a/src/app/(markdown)/politica-de-privacitat-socis/layout.tsx +++ b/src/app/[locale]/(markdown)/politica-de-privacitat-socis/layout.tsx @@ -1,24 +1,27 @@ import { route } from "@/lib/route"; import type { Metadata } from "next"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import type { PropsWithChildren } from "react"; export async function generateMetadata(): Promise { const t = await getTranslations("metadata"); - const canonical = route("politica-de-privacitat-socis"); + const canonical = route("politica-de-privacitat-socis") as string; return { title: t("privacyPolicyMembers"), description: t("privacyPolicyMembersDescription"), alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/politica-de-privacitat-socis/page.tsx b/src/app/[locale]/(markdown)/politica-de-privacitat-socis/page.tsx similarity index 72% rename from src/app/(markdown)/politica-de-privacitat-socis/page.tsx rename to src/app/[locale]/(markdown)/politica-de-privacitat-socis/page.tsx index bc02c4b..fd00c60 100644 --- a/src/app/(markdown)/politica-de-privacitat-socis/page.tsx +++ b/src/app/[locale]/(markdown)/politica-de-privacitat-socis/page.tsx @@ -2,10 +2,15 @@ import { Scaffold } from "@/components/scaffold"; import { TOC } from "@/components/toc"; import { route } from "@/lib/route"; import { findMDXHeadings } from "@/mdx-components"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import PoliticaDePrivacitatSocis from "./politica-de-privacitat-socis.mdx"; -export default async function Page() { +export default async function Page({ + params, +}: Readonly<{ params: Promise<{ locale: string }> }>) { + const { locale } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); return ( diff --git a/src/app/(markdown)/politica-de-privacitat-socis/politica-de-privacitat-socis.mdx b/src/app/[locale]/(markdown)/politica-de-privacitat-socis/politica-de-privacitat-socis.mdx similarity index 100% rename from src/app/(markdown)/politica-de-privacitat-socis/politica-de-privacitat-socis.mdx rename to src/app/[locale]/(markdown)/politica-de-privacitat-socis/politica-de-privacitat-socis.mdx diff --git a/src/app/(markdown)/politica-de-privacitat/layout.tsx b/src/app/[locale]/(markdown)/politica-de-privacitat/layout.tsx similarity index 60% rename from src/app/(markdown)/politica-de-privacitat/layout.tsx rename to src/app/[locale]/(markdown)/politica-de-privacitat/layout.tsx index 3fc14ee..687dcc2 100644 --- a/src/app/(markdown)/politica-de-privacitat/layout.tsx +++ b/src/app/[locale]/(markdown)/politica-de-privacitat/layout.tsx @@ -1,24 +1,27 @@ import { route } from "@/lib/route"; import type { Metadata } from "next"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import { PropsWithChildren } from "react"; export async function generateMetadata(): Promise { const t = await getTranslations("metadata"); - const canonical = route("politica-de-privacitat"); + const canonical = route("politica-de-privacitat") as string; return { title: t("privacyPolicy"), description: t("privacyPolicyDescription"), alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/politica-de-privacitat/page.tsx b/src/app/[locale]/(markdown)/politica-de-privacitat/page.tsx similarity index 71% rename from src/app/(markdown)/politica-de-privacitat/page.tsx rename to src/app/[locale]/(markdown)/politica-de-privacitat/page.tsx index 0b82807..916a04c 100644 --- a/src/app/(markdown)/politica-de-privacitat/page.tsx +++ b/src/app/[locale]/(markdown)/politica-de-privacitat/page.tsx @@ -2,10 +2,15 @@ import { Scaffold } from "@/components/scaffold"; import { TOC } from "@/components/toc"; import { route } from "@/lib/route"; import { findMDXHeadings } from "@/mdx-components"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import PoliticaDePrivacitat from "./politica-de-privacitat.mdx"; -export default async function Page() { +export default async function Page({ + params, +}: Readonly<{ params: Promise<{ locale: string }> }>) { + const { locale } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); return ( diff --git a/src/app/(markdown)/politica-de-privacitat/politica-de-privacitat.mdx b/src/app/[locale]/(markdown)/politica-de-privacitat/politica-de-privacitat.mdx similarity index 100% rename from src/app/(markdown)/politica-de-privacitat/politica-de-privacitat.mdx rename to src/app/[locale]/(markdown)/politica-de-privacitat/politica-de-privacitat.mdx diff --git a/src/app/(markdown)/qui-som/layout.tsx b/src/app/[locale]/(markdown)/qui-som/layout.tsx similarity index 61% rename from src/app/(markdown)/qui-som/layout.tsx rename to src/app/[locale]/(markdown)/qui-som/layout.tsx index 18c674f..c8b39aa 100644 --- a/src/app/(markdown)/qui-som/layout.tsx +++ b/src/app/[locale]/(markdown)/qui-som/layout.tsx @@ -1,24 +1,27 @@ import { route } from "@/lib/route"; import type { Metadata } from "next"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import type { PropsWithChildren } from "react"; export async function generateMetadata(): Promise { const t = await getTranslations("metadata"); - const canonical = route("qui-som"); + const canonical = route("qui-som") as string; return { title: t("aboutUs"), description: t("aboutUsDescription"), alternates: { canonical, - languages: { "x-default": canonical }, }, }; } export default async function Layout({ children, -}: Readonly) { + params, +}: Readonly }>>) { + const { locale } = await params; + setRequestLocale(locale); + return children; } diff --git a/src/app/(markdown)/qui-som/page.tsx b/src/app/[locale]/(markdown)/qui-som/page.tsx similarity index 69% rename from src/app/(markdown)/qui-som/page.tsx rename to src/app/[locale]/(markdown)/qui-som/page.tsx index 479a117..0323933 100644 --- a/src/app/(markdown)/qui-som/page.tsx +++ b/src/app/[locale]/(markdown)/qui-som/page.tsx @@ -2,10 +2,15 @@ import { Scaffold } from "@/components/scaffold"; import { TOC } from "@/components/toc"; import { route } from "@/lib/route"; import { findMDXHeadings } from "@/mdx-components"; -import { getTranslations } from "next-intl/server"; +import { getTranslations, setRequestLocale } from "next-intl/server"; import QuiSom from "./qui-som.mdx"; -export default async function Page() { +export default async function Page({ + params, +}: Readonly<{ params: Promise<{ locale: string }> }>) { + const { locale } = await params; + setRequestLocale(locale); + const t = await getTranslations("metadata"); return ( diff --git a/src/app/(markdown)/qui-som/qui-som.mdx b/src/app/[locale]/(markdown)/qui-som/qui-som.mdx similarity index 100% rename from src/app/(markdown)/qui-som/qui-som.mdx rename to src/app/[locale]/(markdown)/qui-som/qui-som.mdx diff --git a/src/app/[locale]/[...rest]/page.tsx b/src/app/[locale]/[...rest]/page.tsx new file mode 100644 index 0000000..2dc2960 --- /dev/null +++ b/src/app/[locale]/[...rest]/page.tsx @@ -0,0 +1,5 @@ +import { notFound } from "next/navigation"; + +export default function CatchAllPage() { + notFound(); +} diff --git a/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx new file mode 100644 index 0000000..78e4247 --- /dev/null +++ b/src/app/[locale]/layout.tsx @@ -0,0 +1,100 @@ +import { CookieToast } from "@/components/cookie/cookie-toast"; +import { Footer } from "@/components/footer"; +import { MainHeader } from "@/components/main-header"; +import { Navbar } from "@/components/navbar"; +import { ThemeProvider } from "@/components/theme-provider"; +import { DrawerWrapper } from "@/components/ui/drawer"; +import { Toaster } from "@/components/ui/sonner"; +import { TooltipProvider } from "@/components/ui/tooltip"; +import { baseURL, route } from "@/lib/route"; +import { cn } from "@/lib/utils"; +import { SpeedInsights } from "@vercel/speed-insights/next"; +import type { Metadata } from "next"; +import { hasLocale, NextIntlClientProvider } from "next-intl"; +import { + getMessages, + getTranslations, + setRequestLocale, +} from "next-intl/server"; +import localFont from "next/font/local"; +import { PropsWithChildren } from "react"; + +import { routing } from "@/i18n/routing"; +import { notFound } from "next/navigation"; +import "../globals.css"; + +export const fontSans = localFont({ + src: [ + { path: "../../../public/fonts/InterVariable.ttf", style: "normal" }, + { path: "../../../public/fonts/InterVariable-Italic.ttf", style: "italic" }, + ], + variable: "--font-sans", + display: "swap", + preload: true, +}); + +export function generateStaticParams() { + return routing.locales.map((locale) => ({ locale })); +} + +export async function generateMetadata(): Promise { + const t = await getTranslations("organization"); + const canonical = route("home") as string; + + return { + title: { + template: `%s · ${t("name")}`, + default: t("name"), + }, + description: t("description"), + metadataBase: baseURL, + icons: { + icon: "/favicons/favicon180x180.png", + }, + alternates: { + canonical, + }, + verification: { + google: "6gM0wXu4-PfRs-mHaxZXSCSSnY9EZdpUnTgEUAth_jY", + }, + }; +} + +export default async function RootLayout({ + children, + params, +}: Readonly }>>) { + const { locale } = await params; + if (!hasLocale(routing.locales, locale)) { + notFound(); + } + + setRequestLocale(locale); + + const messages = await getMessages(); + + return ( + + + + + + + + } /> + {children} +