From ad943fff8c8abf50778cd4aff1ca51cf2fee51f0 Mon Sep 17 00:00:00 2001 From: fristyxd Date: Thu, 10 Sep 2026 04:23:21 +0300 Subject: [PATCH] Initial commit: fristy.net personal site --- .dockerignore | 9 + .editorconfig | 12 + .gitattributes | 3 + .gitea/workflows/docker.yaml | 77 + .gitignore | 44 + .prettierignore | 7 + .prettierrc | 7 + .vscode/extensions.json | 7 + .vscode/settings.json | 10 + Dockerfile | 25 + LICENSE | 190 ++ README.md | 63 + app/error.tsx | 22 + app/globals.css | 43 + app/icon.png | Bin 0 -> 55724 bytes app/layout.tsx | 39 + app/loading.tsx | 15 + app/not-found.tsx | 30 + app/page.tsx | 68 + components/contact-section.tsx | 87 + components/copy-email.tsx | 40 + components/discord-card.tsx | 202 ++ components/language-switcher.tsx | 41 + components/projects-section.tsx | 105 + components/section-heading.tsx | 27 + components/site-footer.tsx | 50 + components/site-header.tsx | 27 + eslint.config.mjs | 13 + lib/gitea.ts | 61 + lib/i18n/dictionaries/de.json | 66 + lib/i18n/dictionaries/en.json | 66 + lib/i18n/dictionaries/tr.json | 66 + lib/i18n/get-dictionary.ts | 12 + lib/i18n/get-locale.ts | 11 + lib/i18n/locales.ts | 48 + lib/i18n/set-locale-cookie.ts | 16 + lib/lanyard.ts | 108 + lib/site.ts | 9 + next.config.ts | 15 + package.json | 31 + pnpm-lock.yaml | 4207 ++++++++++++++++++++++++++++++ pnpm-workspace.yaml | 3 + postcss.config.mjs | 7 + proxy.ts | 23 + public/icons/discord.svg | 1 + public/icons/gitea.svg | 1 + public/icons/github.svg | 1 + public/icons/gmail.svg | 1 + public/icons/spotify.svg | 1 + public/icons/steam.svg | 1 + tsconfig.json | 34 + 51 files changed, 6052 insertions(+) create mode 100644 .dockerignore create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitea/workflows/docker.yaml create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 app/error.tsx create mode 100644 app/globals.css create mode 100644 app/icon.png create mode 100644 app/layout.tsx create mode 100644 app/loading.tsx create mode 100644 app/not-found.tsx create mode 100644 app/page.tsx create mode 100644 components/contact-section.tsx create mode 100644 components/copy-email.tsx create mode 100644 components/discord-card.tsx create mode 100644 components/language-switcher.tsx create mode 100644 components/projects-section.tsx create mode 100644 components/section-heading.tsx create mode 100644 components/site-footer.tsx create mode 100644 components/site-header.tsx create mode 100644 eslint.config.mjs create mode 100644 lib/gitea.ts create mode 100644 lib/i18n/dictionaries/de.json create mode 100644 lib/i18n/dictionaries/en.json create mode 100644 lib/i18n/dictionaries/tr.json create mode 100644 lib/i18n/get-dictionary.ts create mode 100644 lib/i18n/get-locale.ts create mode 100644 lib/i18n/locales.ts create mode 100644 lib/i18n/set-locale-cookie.ts create mode 100644 lib/lanyard.ts create mode 100644 lib/site.ts create mode 100644 next.config.ts create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 postcss.config.mjs create mode 100644 proxy.ts create mode 100644 public/icons/discord.svg create mode 100644 public/icons/gitea.svg create mode 100644 public/icons/github.svg create mode 100644 public/icons/gmail.svg create mode 100644 public/icons/spotify.svg create mode 100644 public/icons/steam.svg create mode 100644 tsconfig.json diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0eee24d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +node_modules +.next +out +.git +.gitignore +*.log +.env* +Dockerfile +.dockerignore diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6646a90 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..e2d7a31 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +* text=auto eol=lf +*.png binary +*.ico binary diff --git a/.gitea/workflows/docker.yaml b/.gitea/workflows/docker.yaml new file mode 100644 index 0000000..6a3693e --- /dev/null +++ b/.gitea/workflows/docker.yaml @@ -0,0 +1,77 @@ +name: Build & Push + +on: + push: + branches: ["main"] + tags: ["v*"] + pull_request: + +env: + REGISTRY: git.fristy.net + IMAGE_NAME: fristy/fristynet + +jobs: + check: + name: Lint & Build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup pnpm + uses: pnpm/action-setup@v4 + - name: Get pnpm store path + id: pnpm-store + run: echo "path=$(pnpm store path --silent)" >> "$GITHUB_OUTPUT" + - name: Cache pnpm store + uses: actions/cache@v4 + with: + path: ${{ steps.pnpm-store.outputs.path }} + key: ${{ runner.os }}-pnpm-${{ hashFiles('pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm- + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: lts/* + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Check formatting + run: pnpm format:check + - name: Lint + run: pnpm lint + - name: Build + run: pnpm build + + image: + name: Build & Push Image + needs: check + if: github.event_name == 'push' + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.REGISTRY_TOKEN }} + - name: Resolve tags + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=latest,enable={{is_default_branch}} + type=semver,pattern={{version}} + type=sha,prefix= + - name: Build & push + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..905703a --- /dev/null +++ b/.gitignore @@ -0,0 +1,44 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# pnpm store (CI workspace'e inebilir) +.pnpm-store/ + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..5adeea4 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,7 @@ +.next +out +build +node_modules +.pnpm-store +pnpm-lock.yaml +next-env.d.ts diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..f148b7a --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "tabWidth": 4, + "useTabs": false, + "trailingComma": "all", + "printWidth": 100, + "endOfLine": "lf" +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..83345b6 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + "recommendations": [ + "esbenp.prettier-vscode", + "dbaeumer.vs-code-eslint", + "bradlc.vscode-tailwindcss" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..5b654c9 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "editor.tabSize": 4, + "editor.insertSpaces": true, + "editor.detectIndentation": false, + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + } +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d35b97c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM node:lts-alpine AS deps +RUN npm install -g pnpm +WORKDIR /app +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +RUN pnpm install --frozen-lockfile + +FROM node:lts-alpine AS builder +RUN npm install -g pnpm +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +RUN pnpm build + +FROM node:lts-alpine AS runner +WORKDIR /app +ENV NODE_ENV=production +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" +RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjs +COPY --from=builder /app/public ./public +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static +USER nextjs +EXPOSE 3000 +CMD ["node", "server.js"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8a96673 --- /dev/null +++ b/LICENSE @@ -0,0 +1,190 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2026 fristy + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5a1a16f --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +# fristy.net + +My personal corner of the internet — projects, live Discord status, and ways to reach me. + +**Live:** https://fristy.net + +## What's inside + +- **Projects** — pulled automatically from my self-hosted Gitea and refreshed hourly. If a repo has a website, the card links there; otherwise it goes straight to the repo. +- **Discord** — live presence via Lanyard: status, game and activity artwork, Spotify, custom status. Refreshed every 15 seconds. +- **Contact & Social** — email, Discord server, GitHub, Gitea, Spotify and Steam, each with its own card. +- **Three languages** — Turkish, English and German. No path-style; your browser language is detected on the first visit, saved in a cookie, and switchable from the header anytime. + +## Stack + +[Next.js](https://nextjs.org/) (App Router) · [React](https://react.dev/) · [Tailwind CSS v4](https://tailwindcss.com/) · [pnpm](https://pnpm.io/) · [Docker](https://docker.com/) + +## Run it locally + +You need Node LTS and pnpm. + +```bash +pnpm install +pnpm dev # http://localhost:3000 +``` + +| Script | What it does | +| ------------------- | ------------------------------- | +| `pnpm dev` | Start the dev server | +| `pnpm build` | Production build | +| `pnpm start` | Serve the production build | +| `pnpm lint` | Run ESLint | +| `pnpm format` | Format everything with Prettier | +| `pnpm format:check` | Fail if anything is unformatted | + +Code style is 4 spaces, enforced by Prettier (`.prettierrc`), EditorConfig and VS Code settings — `pnpm format` fixes everything. + +## Docker + +```bash +docker build -t fristynet . +docker run --rm -p 3000:3000 fristynet +``` + +No need to build it yourself though — CI publishes every `main` push: + +```bash +docker pull git.fristy.net/fristy/fristynet:latest +``` + +## CI/CD + +Pushes to `main` (and `v*` tags) run format check, lint and build first. If those pass, the Docker image is built and pushed to the Gitea registry: + +- `git.fristy.net/fristy/fristynet:latest` on every `main` push +- `git.fristy.net/fristy/fristynet:` on tags like `v1.2.0` +- `git.fristy.net/fristy/fristynet:` for every pushed commit + +Pull requests only run the checks — nothing is pushed. + +## License + +Apache-2.0 — see [LICENSE](./LICENSE). diff --git a/app/error.tsx b/app/error.tsx new file mode 100644 index 0000000..ddc2232 --- /dev/null +++ b/app/error.tsx @@ -0,0 +1,22 @@ +"use client"; + +export default function Error({ + reset, +}: { + error: Error & { digest?: string }; + reset: () => void; +}) { + return ( +
+

{"// 500"}

+

Bir şeyler ters gitti / Something went wrong

+ +
+ ); +} diff --git a/app/globals.css b/app/globals.css new file mode 100644 index 0000000..c73b912 --- /dev/null +++ b/app/globals.css @@ -0,0 +1,43 @@ +@import "tailwindcss"; + +@theme { + --color-void: #060913; + --color-panel: #0c1222; + --color-blurple: #5865f2; + --color-blurple-soft: #8891ff; + --color-mint: #57f287; + --font-sans: var(--font-cascadia), ui-monospace, SFMono-Regular, monospace; + --font-mono: var(--font-cascadia), ui-monospace, SFMono-Regular, monospace; +} + +html { + scroll-behavior: smooth; +} + +body { + background-color: var(--color-void); + color: #e8ecf6; + font-family: var(--font-sans); + background-image: + radial-gradient(60rem 30rem at 80% -10%, rgba(88, 101, 242, 0.16), transparent 60%), + radial-gradient(50rem 26rem at 10% 0%, rgba(87, 242, 135, 0.07), transparent 60%); + background-attachment: fixed; +} + +::selection { + background: rgba(88, 101, 242, 0.45); +} + +::-webkit-scrollbar { + width: 10px; +} +::-webkit-scrollbar-track { + background: var(--color-void); +} +::-webkit-scrollbar-thumb { + background: #232c47; + border-radius: 8px; +} +::-webkit-scrollbar-thumb:hover { + background: var(--color-blurple); +} diff --git a/app/icon.png b/app/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f228a29339806a4fe2df7dd1cbde32e63a7b5ca9 GIT binary patch literal 55724 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 literal 0 HcmV?d00001 diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 0000000..d2f7779 --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,39 @@ +import type { Metadata } from "next"; +import { Cascadia_Mono } from "next/font/google"; +import "./globals.css"; +import { getDictionary } from "@/lib/i18n/get-dictionary"; +import { getLocale } from "@/lib/i18n/get-locale"; +import { SITE_URL } from "@/lib/site"; + +const cascadiaCode = Cascadia_Mono({ + variable: "--font-cascadia", + subsets: ["latin"], +}); + +export async function generateMetadata(): Promise { + const locale = await getLocale(); + const dict = getDictionary(locale); + return { + metadataBase: new URL(SITE_URL), + title: { + default: dict.meta.title, + template: "%s · fristy.net", + }, + description: dict.meta.description, + openGraph: { + title: dict.meta.title, + description: dict.meta.description, + url: "/", + type: "website", + }, + }; +} + +export default async function RootLayout({ children }: LayoutProps<"/">) { + const locale = await getLocale(); + return ( + + {children} + + ); +} diff --git a/app/loading.tsx b/app/loading.tsx new file mode 100644 index 0000000..987da53 --- /dev/null +++ b/app/loading.tsx @@ -0,0 +1,15 @@ +export default function Loading() { + return ( +
+
+
+
+
+
+
+
+ ); +} diff --git a/app/not-found.tsx b/app/not-found.tsx new file mode 100644 index 0000000..01531cd --- /dev/null +++ b/app/not-found.tsx @@ -0,0 +1,30 @@ +import Link from "next/link"; +import { SiteFooter } from "@/components/site-footer"; +import { SiteHeader } from "@/components/site-header"; +import { getDictionary } from "@/lib/i18n/get-dictionary"; +import { getLocale } from "@/lib/i18n/get-locale"; + +export default async function NotFound() { + const locale = await getLocale(); + const dict = getDictionary(locale); + return ( +
+ +
+

{"// 404"}

+

+ 404 +

+

{dict.notFound.title}

+

{dict.notFound.subtitle}

+ + {dict.notFound.home} + +
+ +
+ ); +} diff --git a/app/page.tsx b/app/page.tsx new file mode 100644 index 0000000..34761f8 --- /dev/null +++ b/app/page.tsx @@ -0,0 +1,68 @@ +import { ContactSection } from "@/components/contact-section"; +import { DiscordCard } from "@/components/discord-card"; +import { ProjectsSection } from "@/components/projects-section"; +import { SectionHeading } from "@/components/section-heading"; +import { SiteFooter } from "@/components/site-footer"; +import { SiteHeader } from "@/components/site-header"; +import { getRepos } from "@/lib/gitea"; +import { getDictionary } from "@/lib/i18n/get-dictionary"; +import { getLocale } from "@/lib/i18n/get-locale"; +import { DISCORD_ID, discordProfileUrl, getLanyard } from "@/lib/lanyard"; + +export default async function Home() { + const locale = await getLocale(); + const dict = getDictionary(locale); + const [repos, presence] = await Promise.all([getRepos(), getLanyard()]); + + return ( +
+ +
+
+

{dict.hero.greeting}

+

+ fristy +

+

{dict.hero.tagline}

+ +
+ +
+ + {dict.discord.profile} → + + } + /> + +
+ + + + +
+ +
+ ); +} diff --git a/components/contact-section.tsx b/components/contact-section.tsx new file mode 100644 index 0000000..52b36c7 --- /dev/null +++ b/components/contact-section.tsx @@ -0,0 +1,87 @@ +import Image from "next/image"; +import type { Dictionary } from "@/lib/i18n/get-dictionary"; +import { + CONTACT_EMAIL, + DISCORD_SERVER_URL, + GITHUB_URL, + GITEA_PROFILE_URL, + SPOTIFY_URL, + STEAM_URL, +} from "@/lib/site"; +import { CopyEmail } from "./copy-email"; +import { SectionHeading } from "./section-heading"; + +export function ContactSection({ dict }: { dict: Dictionary["contact"] }) { + const entries = [ + { label: dict.github, sub: "@fristyxd", href: GITHUB_URL, icon: "/icons/github.svg" }, + { + label: dict.discord, + sub: "discord.gg/fristy", + href: DISCORD_SERVER_URL, + icon: "/icons/discord.svg", + }, + { + label: dict.gitea, + sub: "git.fristy.net", + href: GITEA_PROFILE_URL, + icon: "/icons/gitea.svg", + }, + { + label: dict.spotify, + sub: "open.spotify.com", + href: SPOTIFY_URL, + icon: "/icons/spotify.svg", + }, + { + label: dict.steam, + sub: "fristylikeaillusion", + href: STEAM_URL, + icon: "/icons/steam.svg", + }, + ]; + + return ( +
+ +
+
+ +
+

{dict.email}

+ + {CONTACT_EMAIL} + +
+ +
+ {entries.map((entry) => ( + + +
+

{entry.label}

+

+ {entry.sub} +

+
+ + → + +
+ ))} +
+
+ ); +} diff --git a/components/copy-email.tsx b/components/copy-email.tsx new file mode 100644 index 0000000..bf5f78c --- /dev/null +++ b/components/copy-email.tsx @@ -0,0 +1,40 @@ +"use client"; + +import { useState } from "react"; + +export function CopyEmail({ + email, + copyLabel, + copiedLabel, +}: { + email: string; + copyLabel: string; + copiedLabel: string; +}) { + const [copied, setCopied] = useState(false); + + async function copy() { + try { + await navigator.clipboard.writeText(email); + } catch { + const area = document.createElement("textarea"); + area.value = email; + document.body.appendChild(area); + area.select(); + document.execCommand("copy"); + document.body.removeChild(area); + } + setCopied(true); + window.setTimeout(() => setCopied(false), 2000); + } + + return ( + + ); +} diff --git a/components/discord-card.tsx b/components/discord-card.tsx new file mode 100644 index 0000000..36c9b32 --- /dev/null +++ b/components/discord-card.tsx @@ -0,0 +1,202 @@ +"use client"; + +import Image from "next/image"; +import { useEffect, useState } from "react"; +import type { Dictionary } from "@/lib/i18n/get-dictionary"; +import { + activityImageUrl, + discordAvatarUrl, + lanyardUrl, + type DiscordStatus, + type LanyardActivity, + type LanyardData, +} from "@/lib/lanyard"; + +const STATUS_DOT: Record = { + online: "bg-emerald-400", + idle: "bg-amber-400", + dnd: "bg-rose-500", + offline: "bg-zinc-500", +}; + +const POLL_MS = 15_000; + +function formatElapsed(start: number): string { + const seconds = Math.max(0, Math.floor((Date.now() - start) / 1000)); + const hours = Math.floor(seconds / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + if (hours > 0) { + return `${hours}h ${minutes}m`; + } + if (minutes > 0) { + return `${minutes}m`; + } + return "<1m"; +} + +function ActivityRow({ activity }: { activity: LanyardActivity }) { + const large = activityImageUrl(activity, false); + const small = activityImageUrl(activity, true); + return ( +
+ {large ? ( +
+ {activity.assets?.large_text + {small ? ( + {activity.assets?.small_text + ) : null} +
+ ) : null} +
+

{activity.name}

+ {activity.details ? ( +

{activity.details}

+ ) : null} + {activity.state ? ( +

{activity.state}

+ ) : null} + {activity.timestamps?.start ? ( +

+ {formatElapsed(activity.timestamps.start)} +

+ ) : null} +
+
+ ); +} + +export function DiscordCard({ + initial, + dict, +}: { + initial: LanyardData | null; + dict: Dictionary["discord"]; +}) { + const [data, setData] = useState(initial); + + useEffect(() => { + async function poll(): Promise { + const response = await fetch(lanyardUrl(), { cache: "no-store" }); + if (!response.ok) { + return; + } + const json = (await response.json()) as { success: boolean; data: LanyardData }; + if (json.success) { + setData(json.data); + } + } + function tick(): void { + void poll().catch(() => undefined); + } + const timer = window.setInterval(tick, POLL_MS); + return () => window.clearInterval(timer); + }, []); + + if (!data) { + return ( +
+ {dict.offline} +
+ ); + } + + const user = data.discord_user; + const displayName = user.display_name ?? user.global_name ?? user.username; + const customStatus = data.activities.find((a) => a.type === 4); + const games = data.activities.filter((a) => a.type === 0); + + return ( +
+
+
+ {displayName} + +
+
+

{displayName}

+

@{user.username}

+

+ + {dict[data.discord_status]} + · + {dict.live} +

+
+
+ + {customStatus?.state ? ( +

+ + {dict.customStatus} + + {customStatus.emoji?.name ? ( + {customStatus.emoji.name} + ) : null} + {customStatus.state} +

+ ) : null} + + {games.length > 0 ? ( +
+

+ {dict.playing} +

+ {games.map((game) => ( + + ))} +
+ ) : null} + + {data.listening_to_spotify && data.spotify ? ( +
+ {data.spotify.album_art_url ? ( + {data.spotify.album} + ) : null} +
+

+ {dict.listening} Spotify +

+

{data.spotify.song}

+

+ {data.spotify.artist} — {data.spotify.album} +

+
+
+ ) : null} + + {games.length === 0 && !data.listening_to_spotify && !customStatus?.state ? ( +

{dict.noActivity}

+ ) : null} +
+ ); +} diff --git a/components/language-switcher.tsx b/components/language-switcher.tsx new file mode 100644 index 0000000..accaf6b --- /dev/null +++ b/components/language-switcher.tsx @@ -0,0 +1,41 @@ +"use client"; + +import { useRouter } from "next/navigation"; +import { LOCALES, LOCALE_LABELS, type Locale } from "@/lib/i18n/locales"; +import { setLocaleCookie } from "@/lib/i18n/set-locale-cookie"; + +export function LanguageSwitcher({ current }: { current: Locale }) { + const router = useRouter(); + + async function switchTo(locale: Locale) { + if (locale === current) { + return; + } + await setLocaleCookie(locale); + router.refresh(); + } + + return ( +
+ {LOCALES.map((locale) => ( + + ))} +
+ ); +} diff --git a/components/projects-section.tsx b/components/projects-section.tsx new file mode 100644 index 0000000..f4d199f --- /dev/null +++ b/components/projects-section.tsx @@ -0,0 +1,105 @@ +import type { Dictionary } from "@/lib/i18n/get-dictionary"; +import type { Locale } from "@/lib/i18n/locales"; +import type { GiteaRepo } from "@/lib/gitea"; +import { SectionHeading } from "./section-heading"; + +const LANGUAGE_COLORS: Record = { + "C#": "#178600", + TypeScript: "#3178c6", + JavaScript: "#f1e05a", + Python: "#3572a5", + Rust: "#dea584", + Go: "#00add8", +}; + +export function ProjectsSection({ + repos, + dict, + locale, +}: { + repos: GiteaRepo[]; + dict: Dictionary["projects"]; + locale: Locale; +}) { + const dateFormat = new Intl.DateTimeFormat(locale, { dateStyle: "medium" }); + + return ( +
+ + {repos.length === 0 ? ( +

+ {dict.empty} +

+ ) : ( +
+ {repos.map((repo) => ( +
+

{repo.fullName}

+

+ + {repo.name} + +

+

+ {repo.description ?? dict.noDescription} +

+
+ {repo.language ? ( + + + {repo.language} + + ) : null} + + ★ {repo.stars} {dict.stars} + + + ⑂ {repo.forks} {dict.forks} + + + {dict.updated}: {dateFormat.format(new Date(repo.updatedAt))} + +
+
+ + {repo.website ? ( + + {dict.viewWebsite} ↗ + + ) : null} + + + {dict.viewOnGitea} → + +
+
+ ))} +
+ )} +
+ ); +} diff --git a/components/section-heading.tsx b/components/section-heading.tsx new file mode 100644 index 0000000..88dfc34 --- /dev/null +++ b/components/section-heading.tsx @@ -0,0 +1,27 @@ +import type { ReactNode } from "react"; + +export function SectionHeading({ + kicker, + title, + subtitle, + action, +}: { + kicker: string; + title: string; + subtitle?: string; + action?: ReactNode; +}) { + return ( +
+

+ {"// "} + {kicker} +

+
+

{title}

+ {action} +
+ {subtitle ?

{subtitle}

: null} +
+ ); +} diff --git a/components/site-footer.tsx b/components/site-footer.tsx new file mode 100644 index 0000000..d6d9730 --- /dev/null +++ b/components/site-footer.tsx @@ -0,0 +1,50 @@ +import type { Dictionary } from "@/lib/i18n/get-dictionary"; +import { APACHE_LICENSE_URL, SITE_URL, SOURCE_URL } from "@/lib/site"; + +export function SiteFooter({ dict }: { dict: Dictionary["footer"] }) { + const year = new Date().getFullYear(); + const licenseLink = ( + + {dict.licenseLabel} + + ); + const sourceLink = ( + + {dict.sourceLabel} + + ); + return ( +
+

+ © {year}{" "} + + fristy.net + {" "} + · {dict.rights} +

+

+ {dict.prefix}{" "} + {dict.licenseFirst ? ( + <> + {licenseLink} {dict.middle} {sourceLink} + + ) : ( + <> + {sourceLink} {dict.middle} {licenseLink} + + )} + {dict.suffix}. +

+
+ ); +} diff --git a/components/site-header.tsx b/components/site-header.tsx new file mode 100644 index 0000000..cd44e47 --- /dev/null +++ b/components/site-header.tsx @@ -0,0 +1,27 @@ +import type { Dictionary } from "@/lib/i18n/get-dictionary"; +import type { Locale } from "@/lib/i18n/locales"; +import { LanguageSwitcher } from "./language-switcher"; + +export function SiteHeader({ dict, locale }: { dict: Dictionary["nav"]; locale: Locale }) { + return ( +
+ +
+ ); +} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..5204461 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,13 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import nextVitals from "eslint-config-next/core-web-vitals"; +import nextTs from "eslint-config-next/typescript"; +import prettierConfig from "eslint-config-prettier/flat"; + +const eslintConfig = defineConfig([ + ...nextVitals, + ...nextTs, + globalIgnores([".next/**", "out/**", "build/**", "next-env.d.ts"]), + prettierConfig, +]); + +export default eslintConfig; diff --git a/lib/gitea.ts b/lib/gitea.ts new file mode 100644 index 0000000..3d8433b --- /dev/null +++ b/lib/gitea.ts @@ -0,0 +1,61 @@ +const GITEA_API = "https://git.fristy.net/api/v1"; +const GITEA_USER = "fristy"; + +const EXCLUDED_REPOS = new Set([".profile"]); + +export interface GiteaRepo { + id: number; + name: string; + fullName: string; + description: string | null; + language: string | null; + htmlUrl: string; + website: string | null; + stars: number; + forks: number; + updatedAt: string; +} + +interface GiteaApiRepo { + id: number; + name: string; + full_name: string; + description: string | null; + language: string | null; + html_url: string; + website: string; + stars_count: number; + forks_count: number; + updated_at: string; +} + +export async function getRepos(): Promise { + try { + const response = await fetch( + `${GITEA_API}/users/${GITEA_USER}/repos?limit=50&sort=updated&order=desc`, + { next: { revalidate: 3600 } }, + ); + if (!response.ok) { + console.error(`cannot fetch gitea repos: ${response.status}`); + return []; + } + const data = (await response.json()) as GiteaApiRepo[]; + return data + .filter((repo) => !EXCLUDED_REPOS.has(repo.name)) + .map((repo) => ({ + id: repo.id, + name: repo.name, + fullName: repo.full_name, + description: repo.description, + language: repo.language, + htmlUrl: repo.html_url, + website: repo.website || null, + stars: repo.stars_count, + forks: repo.forks_count, + updatedAt: repo.updated_at, + })); + } catch (error) { + console.error("cannot fetch gitea repos:", error); + return []; + } +} diff --git a/lib/i18n/dictionaries/de.json b/lib/i18n/dictionaries/de.json new file mode 100644 index 0000000..b72e276 --- /dev/null +++ b/lib/i18n/dictionaries/de.json @@ -0,0 +1,66 @@ +{ + "meta": { + "title": "fristy.net — fristy love you", + "description": "Fristys persönliche Ecke: Projekte, Live-Discord-Status und Kontakt." + }, + "nav": { + "projects": "Projekte", + "discord": "Discord", + "contact": "Kontakt" + }, + "hero": { + "greeting": "Hey, ich bin", + "tagline": "Ich programmiere als Hobby. Das ist meine persönliche Ecke: Projekte, Live-Discord-Status und Kontaktinfos.", + "ctaProjects": "Projekte Ansehen", + "ctaContact": "Kontakt" + }, + "discord": { + "title": "Discord", + "live": "Live", + "online": "Online", + "idle": "Abwesend", + "dnd": "Bitte Nicht Stören", + "offline": "Offline", + "playing": "Spielt", + "listening": "Hört", + "customStatus": "Status", + "noActivity": "Gerade still... Hier läuft wohl nichts.", + "profile": "Profil Ansehen" + }, + "projects": { + "title": "Projekte", + "subtitle": "Meine Open-Source-Projekte auf git.fristy.net. Die Liste aktualisiert sich automatisch.", + "updated": "Aktualisiert", + "stars": "Sterne", + "forks": "Forks", + "viewOnGitea": "Auf Gitea Öffnen", + "viewWebsite": "Webseite Öffnen", + "empty": "Noch keine öffentlichen Repos.", + "noDescription": "Keine Beschreibung." + }, + "contact": { + "title": "Kontakt & Social", + "email": "E-Mail", + "discord": "Discord", + "github": "GitHub", + "gitea": "Gitea", + "spotify": "Spotify", + "steam": "Steam", + "copy": "Kopieren", + "copied": "Kopiert!" + }, + "footer": { + "rights": "Alle Rechte vorbehalten", + "prefix": "Diese Seite ist", + "licenseLabel": "Apache 2.0", + "middle": "unter der", + "sourceLabel": "Open Source", + "suffix": "-Lizenz", + "licenseFirst": false + }, + "notFound": { + "title": "Seite Nicht Gefunden", + "subtitle": "Hier gibt es keine Seite, aber du bist nicht verloren.", + "home": "Zurück Nach Hause" + } +} diff --git a/lib/i18n/dictionaries/en.json b/lib/i18n/dictionaries/en.json new file mode 100644 index 0000000..1f68f94 --- /dev/null +++ b/lib/i18n/dictionaries/en.json @@ -0,0 +1,66 @@ +{ + "meta": { + "title": "fristy.net — fristy love you", + "description": "Fristy's personal corner: projects, live Discord status and contact." + }, + "nav": { + "projects": "Projects", + "discord": "Discord", + "contact": "Contact" + }, + "hero": { + "greeting": "Hey, I'm", + "tagline": "I write code as a hobby. This is my personal corner: my projects, live Discord status and contact info.", + "ctaProjects": "See Projects", + "ctaContact": "Contact" + }, + "discord": { + "title": "Discord", + "live": "Live", + "online": "Online", + "idle": "Idle", + "dnd": "Do Not Disturb", + "offline": "Offline", + "playing": "Playing", + "listening": "Listening To", + "customStatus": "Status", + "noActivity": "Quiet right now... Nothing seems to be going on.", + "profile": "View Profile" + }, + "projects": { + "title": "Projects", + "subtitle": "My open-source projects on git.fristy.net. The list updates automatically.", + "updated": "Updated", + "stars": "Stars", + "forks": "Forks", + "viewOnGitea": "Open on Gitea", + "viewWebsite": "Open Website", + "empty": "No public repos to show yet.", + "noDescription": "No description." + }, + "contact": { + "title": "Contact & Social", + "email": "Email", + "discord": "Discord", + "github": "GitHub", + "gitea": "Gitea", + "spotify": "Spotify", + "steam": "Steam", + "copy": "Copy", + "copied": "Copied!" + }, + "footer": { + "rights": "All rights reserved", + "prefix": "This site is", + "licenseLabel": "Apache 2.0", + "middle": "under the", + "sourceLabel": "open source", + "suffix": " license", + "licenseFirst": false + }, + "notFound": { + "title": "Page Not Found", + "subtitle": "There's no page here, but you're not lost. Home is right there.", + "home": "Back Home" + } +} diff --git a/lib/i18n/dictionaries/tr.json b/lib/i18n/dictionaries/tr.json new file mode 100644 index 0000000..9f81201 --- /dev/null +++ b/lib/i18n/dictionaries/tr.json @@ -0,0 +1,66 @@ +{ + "meta": { + "title": "fristy.net - fristy love you", + "description": "Fristy'nin kişisel köşesi: projeler, canlı Discord durumu ve iletişim." + }, + "nav": { + "projects": "Projeler", + "discord": "Discord", + "contact": "İletişim" + }, + "hero": { + "greeting": "Selam, ben", + "tagline": "Hobi olarak kod yazıyorum. Burası kişisel köşem: projelerim, anlık Discord durumum ve iletişim bilgilerim.", + "ctaProjects": "Projelere Bak", + "ctaContact": "İletişim" + }, + "discord": { + "title": "Discord", + "live": "Canlı", + "online": "Çevrimiçi", + "idle": "Boşta", + "dnd": "Rahatsız Etmeyin", + "offline": "Çevrimdışı", + "playing": "Oynuyor", + "listening": "Dinliyor", + "customStatus": "Durum", + "noActivity": "Şu an sessizlik... Ortalıkta bir şey yok gibi.", + "profile": "Profile Git" + }, + "projects": { + "title": "Projeler", + "subtitle": "Açık kaynak projelerim git.fristy.net üzerinde. Liste otomatik güncelleniyor.", + "updated": "Güncellendi", + "stars": "Yıldız", + "forks": "Çatal", + "viewOnGitea": "Gitea'da Aç", + "viewWebsite": "Web Sitesini Aç", + "empty": "Henüz gösterilecek public repo yok.", + "noDescription": "Açıklama yok." + }, + "contact": { + "title": "İletişim ve Sosyal", + "email": "E-Posta", + "discord": "Discord", + "github": "GitHub", + "gitea": "Gitea", + "spotify": "Spotify", + "steam": "Steam", + "copy": "Kopyala", + "copied": "Kopyalandı!" + }, + "footer": { + "rights": "Tüm Hakları Saklıdır", + "prefix": "Bu site", + "licenseLabel": "Apache 2.0", + "middle": "lisansı altında", + "sourceLabel": "açık kaynak", + "suffix": " kodludur", + "licenseFirst": true + }, + "notFound": { + "title": "Sayfa Bulunamadı", + "subtitle": "Böyle bir sayfa yok, ama kaybolmadın. Ana sayfa hemen şurada.", + "home": "Ana Sayfaya Dön" + } +} diff --git a/lib/i18n/get-dictionary.ts b/lib/i18n/get-dictionary.ts new file mode 100644 index 0000000..fb53f37 --- /dev/null +++ b/lib/i18n/get-dictionary.ts @@ -0,0 +1,12 @@ +import type { Locale } from "./locales"; +import tr from "./dictionaries/tr.json"; +import en from "./dictionaries/en.json"; +import de from "./dictionaries/de.json"; + +const dictionaries = { tr, en, de } as const; + +export type Dictionary = typeof tr; + +export function getDictionary(locale: Locale): Dictionary { + return dictionaries[locale] ?? dictionaries.tr; +} diff --git a/lib/i18n/get-locale.ts b/lib/i18n/get-locale.ts new file mode 100644 index 0000000..0c89cb4 --- /dev/null +++ b/lib/i18n/get-locale.ts @@ -0,0 +1,11 @@ +import { cookies } from "next/headers"; +import { DEFAULT_LOCALE, LOCALE_COOKIE, isLocale, type Locale } from "./locales"; + +export async function getLocale(): Promise { + const store = await cookies(); + const raw = store.get(LOCALE_COOKIE)?.value; + if (raw && isLocale(raw)) { + return raw; + } + return DEFAULT_LOCALE; +} diff --git a/lib/i18n/locales.ts b/lib/i18n/locales.ts new file mode 100644 index 0000000..163c387 --- /dev/null +++ b/lib/i18n/locales.ts @@ -0,0 +1,48 @@ +export const LOCALES = ["tr", "en", "de"] as const; + +export type Locale = (typeof LOCALES)[number]; + +export const DEFAULT_LOCALE: Locale = "tr"; + +export const LOCALE_COOKIE = "locale"; + +export const LOCALE_LABELS: Record = { + tr: "TR", + en: "EN", + de: "DE", +}; + +export function isLocale(value: string): value is Locale { + return (LOCALES as readonly string[]).includes(value); +} + +export function matchLocale(acceptLanguage: string | null): Locale { + if (!acceptLanguage) { + return DEFAULT_LOCALE; + } + const preferences = acceptLanguage + .split(",") + .map((part) => { + const [range, ...params] = part.trim().split(";"); + let q = 1; + for (const param of params) { + const match = param.trim().match(/^q=([0-9.]+)$/); + if (match) { + q = Number(match[1]); + } + } + return { range: range.toLowerCase(), q }; + }) + .sort((a, b) => b.q - a.q); + + for (const { range } of preferences) { + if (range === "*") { + return DEFAULT_LOCALE; + } + const base = range.split("-")[0]; + if (isLocale(base)) { + return base; + } + } + return DEFAULT_LOCALE; +} diff --git a/lib/i18n/set-locale-cookie.ts b/lib/i18n/set-locale-cookie.ts new file mode 100644 index 0000000..f3fe83c --- /dev/null +++ b/lib/i18n/set-locale-cookie.ts @@ -0,0 +1,16 @@ +"use server"; + +import { cookies } from "next/headers"; +import { LOCALE_COOKIE, isLocale, type Locale } from "./locales"; + +export async function setLocaleCookie(locale: Locale): Promise { + if (!isLocale(locale)) { + return; + } + const store = await cookies(); + store.set(LOCALE_COOKIE, locale, { + path: "/", + maxAge: 60 * 60 * 24 * 365, + sameSite: "lax", + }); +} diff --git a/lib/lanyard.ts b/lib/lanyard.ts new file mode 100644 index 0000000..9d54b40 --- /dev/null +++ b/lib/lanyard.ts @@ -0,0 +1,108 @@ +export const DISCORD_ID = "1014549805608992901"; + +const LANYARD_API = `https://api.lanyard.rest/v1/users/${DISCORD_ID}`; + +export type DiscordStatus = "online" | "idle" | "dnd" | "offline"; + +export interface LanyardEmoji { + name: string; + id?: string; + animated?: boolean; +} + +export interface LanyardActivityAssets { + large_image?: string; + large_text?: string; + small_image?: string; + small_text?: string; +} + +export interface LanyardActivity { + id: string; + name: string; + type: number; + state?: string | null; + details?: string | null; + emoji?: LanyardEmoji | null; + timestamps?: { start?: number; end?: number } | null; + application_id?: string | null; + assets?: LanyardActivityAssets | null; +} + +export function activityImageUrl(activity: LanyardActivity, small: boolean): string | null { + const key = small ? activity.assets?.small_image : activity.assets?.large_image; + if (!key) { + return null; + } + if (key.startsWith("mp:")) { + return `https://media.discordapp.net/external/${key.slice(3)}`; + } + if (key.startsWith("spotify:")) { + return `https://i.scdn.co/image/${key.slice("spotify:".length)}`; + } + if (activity.application_id) { + return `https://cdn.discordapp.com/app-assets/${activity.application_id}/${key}.png`; + } + return null; +} + +export interface LanyardSpotify { + track_id: string; + song: string; + artist: string; + album: string; + album_art_url: string | null; +} + +export interface LanyardData { + discord_user: { + id: string; + username: string; + global_name: string | null; + display_name: string | null; + discriminator: string; + avatar: string | null; + bot: boolean; + }; + activities: LanyardActivity[]; + discord_status: DiscordStatus; + active_on_discord_desktop: boolean; + active_on_discord_mobile: boolean; + active_on_discord_web: boolean; + listening_to_spotify: boolean; + spotify: LanyardSpotify | null; +} + +interface LanyardResponse { + success: boolean; + data: LanyardData; +} + +export async function getLanyard(): Promise { + try { + const response = await fetch(LANYARD_API, { next: { revalidate: 10 } }); + if (!response.ok) { + return null; + } + const json = (await response.json()) as LanyardResponse; + return json.success ? json.data : null; + } catch { + return null; + } +} + +export function lanyardUrl(): string { + return LANYARD_API; +} + +export function discordAvatarUrl(userId: string, avatarHash: string | null, size = 128): string { + if (!avatarHash) { + return `https://cdn.discordapp.com/embed/avatars/0.png?size=${size}`; + } + const extension = avatarHash.startsWith("a_") ? "gif" : "png"; + return `https://cdn.discordapp.com/avatars/${userId}/${avatarHash}.${extension}?size=${size}`; +} + +export function discordProfileUrl(userId: string): string { + return `https://discord.com/users/${userId}`; +} diff --git a/lib/site.ts b/lib/site.ts new file mode 100644 index 0000000..f4061c9 --- /dev/null +++ b/lib/site.ts @@ -0,0 +1,9 @@ +export const SITE_URL = "https://fristy.net"; +export const CONTACT_EMAIL = "iletisim@fristy.net"; +export const GITEA_PROFILE_URL = "https://git.fristy.net/fristy"; +export const SOURCE_URL = "https://git.fristy.net/fristy/fristynet"; +export const GITHUB_URL = "https://github.com/fristyxd"; +export const DISCORD_SERVER_URL = "https://discord.gg/fristy"; +export const SPOTIFY_URL = "https://open.spotify.com/user/gayiw5j9i0rtvyra6gfzhpfwf"; +export const STEAM_URL = "https://steamcommunity.com/id/fristylikeaillusion"; +export const APACHE_LICENSE_URL = "https://www.apache.org/licenses/LICENSE-2.0"; diff --git a/next.config.ts b/next.config.ts new file mode 100644 index 0000000..c245b97 --- /dev/null +++ b/next.config.ts @@ -0,0 +1,15 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + output: "standalone", + images: { + remotePatterns: [ + { protocol: "https", hostname: "cdn.discordapp.com" }, + { protocol: "https", hostname: "media.discordapp.net" }, + { protocol: "https", hostname: "git.fristy.net" }, + { protocol: "https", hostname: "i.scdn.co" }, + ], + }, +}; + +export default nextConfig; diff --git a/package.json b/package.json new file mode 100644 index 0000000..2b7dc86 --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "name": "fristynet", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "eslint", + "format": "prettier --write .", + "format:check": "prettier --check ." + }, + "dependencies": { + "next": "16.3.4", + "react": "19.2.8", + "react-dom": "19.2.8" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4.3.3", + "@types/node": "^26.5.0", + "@types/react": "^19.2.18", + "@types/react-dom": "^19.2.7", + "eslint": "^9.39.5", + "eslint-config-next": "16.3.4", + "eslint-config-prettier": "^10.1.8", + "prettier": "^3.9.6", + "tailwindcss": "^4.3.3", + "typescript": "^6.0.3" + }, + "packageManager": "pnpm@11.2.2" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..c16c6f2 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4207 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + next: + specifier: 16.3.4 + version: 16.3.4(@babel/core@7.29.7)(@types/node@26.5.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + react: + specifier: 19.2.8 + version: 19.2.8 + react-dom: + specifier: 19.2.8 + version: 19.2.8(react@19.2.8) + devDependencies: + '@tailwindcss/postcss': + specifier: ^4.3.3 + version: 4.3.3 + '@types/node': + specifier: ^26.5.0 + version: 26.5.0 + '@types/react': + specifier: ^19.2.18 + version: 19.2.18 + '@types/react-dom': + specifier: ^19.2.7 + version: 19.2.7(@types/react@19.2.18) + eslint: + specifier: ^9.39.5 + version: 9.39.5(jiti@2.7.0) + eslint-config-next: + specifier: 16.3.4 + version: 16.3.4(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@9.39.5(jiti@2.7.0)) + prettier: + specifier: ^3.9.6 + version: 3.9.6 + tailwindcss: + specifier: ^4.3.3 + version: 4.3.3 + typescript: + specifier: ^6.0.3 + version: 6.0.3 + +packages: + + '@alloc/quick-lru@5.3.0': + resolution: {integrity: sha512-U4+70Pc5ZS9osnCBCE5Jha/ciHM+Yp+CNMNC/7HvYbNRk1Ldd+f7qO65W5qfhu/TCv+/ozljlXXe9Nj8419DMA==} + engines: {node: '>=10'} + + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.8': + resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.8': + resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.8': + resolution: {integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.8': + resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} + engines: {node: '>=6.9.0'} + + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@eslint-community/eslint-utils@4.10.1': + resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.7': + resolution: {integrity: sha512-F42g89Qd5oAWtp0k0nnSrjziAKza7w8SVT4mStc18LZMaRb4J1HQAHLCalEtDCxrTuksx7NU9qsmeLwpOfPqWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.5': + resolution: {integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.35.4': + resolution: {integrity: sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.35.4': + resolution: {integrity: sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [darwin] + + '@img/sharp-freebsd-wasm32@0.35.4': + resolution: {integrity: sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==} + engines: {node: '>=20.9.0'} + os: [freebsd] + + '@img/sharp-libvips-darwin-arm64@1.3.3': + resolution: {integrity: sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.3.3': + resolution: {integrity: sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.3.3': + resolution: {integrity: sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.3.3': + resolution: {integrity: sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-ppc64@1.3.3': + resolution: {integrity: sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-riscv64@1.3.3': + resolution: {integrity: sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-s390x@1.3.3': + resolution: {integrity: sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.3.3': + resolution: {integrity: sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linuxmusl-arm64@1.3.3': + resolution: {integrity: sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-libvips-linuxmusl-x64@1.3.3': + resolution: {integrity: sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-linux-arm64@0.35.4': + resolution: {integrity: sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.35.4': + resolution: {integrity: sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==} + engines: {node: '>=20.9.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-ppc64@0.35.4': + resolution: {integrity: sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==} + engines: {node: '>=20.9.0'} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-riscv64@0.35.4': + resolution: {integrity: sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==} + engines: {node: '>=20.9.0'} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-s390x@0.35.4': + resolution: {integrity: sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==} + engines: {node: '>=20.9.0'} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.35.4': + resolution: {integrity: sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linuxmusl-arm64@0.35.4': + resolution: {integrity: sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@img/sharp-linuxmusl-x64@0.35.4': + resolution: {integrity: sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@img/sharp-wasm32@0.35.4': + resolution: {integrity: sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==} + engines: {node: '>=20.9.0'} + + '@img/sharp-webcontainers-wasm32@0.35.4': + resolution: {integrity: sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==} + engines: {node: '>=20.9.0'} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.35.4': + resolution: {integrity: sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==} + engines: {node: '>=20.9.0'} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.35.4': + resolution: {integrity: sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==} + engines: {node: ^20.9.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.35.4': + resolution: {integrity: sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==} + engines: {node: '>=20.9.0'} + cpu: [x64] + os: [win32] + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.6.0': + resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@napi-rs/wasm-runtime@1.2.3': + resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} + peerDependencies: + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4 + + '@next/env@16.3.4': + resolution: {integrity: sha512-cjWZnUUa6jZq2kFaNe/ZyJdZonOZ/QoN0Zka2nz/FLOrfx14pQuM9c5RaSVkWMqgdt4ksgPAMWPyHSs/CyV48Q==} + + '@next/eslint-plugin-next@16.3.4': + resolution: {integrity: sha512-szW9y2Aumu4z88YXfTzcFsgUAg2k64uzbtcO5L9f1AKS4w/GUKJcbFllRflROVyNPgJtGOnvNxiyp3v6b+prIA==} + + '@next/swc-darwin-arm64@16.3.4': + resolution: {integrity: sha512-iBr3I5LZNk5/bgl5//iTgD2tcym14MX0Xo7fD//u9dYAEgGzza1y9oywluPtf74YnOswVdH1908aK9xVz7zQTw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@16.3.4': + resolution: {integrity: sha512-2dpiSyl2Jw/NrBPaU2MAKGSa+2MR82pJIn4Sm5Rjr+gxAeuh0z158Su3Z2O8zn7UNNq+ej4bToed6RcRN/Lydg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@16.3.4': + resolution: {integrity: sha512-+t+U8HZT+fApePCS5h89CSH3datz29MkzyfCn+6fpsZBG/oiEOhINcb9rtkv6sdpToLGFn2e6146NzaKCXkqrA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-arm64-musl@16.3.4': + resolution: {integrity: sha512-mx03GNs1ocQA5JQ4FxDMmIsNkdrZh8cuezKCrId28e5/gIPU/l7Kcy2+vmCCzdjnnmXJy+iOAu+7K0QppO6Urg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@next/swc-linux-x64-gnu@16.3.4': + resolution: {integrity: sha512-YIhGY6fSMfha52bnVxnzc9zaVBzJg+cqQTOD8tXIBSx4fuv0pVMxQTE0PaS59YhnMOiYiG09IMwxJAf/CFm/Dw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@next/swc-linux-x64-musl@16.3.4': + resolution: {integrity: sha512-+eaaX6axpDb0yF1GCpiERe6njplvdC+nks/fKfcHu3XPGRrald8P3/X7yv7QLdjA51knnxwl9pxdIJsg+w1L+Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@next/swc-win32-arm64-msvc@16.3.4': + resolution: {integrity: sha512-0jcXW7Xs/uzICrmgV3MhDYDeRy++1CqnpDIerlPIqYO4bhzB4WNbX/aRnQclustsAyTkFKB0z6rbcjmNg5tR8A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@16.3.4': + resolution: {integrity: sha512-vvBzwu1pYQCp92maZCFCIw/XgOTMR5tur9GjakwIo2cmwRTMKajRZZDS9+e4KsUZWKu1E007WUeAFXRRjZeuzw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} + + '@tailwindcss/node@4.3.3': + resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==} + + '@tailwindcss/oxide-android-arm64@4.3.3': + resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.3.3': + resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.3.3': + resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.3.3': + resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.3.3': + resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} + engines: {node: '>= 20'} + + '@tailwindcss/postcss@4.3.3': + resolution: {integrity: sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==} + + '@tybys/wasm-util@0.10.3': + resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/node@26.5.0': + resolution: {integrity: sha512-dVSGpriSoCgz8WnDNTuSSuSv1PC/ALXihO4ulRZt7Md8k9mlbdin3lGOcDE8SnWOgf513ByWlXd7BK4azmyg/A==} + + '@types/react-dom@19.2.7': + resolution: {integrity: sha512-I8bPpDLcHBv1qiIiXDCy71Rt8eQDKJP0sMSWJphDdAcdqiJ1sGpZamavoEIRZmYzjia9LuEb2HlYdDpmoENpvQ==} + peerDependencies: + '@types/react': ^19.2.0 + + '@types/react@19.2.18': + resolution: {integrity: sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==} + + '@typescript-eslint/eslint-plugin@8.70.0': + resolution: {integrity: sha512-/v8HZt6RlyIZxB3ntehELOcUcfxKPVGWXnQdJuHRmzrqgF8nQypcC/oxGW+Ot4VGKDq81XugPKxx0n5PBtf9PA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.70.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/parser@8.70.0': + resolution: {integrity: sha512-zYvrmj9Yxd63UGaXw+kdt6A0F0s0qveJyuatIM77bYC2DE4pgmg7a50u8LR7PRtXd0x+h+Tl3eXabGm06SWd3Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/project-service@8.70.0': + resolution: {integrity: sha512-hFHbTNqhU9G+2eKFXCBVb1tjFT/LceiJ4+HfLO4pTpDI0KHi6iajpcFFkaSQ9gXmCh7n82A0PthaayEdN6mspQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.70.0': + resolution: {integrity: sha512-8nP3Kwh5hlgZ4FicGvmznAmJe8UL4sdU8tLukrPaMuQmDuk4Y8xYfzu/aYZW4xT2JCgc7H/TpDI5cGlxcWJSqQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.70.0': + resolution: {integrity: sha512-adnkeeNq9Sq1sUf4+FRVc0KdgYghzsgFpZSQVZVvY0LCuUuN0FnQgyGzCJeC4fW1cdXseBAjU2EOqUIjbNcZUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.70.0': + resolution: {integrity: sha512-NUMKIhYVaVIVLnRL9CRt+VVcuLgSHUCpXn4/+K8wql+vdInUzvx8BjUO1oJ7cG9shjFJKtF8F8Hh2kCh3/KBVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.70.0': + resolution: {integrity: sha512-asTOIYhDg4zdzOScCyaytrsV3cR6B4ecPQlXw/dJIm7J/MZTtCtfVII9JD8Geh4jTCrK/Xe6cg5UevoleMcoJQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.70.0': + resolution: {integrity: sha512-d9NmHMPEKQ7QCLLm1jI3zmoQBwT5KwFYjXBJ9ymZfKCUU+5rmTRykKAFvH5Qn/ZCds3CEAFS9OC9M/jkl0X2bA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.70.0': + resolution: {integrity: sha512-oZmtKJz/4fufZ2p3+Cn3ijEojcdfR+1zYDH2xKYrEly0dR/Q/1xUPRCOlKGxod78nWlU2UnDe09GZ3TaknBFGA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.70.0': + resolution: {integrity: sha512-BoC8PiO4Hkdo0TVJh9Ntxr5MxPDI7/oFsrygN5ADelFSeXG/qgNuucIGA+L5Z6JpPTE/uRfcTWtscjbUaufepQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@unrs/resolver-binding-android-arm-eabi@1.12.2': + resolution: {integrity: sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.12.2': + resolution: {integrity: sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==} + cpu: [arm64] + os: [android] + + '@unrs/resolver-binding-darwin-arm64@1.12.2': + resolution: {integrity: sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.12.2': + resolution: {integrity: sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.12.2': + resolution: {integrity: sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2': + resolution: {integrity: sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.12.2': + resolution: {integrity: sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.12.2': + resolution: {integrity: sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@unrs/resolver-binding-linux-arm64-musl@1.12.2': + resolution: {integrity: sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': + resolution: {integrity: sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@unrs/resolver-binding-linux-loong64-musl@1.12.2': + resolution: {integrity: sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': + resolution: {integrity: sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': + resolution: {integrity: sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': + resolution: {integrity: sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': + resolution: {integrity: sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@unrs/resolver-binding-linux-x64-gnu@1.12.2': + resolution: {integrity: sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@unrs/resolver-binding-linux-x64-musl@1.12.2': + resolution: {integrity: sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@unrs/resolver-binding-openharmony-arm64@1.12.2': + resolution: {integrity: sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==} + cpu: [arm64] + os: [openharmony] + + '@unrs/resolver-binding-wasm32-wasi@1.12.2': + resolution: {integrity: sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': + resolution: {integrity: sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.12.2': + resolution: {integrity: sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.12.2': + resolution: {integrity: sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==} + cpu: [x64] + os: [win32] + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.18.0: + resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.13.0: + resolution: {integrity: sha512-UzGt8zg7Ny8djbYMhxl2zuEevVa7r2gJjYY5Lwr1xM7+XU2nd6CkIWFTVcCIbAP63vSz71NaVyyuSk9lHKcy0A==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + baseline-browser-mapping@2.11.21: + resolution: {integrity: sha512-uh8vpY/1/YyFkunIDFH/12p7/7VdPKA1hejMVEbdkEaWnUz0Hesvx5EbiU6XxjyHZIOju+ZMbQJkRh+es3/spQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + brace-expansion@1.1.18: + resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} + + brace-expansion@5.0.9: + resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + engines: {node: 20 || >=22} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.28.9: + resolution: {integrity: sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001810: + resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + electron-to-chromium@1.5.425: + resolution: {integrity: sha512-QvPtl41EUOnuT1HBvMKgxXRIaHNcagBPs50u7VULzhZXaGfqTbZyE16LQsctZ/RQHlGu+FOWeDTR4mY6YbeF1g==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enhanced-resolve@5.24.5: + resolution: {integrity: sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==} + engines: {node: '>=10.13.0'} + + es-abstract-get@1.0.0: + resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==} + engines: {node: '>= 0.4'} + + es-abstract@1.24.2: + resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.4.0: + resolution: {integrity: sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.4: + resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-next@16.3.4: + resolution: {integrity: sha512-35/8RM10huEL9vlr8hUZMERMENHBrnyHN3ZZkF9efSgzGaqK34jIqry44A956//zriUhUAUW0XSkcolhrryqAA==} + peerDependencies: + eslint: '>=9.0.0' + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.10: + resolution: {integrity: sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==} + + eslint-import-resolver-typescript@3.10.1: + resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.14.0: + resolution: {integrity: sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.32.0: + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-react-hooks@7.1.1: + resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 + + eslint-plugin-react@7.37.5: + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@9.39.5: + resolution: {integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.20.3: + resolution: {integrity: sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.4.4: + resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.2.0: + resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.14.3: + resolution: {integrity: sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.9: + resolution: {integrity: sha512-brTTsvFRt5C1gGHtPst/281UjPD5t9fBqbgoMPlVWy11ZLTPfu7HxK4ZYqO9H7o/yC9rSTCI85EaQ4OoY12qYw==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-bun-module@2.0.0: + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-document.all@1.0.0: + resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.3.2: + resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + engines: {node: 18 || 20 || >=22} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.18: + resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + napi-postinstall@0.3.4: + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + next@16.3.4: + resolution: {integrity: sha512-/Ztf6CeRH+ejEXUrYtqI4gkS66eFIHuSwqi60RgcpWKodxFZx2/dqVCMKBwILfAHXQ+F1b1vAudgj3mnxqtoIA==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-exports-info@1.6.2: + resolution: {integrity: sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==} + engines: {node: '>= 0.4'} + + node-releases@2.0.54: + resolution: {integrity: sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==} + engines: {node: '>=18'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + own-keys@1.0.2: + resolution: {integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==} + engines: {node: '>= 0.4'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} + engines: {node: '>=8.6'} + + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss@8.5.23: + resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.28: + resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.9.6: + resolution: {integrity: sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==} + engines: {node: '>=14'} + hasBin: true + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@19.2.8: + resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} + peerDependencies: + react: ^19.2.8 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react@19.2.8: + resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} + engines: {node: '>=0.10.0'} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@2.0.0-next.7: + resolution: {integrity: sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==} + engines: {node: '>= 0.4'} + hasBin: true + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.4: + resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} + engines: {node: '>=0.4'} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + sharp@0.35.4: + resolution: {integrity: sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.1.0: + resolution: {integrity: sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.11: + resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.10: + resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tailwindcss@4.3.3: + resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.8: + resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} + engines: {node: '>= 0.4'} + + typescript-eslint@8.70.0: + resolution: {integrity: sha512-P/W5cz70/cQAuKfY3xwQMWWTV7BvJ0mAQmi+9mBcsVPaBUpd6Ohpa+fECv9rBFrQcig86jAiNBFNWUqnTjr4pw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@8.9.0: + resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} + + unrs-resolver@1.12.2: + resolution: {integrity: sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==} + + update-browserslist-db@1.3.2: + resolution: {integrity: sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.22: + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@4.5.4: + resolution: {integrity: sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==} + +snapshots: + + '@alloc/quick-lru@5.3.0': {} + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.7': {} + + '@babel/core@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.8 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.8 + '@babel/types': 7.29.8 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.8': + dependencies: + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.29.7': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.9 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.29.7': {} + + '@babel/helper-module-imports@7.29.7': + dependencies: + '@babel/traverse': 7.29.8 + '@babel/types': 7.29.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/helper-validator-option@7.29.7': {} + + '@babel/helpers@7.29.7': + dependencies: + '@babel/template': 7.29.7 + '@babel/types': 7.29.8 + + '@babel/parser@7.29.8': + dependencies: + '@babel/types': 7.29.8 + + '@babel/template@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 + + '@babel/traverse@7.29.8': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.8 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/template': 7.29.7 + '@babel/types': 7.29.8 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.8': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.11.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@eslint-community/eslint-utils@4.10.1(eslint@9.39.5(jiti@2.7.0))': + dependencies: + eslint: 9.39.5(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.5(jiti@2.7.0))': + dependencies: + eslint: 9.39.5(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.2': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.7': + dependencies: + ajv: 6.15.0 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.3.2 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.5': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@img/colour@1.1.0': + optional: true + + '@img/sharp-darwin-arm64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.3.3 + optional: true + + '@img/sharp-darwin-x64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.3.3 + optional: true + + '@img/sharp-freebsd-wasm32@0.35.4': + dependencies: + '@img/sharp-wasm32': 0.35.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.3.3': + optional: true + + '@img/sharp-libvips-darwin-x64@1.3.3': + optional: true + + '@img/sharp-libvips-linux-arm64@1.3.3': + optional: true + + '@img/sharp-libvips-linux-arm@1.3.3': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.3.3': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.3.3': + optional: true + + '@img/sharp-libvips-linux-s390x@1.3.3': + optional: true + + '@img/sharp-libvips-linux-x64@1.3.3': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.3.3': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.3.3': + optional: true + + '@img/sharp-linux-arm64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.3.3 + optional: true + + '@img/sharp-linux-arm@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.3.3 + optional: true + + '@img/sharp-linux-ppc64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.3.3 + optional: true + + '@img/sharp-linux-riscv64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.3.3 + optional: true + + '@img/sharp-linux-s390x@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.3.3 + optional: true + + '@img/sharp-linux-x64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.3.3 + optional: true + + '@img/sharp-linuxmusl-arm64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 + optional: true + + '@img/sharp-linuxmusl-x64@0.35.4': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 + optional: true + + '@img/sharp-wasm32@0.35.4': + dependencies: + '@emnapi/runtime': 1.11.3 + optional: true + + '@img/sharp-webcontainers-wasm32@0.35.4': + dependencies: + '@img/sharp-wasm32': 0.35.4 + optional: true + + '@img/sharp-win32-arm64@0.35.4': + optional: true + + '@img/sharp-win32-ia32@0.35.4': + optional: true + + '@img/sharp-win32-x64@0.35.4': + optional: true + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.6.0': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.6.0 + + '@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.3 + optional: true + + '@next/env@16.3.4': {} + + '@next/eslint-plugin-next@16.3.4(eslint@9.39.5(jiti@2.7.0))': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.7.0)) + fast-glob: 3.3.1 + transitivePeerDependencies: + - eslint + + '@next/swc-darwin-arm64@16.3.4': + optional: true + + '@next/swc-darwin-x64@16.3.4': + optional: true + + '@next/swc-linux-arm64-gnu@16.3.4': + optional: true + + '@next/swc-linux-arm64-musl@16.3.4': + optional: true + + '@next/swc-linux-x64-gnu@16.3.4': + optional: true + + '@next/swc-linux-x64-musl@16.3.4': + optional: true + + '@next/swc-win32-arm64-msvc@16.3.4': + optional: true + + '@next/swc-win32-x64-msvc@16.3.4': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.3 + + '@nolyfill/is-core-module@1.0.39': {} + + '@rtsao/scc@1.1.0': {} + + '@swc/helpers@0.5.23': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/node@4.3.3': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.24.5 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.3 + + '@tailwindcss/oxide-android-arm64@4.3.3': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.3.3': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.3.3': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + optional: true + + '@tailwindcss/oxide@4.3.3': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-x64': 4.3.3 + '@tailwindcss/oxide-freebsd-x64': 4.3.3 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.3 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-x64-musl': 4.3.3 + '@tailwindcss/oxide-wasm32-wasi': 4.3.3 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 + + '@tailwindcss/postcss@4.3.3': + dependencies: + '@alloc/quick-lru': 5.3.0 + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 + postcss: 8.5.28 + tailwindcss: 4.3.3 + + '@tybys/wasm-util@0.10.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/estree@1.0.9': {} + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/node@26.5.0': + dependencies: + undici-types: 8.9.0 + + '@types/react-dom@19.2.7(@types/react@19.2.18)': + dependencies: + '@types/react': 19.2.18 + + '@types/react@19.2.18': + dependencies: + csstype: 3.2.3 + + '@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.70.0 + '@typescript-eslint/type-utils': 8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.70.0 + eslint: 9.39.5(jiti@2.7.0) + ignore: 7.0.9 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.70.0 + '@typescript-eslint/types': 8.70.0 + '@typescript-eslint/typescript-estree': 8.70.0(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.70.0 + debug: 4.4.3 + eslint: 9.39.5(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.70.0(typescript@6.0.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@6.0.3) + '@typescript-eslint/types': 8.70.0 + debug: 4.4.3 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.70.0': + dependencies: + '@typescript-eslint/types': 8.70.0 + '@typescript-eslint/visitor-keys': 8.70.0 + + '@typescript-eslint/tsconfig-utils@8.70.0(typescript@6.0.3)': + dependencies: + typescript: 6.0.3 + + '@typescript-eslint/type-utils@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@typescript-eslint/types': 8.70.0 + '@typescript-eslint/typescript-estree': 8.70.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + debug: 4.4.3 + eslint: 9.39.5(jiti@2.7.0) + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.70.0': {} + + '@typescript-eslint/typescript-estree@8.70.0(typescript@6.0.3)': + dependencies: + '@typescript-eslint/project-service': 8.70.0(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@6.0.3) + '@typescript-eslint/types': 8.70.0 + '@typescript-eslint/visitor-keys': 8.70.0 + debug: 4.4.3 + minimatch: 10.2.6 + semver: 7.8.5 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3)': + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.70.0 + '@typescript-eslint/types': 8.70.0 + '@typescript-eslint/typescript-estree': 8.70.0(typescript@6.0.3) + eslint: 9.39.5(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.70.0': + dependencies: + '@typescript-eslint/types': 8.70.0 + eslint-visitor-keys: 5.0.1 + + '@unrs/resolver-binding-android-arm-eabi@1.12.2': + optional: true + + '@unrs/resolver-binding-android-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.12.2': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-loong64-musl@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.12.2': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.12.2': + optional: true + + '@unrs/resolver-binding-openharmony-arm64@1.12.2': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.12.2': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.12.2': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.12.2': + optional: true + + acorn-jsx@5.3.2(acorn@8.18.0): + dependencies: + acorn: 8.18.0 + + acorn@8.18.0: {} + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-includes@3.1.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-shim-unscopables: 1.1.0 + + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-shim-unscopables: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + ast-types-flow@0.0.8: {} + + async-function@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axe-core@4.13.0: {} + + axobject-query@4.1.0: {} + + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + + baseline-browser-mapping@2.11.21: {} + + brace-expansion@1.1.18: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@5.0.9: + dependencies: + balanced-match: 4.0.4 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.28.9: + dependencies: + baseline-browser-mapping: 2.11.21 + caniuse-lite: 1.0.30001810 + electron-to-chromium: 1.5.425 + node-releases: 2.0.54 + update-browserslist-db: 1.3.2(browserslist@4.28.9) + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001810: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + client-only@0.0.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + convert-source-map@2.0.0: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.2.3: {} + + damerau-levenshtein@1.0.8: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + detect-libc@2.1.2: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + electron-to-chromium@1.5.425: {} + + emoji-regex@9.2.2: {} + + enhanced-resolve@5.24.5: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + + es-abstract-get@1.0.0: + dependencies: + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + is-callable: 1.2.7 + object-inspect: 1.13.4 + + es-abstract@1.24.2: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.4 + function.prototype.name: 1.2.0 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.2 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.4 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.11 + string.prototype.trimend: 1.0.10 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.8 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.22 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.4.0: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + math-intrinsics: 1.1.0 + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.4 + + es-to-primitive@1.3.4: + dependencies: + es-abstract-get: 1.0.0 + es-define-property: 1.0.1 + es-errors: 1.3.0 + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-next@16.3.4(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3): + dependencies: + '@next/eslint-plugin-next': 16.3.4(eslint@9.39.5(jiti@2.7.0)) + eslint: 9.39.5(jiti@2.7.0) + eslint-import-resolver-node: 0.3.10 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-react: 7.37.5(eslint@9.39.5(jiti@2.7.0)) + eslint-plugin-react-hooks: 7.1.1(eslint@9.39.5(jiti@2.7.0)) + globals: 16.4.0 + typescript-eslint: 8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + optionalDependencies: + typescript: 6.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-config-prettier@10.1.8(eslint@9.39.5(jiti@2.7.0)): + dependencies: + eslint: 9.39.5(jiti@2.7.0) + + eslint-import-resolver-node@0.3.10: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.2 + resolve: 2.0.0-next.7 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.5(jiti@2.7.0)): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3 + eslint: 9.39.5(jiti@2.7.0) + get-tsconfig: 4.14.3 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.17 + unrs-resolver: 1.12.2 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5(jiti@2.7.0)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5(jiti@2.7.0)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + eslint: 9.39.5(jiti@2.7.0) + eslint-import-resolver-node: 0.3.10 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.5(jiti@2.7.0)) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5(jiti@2.7.0)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.39.5(jiti@2.7.0) + eslint-import-resolver-node: 0.3.10 + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5(jiti@2.7.0)) + hasown: 2.0.4 + is-core-module: 2.16.2 + is-glob: 4.0.3 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.10 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.5(jiti@2.7.0)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.13.0 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.39.5(jiti@2.7.0) + hasown: 2.0.4 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-react-hooks@7.1.1(eslint@9.39.5(jiti@2.7.0)): + dependencies: + '@babel/core': 7.29.7 + '@babel/parser': 7.29.8 + eslint: 9.39.5(jiti@2.7.0) + hermes-parser: 0.25.1 + zod: 4.5.4 + zod-validation-error: 4.0.2(zod@4.5.4) + transitivePeerDependencies: + - supports-color + + eslint-plugin-react@7.37.5(eslint@9.39.5(jiti@2.7.0)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.4.0 + eslint: 9.39.5(jiti@2.7.0) + estraverse: 5.3.0 + hasown: 2.0.4 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.5 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.7 + semver: 6.3.1 + string.prototype.matchall: 4.1.0 + string.prototype.repeat: 1.0.0 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.5(jiti@2.7.0): + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5(jiti@2.7.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.7 + '@eslint/js': 9.39.5 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.9 + ajv: 6.15.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.20.3: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.4 + keyv: 4.5.4 + + flatted@3.4.4: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + function-bind@1.1.2: {} + + function.prototype.name@1.2.0: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + es-define-property: 1.0.1 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + hasown: 2.0.4 + is-callable: 1.2.7 + is-document.all: 1.0.0 + + functions-have-names@1.2.3: {} + + generator-function@2.0.1: {} + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-tsconfig@4.14.3: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globals@16.4.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + has-bigints@1.1.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + + ignore@5.3.2: {} + + ignore@7.0.9: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.4 + side-channel: 1.1.1 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-bun-module@2.0.0: + dependencies: + semver: 7.8.5 + + is-callable@1.2.7: {} + + is-core-module@2.16.2: + dependencies: + hasown: 2.0.4 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-document.all@1.0.0: + dependencies: + call-bound: 1.0.4 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.22 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jiti@2.7.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.3.2: + dependencies: + argparse: 2.0.1 + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 + + math-intrinsics@1.1.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + minimatch@10.2.6: + dependencies: + brace-expansion: 5.0.9 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.18 + + minimist@1.2.8: {} + + ms@2.1.3: {} + + nanoid@3.3.18: {} + + napi-postinstall@0.3.4: {} + + natural-compare@1.4.0: {} + + next@16.3.4(@babel/core@7.29.7)(@types/node@26.5.0)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + dependencies: + '@next/env': 16.3.4 + '@swc/helpers': 0.5.23 + baseline-browser-mapping: 2.11.21 + caniuse-lite: 1.0.30001810 + postcss: 8.5.23 + react: 19.2.8 + react-dom: 19.2.8(react@19.2.8) + styled-jsx: 5.1.6(@babel/core@7.29.7)(react@19.2.8) + optionalDependencies: + '@next/swc-darwin-arm64': 16.3.4 + '@next/swc-darwin-x64': 16.3.4 + '@next/swc-linux-arm64-gnu': 16.3.4 + '@next/swc-linux-arm64-musl': 16.3.4 + '@next/swc-linux-x64-gnu': 16.3.4 + '@next/swc-linux-x64-musl': 16.3.4 + '@next/swc-win32-arm64-msvc': 16.3.4 + '@next/swc-win32-x64-msvc': 16.3.4 + sharp: 0.35.4(@types/node@26.5.0) + transitivePeerDependencies: + - '@babel/core' + - '@types/node' + - babel-plugin-macros + + node-exports-info@1.6.2: + dependencies: + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 + + node-releases@2.0.54: {} + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + own-keys@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + picocolors@1.1.1: {} + + picomatch@2.3.2: {} + + picomatch@4.0.7: {} + + possible-typed-array-names@1.1.0: {} + + postcss@8.5.23: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.28: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier@3.9.6: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + react-dom@19.2.8(react@19.2.8): + dependencies: + react: 19.2.8 + scheduler: 0.27.0 + + react-is@16.13.1: {} + + react@19.2.8: {} + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@2.0.0-next.7: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + node-exports-info: 1.6.2 + object-keys: 1.1.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.4: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + scheduler@0.27.0: {} + + semver@6.3.1: {} + + semver@7.8.5: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + + sharp@0.35.4(@types/node@26.5.0): + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.8.5 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.35.4 + '@img/sharp-darwin-x64': 0.35.4 + '@img/sharp-freebsd-wasm32': 0.35.4 + '@img/sharp-libvips-darwin-arm64': 1.3.3 + '@img/sharp-libvips-darwin-x64': 1.3.3 + '@img/sharp-libvips-linux-arm': 1.3.3 + '@img/sharp-libvips-linux-arm64': 1.3.3 + '@img/sharp-libvips-linux-ppc64': 1.3.3 + '@img/sharp-libvips-linux-riscv64': 1.3.3 + '@img/sharp-libvips-linux-s390x': 1.3.3 + '@img/sharp-libvips-linux-x64': 1.3.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.3 + '@img/sharp-libvips-linuxmusl-x64': 1.3.3 + '@img/sharp-linux-arm': 0.35.4 + '@img/sharp-linux-arm64': 0.35.4 + '@img/sharp-linux-ppc64': 0.35.4 + '@img/sharp-linux-riscv64': 0.35.4 + '@img/sharp-linux-s390x': 0.35.4 + '@img/sharp-linux-x64': 0.35.4 + '@img/sharp-linuxmusl-arm64': 0.35.4 + '@img/sharp-linuxmusl-x64': 0.35.4 + '@img/sharp-webcontainers-wasm32': 0.35.4 + '@img/sharp-win32-arm64': 0.35.4 + '@img/sharp-win32-ia32': 0.35.4 + '@img/sharp-win32-x64': 0.35.4 + '@types/node': 26.5.0 + optional: true + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + source-map-js@1.2.1: {} + + stable-hash@0.0.5: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + + string.prototype.matchall@4.1.0: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.1 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.24.2 + + string.prototype.trim@1.2.11: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + has-property-descriptors: 1.0.2 + safe-regex-test: 1.1.0 + + string.prototype.trimend@1.0.10: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + strip-bom@3.0.0: {} + + strip-json-comments@3.1.1: {} + + styled-jsx@5.1.6(@babel/core@7.29.7)(react@19.2.8): + dependencies: + client-only: 0.0.1 + react: 19.2.8 + optionalDependencies: + '@babel/core': 7.29.7 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tailwindcss@4.3.3: {} + + tapable@2.3.3: {} + + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@2.5.0(typescript@6.0.3): + dependencies: + typescript: 6.0.3 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.8: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typescript-eslint@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.70.0(@typescript-eslint/parser@8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3))(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.70.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.70.0(eslint@9.39.5(jiti@2.7.0))(typescript@6.0.3) + eslint: 9.39.5(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + typescript@6.0.3: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@8.9.0: {} + + unrs-resolver@1.12.2: + dependencies: + napi-postinstall: 0.3.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.12.2 + '@unrs/resolver-binding-android-arm64': 1.12.2 + '@unrs/resolver-binding-darwin-arm64': 1.12.2 + '@unrs/resolver-binding-darwin-x64': 1.12.2 + '@unrs/resolver-binding-freebsd-x64': 1.12.2 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.12.2 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.12.2 + '@unrs/resolver-binding-linux-arm64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-arm64-musl': 1.12.2 + '@unrs/resolver-binding-linux-loong64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-loong64-musl': 1.12.2 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-riscv64-musl': 1.12.2 + '@unrs/resolver-binding-linux-s390x-gnu': 1.12.2 + '@unrs/resolver-binding-linux-x64-gnu': 1.12.2 + '@unrs/resolver-binding-linux-x64-musl': 1.12.2 + '@unrs/resolver-binding-openharmony-arm64': 1.12.2 + '@unrs/resolver-binding-wasm32-wasi': 1.12.2 + '@unrs/resolver-binding-win32-arm64-msvc': 1.12.2 + '@unrs/resolver-binding-win32-ia32-msvc': 1.12.2 + '@unrs/resolver-binding-win32-x64-msvc': 1.12.2 + + update-browserslist-db@1.3.2(browserslist@4.28.9): + dependencies: + browserslist: 4.28.9 + escalade: 3.2.0 + picocolors: 1.1.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.2.0 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.22 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.22: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + yallist@3.1.1: {} + + yocto-queue@0.1.0: {} + + zod-validation-error@4.0.2(zod@4.5.4): + dependencies: + zod: 4.5.4 + + zod@4.5.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..d86aa95 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +allowBuilds: + sharp: false + unrs-resolver: true diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..148a80b --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + "@tailwindcss/postcss": {}, + }, +}; + +export default config; diff --git a/proxy.ts b/proxy.ts new file mode 100644 index 0000000..2256ffa --- /dev/null +++ b/proxy.ts @@ -0,0 +1,23 @@ +import { NextResponse } from "next/server"; +import type { NextRequest } from "next/server"; +import { LOCALE_COOKIE, matchLocale } from "./lib/i18n/locales"; + +export function proxy(request: NextRequest) { + if (request.cookies.has(LOCALE_COOKIE)) { + return NextResponse.next(); + } + const locale = matchLocale(request.headers.get("accept-language")); + const response = NextResponse.next(); + response.cookies.set(LOCALE_COOKIE, locale, { + path: "/", + maxAge: 60 * 60 * 24 * 365, + sameSite: "lax", + }); + return response; +} + +export const config = { + matcher: [ + "/((?!_next/static|_next/image|favicon.ico|.*\\.(?:svg|png|jpg|jpeg|gif|webp|ico)).*)", + ], +}; diff --git a/public/icons/discord.svg b/public/icons/discord.svg new file mode 100644 index 0000000..be45274 --- /dev/null +++ b/public/icons/discord.svg @@ -0,0 +1 @@ +Discord \ No newline at end of file diff --git a/public/icons/gitea.svg b/public/icons/gitea.svg new file mode 100644 index 0000000..4cce797 --- /dev/null +++ b/public/icons/gitea.svg @@ -0,0 +1 @@ +Gitea \ No newline at end of file diff --git a/public/icons/github.svg b/public/icons/github.svg new file mode 100644 index 0000000..775adcc --- /dev/null +++ b/public/icons/github.svg @@ -0,0 +1 @@ +GitHub \ No newline at end of file diff --git a/public/icons/gmail.svg b/public/icons/gmail.svg new file mode 100644 index 0000000..e4c0246 --- /dev/null +++ b/public/icons/gmail.svg @@ -0,0 +1 @@ +Gmail \ No newline at end of file diff --git a/public/icons/spotify.svg b/public/icons/spotify.svg new file mode 100644 index 0000000..e5cafb0 --- /dev/null +++ b/public/icons/spotify.svg @@ -0,0 +1 @@ +Spotify \ No newline at end of file diff --git a/public/icons/steam.svg b/public/icons/steam.svg new file mode 100644 index 0000000..bd55b41 --- /dev/null +++ b/public/icons/steam.svg @@ -0,0 +1 @@ +Steam \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..d743e8c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts", + "**/*.mts" + ], + "exclude": ["node_modules"] +}