diff --git a/.gitignore b/.gitignore index 76d4f8e..f172cdb 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,7 @@ apps/web/*.sw? #SERVER apps/server/node_modules apps/server/.env -apps/server/dist/* \ No newline at end of file +apps/server/dist/* + +#DEFAULT +.env \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index 7aa4fc6..0000000 --- a/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -gen-compose: - chmod +x ./scripts/generate-docker-compose.sh - ./scripts/generate-docker-compose.sh diff --git a/README.md b/README.md index d686aac..b193366 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # ๐ŸŒด Palmr. - Open-Source File Transfer

- Palmr Logo + Palmr Logo

**Palmr.** is a **flexible** and **open-source** alternative to file transfer services like **WeTransfer**, **SendGB**, **Send Anywhere**, and **Files.fm**. -๐Ÿ”— **For detailed documentation visit:** [Palmr. - Documentation](https://palmr-docs.kyantech.com.br) +๐Ÿ”— **For detailed documentation visit:** [Palmr. - Documentation](https://palmr.kyantech.com.br) ## ๐Ÿ“Œ Why Choose Palmr.? @@ -20,7 +20,7 @@ ### **Palmr.** is built with a focus on **performance**, **scalability**, and **security**.
- +
@@ -30,12 +30,12 @@ - **MinIO (Object Storage)** โ€“ AWS S3-compatible storage for high availability. ### **Frontend** -- **React + TypeScript + Vite** โ€“ Modern, interactive, and fast web interface. +- **NextJS 15 + TypeScript + Shadcn/ui** โ€“ Modern and fast web interface. ## ๐Ÿ› ๏ธ How It Works -1. **Web Interface** โ†’ Built with React, TypeScript, and Vite for a seamless user experience. +1. **Web Interface** โ†’ Built with Next, React and TypeScript for a seamless user experience. 2. **Backend API** โ†’ Fastify handles requests and interacts with storage. 3. **Database** โ†’ PostgreSQL stores metadata and transactional data. 4. **Storage** โ†’ MinIO ensures reliable file storage and retrieval. @@ -43,7 +43,7 @@ ## ๐Ÿ‘จโ€๐Ÿ’ป Core Maintainers -| **Daniel Luiz Alves** | +| [**Daniel Luiz Alves**](https://github.com/danielalves96) | |------------------| | Daniel Luiz Alves | diff --git a/apps/docs/.eslintrc.json b/apps/docs/.eslintrc.json new file mode 100644 index 0000000..3722418 --- /dev/null +++ b/apps/docs/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["next/core-web-vitals", "next/typescript"] +} diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore index e1823c1..55a12ae 100644 --- a/apps/docs/.gitignore +++ b/apps/docs/.gitignore @@ -1,3 +1,28 @@ -node_modules -.astro -dist \ No newline at end of file +# deps +/node_modules + +# generated content +.contentlayer +.content-collections +.source + +# test & build +/coverage +/.next/ +/out/ +/build +*.tsbuildinfo + +# misc +.DS_Store +*.pem +/.pnp +.pnp.js +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# others +.env*.local +.vercel +next-env.d.ts \ No newline at end of file diff --git a/apps/docs/.vscode/css.json b/apps/docs/.vscode/css.json deleted file mode 100644 index 96a1f57..0000000 --- a/apps/docs/.vscode/css.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "version": 1.1, - "atDirectives": [ - { - "name": "@tailwind", - "description": "Use the `@tailwind` directive to insert Tailwind's `base`, `components`, `utilities` and `screens` styles into your CSS.", - "references": [ - { - "name": "Tailwind Documentation", - "url": "https://tailwindcss.com/docs/functions-and-directives#tailwind" - } - ] - }, - { - "name": "@apply", - "description": "Use the `@apply` directive to inline any existing utility classes into your own custom CSS. This is useful when you find a common utility pattern in your HTML that youโ€™d like to extract to a new component.", - "references": [ - { - "name": "Tailwind Documentation", - "url": "https://tailwindcss.com/docs/functions-and-directives#apply" - } - ] - }, - { - "name": "@responsive", - "description": "You can generate responsive variants of your own classes by wrapping their definitions in the `@responsive` directive:\n```css\n@responsive {\n .alert {\n background-color: #E53E3E;\n }\n}\n```\n", - "references": [ - { - "name": "Tailwind Documentation", - "url": "https://tailwindcss.com/docs/functions-and-directives#responsive" - } - ] - }, - { - "name": "@screen", - "description": "The `@screen` directive allows you to create media queries that reference your breakpoints by **name** instead of duplicating their values in your own CSS:\n```css\n@screen sm {\n /* ... */\n}\n```\nโ€ฆgets transformed into this:\n```css\n@media (min-width: 640px) {\n /* ... */\n}\n```\n", - "references": [ - { - "name": "Tailwind Documentation", - "url": "https://tailwindcss.com/docs/functions-and-directives#screen" - } - ] - }, - { - "name": "@variants", - "description": "Generate `hover`, `focus`, `active` and other **variants** of your own utilities by wrapping their definitions in the `@variants` directive:\n```css\n@variants hover, focus {\n .btn-brand {\n background-color: #3182CE;\n }\n}\n```\n", - "references": [ - { - "name": "Tailwind Documentation", - "url": "https://tailwindcss.com/docs/functions-and-directives#variants" - } - ] - } - ] -} diff --git a/apps/docs/.vscode/extensions.json b/apps/docs/.vscode/extensions.json deleted file mode 100644 index 691da13..0000000 --- a/apps/docs/.vscode/extensions.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "recommendations": [ - "dbaeumer.vscode-eslint", - "bradlc.vscode-tailwindcss" - ], - - "unwantedRecommendations": [ - "esbenp.prettier-vscode" - ] -} diff --git a/apps/docs/.vscode/settings.json b/apps/docs/.vscode/settings.json deleted file mode 100644 index 16392d2..0000000 --- a/apps/docs/.vscode/settings.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "eslint.workingDirectories": [ - { "pattern": "apps/*/" }, - { "pattern": "packages/*/" } - ], - - "tailwindCSS.experimental.configFile": { - "apps/web/tailwind.config.ts": "apps/web/**" - }, - - "tailwindCSS.experimental.classRegex": [ - ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"], - ["cn\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"], - ], - - "tailwindCSS.classAttributes": [ - "class", - "className", - "tw" - ], - - "css.customData": [ - ".vscode/css.json" - ], - -"[javascript]": { - "editor.formatOnSave": false, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" - } - }, - - "[typescript]": { - "editor.formatOnSave": false, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" - } - }, - - "[typescriptreact]": { - "editor.formatOnSave": false, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" - } - }, - - "eslint.validate": [ - "javascript", - "typescript" - ], -} diff --git a/apps/docs/README.md b/apps/docs/README.md new file mode 100644 index 0000000..a923f4d --- /dev/null +++ b/apps/docs/README.md @@ -0,0 +1,26 @@ +# docs-v2 + +This is a Next.js application generated with +[Create Fumadocs](https://github.com/fuma-nama/fumadocs). + +Run development server: + +```bash +npm run dev +# or +pnpm dev +# or +yarn dev +``` + +Open http://localhost:3000 with your browser to see the result. + +## Learn More + +To learn more about Next.js and Fumadocs, take a look at the following +resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js + features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. +- [Fumadocs](https://fumadocs.vercel.app) - learn about Fumadocs diff --git a/apps/docs/astro.config.mjs b/apps/docs/astro.config.mjs deleted file mode 100644 index 63f97f6..0000000 --- a/apps/docs/astro.config.mjs +++ /dev/null @@ -1,58 +0,0 @@ -import { defineConfig } from 'astro/config'; -import starlight from '@astrojs/starlight'; - -export default defineConfig({ - integrations: [ - starlight({ - title: '๐ŸŒด Palmr. - Documentation', - defaultLocale: 'root', - social: { - github: 'https://github.com/kyantech/Palmr', - openCollective: 'https://github.com/sponsors/kyantech', - }, - sidebar: [ - { - label: 'Introduction', - items: [ - { label: 'Welcome to Palmr.', link: '/' }, - { label: 'Architecture of Palmr.', link: '/core/architecture' }, - { label: 'GitHub architecture', link: '/core/github-architecture' }, - { label: 'Installation (Docker Compose)', link: '/core/installation' }, - { label: 'Manual installation', link: '/core/manual-installation' }, - { label: 'API Endpoints', link: '/core/api-docs' }, - ], - }, - { - label: 'How to use Palmr.', - items: [ - { label: 'First login (Admin)', link: '/main/login' }, - { label: 'Manage users', link: '/main/manage-users' }, - { label: 'Uploading files', link: '/main/upload' }, - { label: 'Creating a share', link: '/main/generate-share' }, - { label: 'Configuring SMTP', link: '/main/configuring-smtp' }, - { label: 'Available languages', link: '/main/available-languages' }, - ], - }, - { - label: 'Developers', - items: [ - { label: 'How to contribute', link: '/developers/contribute' }, - { label: 'How to open an issue', link: '/developers/open-an-issue' }, - ], - }, - { - label: 'Sponsor this project', - items: [ - { label: 'Star this project on Github', link: '/sponsor/gh-star' }, - { label: 'Github Sponsors', link: '/sponsor/gh-sponsor' }, - ], - }, - ], - lastUpdated: true, - pagination: false, - customCss: [ - './src/styles/custom.css', - ], - }), - ], -}); diff --git a/apps/docs/components.json b/apps/docs/components.json new file mode 100644 index 0000000..49c6a2c --- /dev/null +++ b/apps/docs/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/app/global.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/apps/docs/src/content/docs/core/api-docs.md b/apps/docs/content/docs/1.1.7-beta/api.md similarity index 91% rename from apps/docs/src/content/docs/core/api-docs.md rename to apps/docs/content/docs/1.1.7-beta/api.md index 71f694a..3a9a595 100644 --- a/apps/docs/src/content/docs/core/api-docs.md +++ b/apps/docs/content/docs/1.1.7-beta/api.md @@ -1,9 +1,7 @@ --- -title: Palmr. API Endpoints +title: API Endpoints --- -##### Overview of Palmr. API Endpoints - Palmr. provides a **highly documented and typed API** that can be accessed at: - **In a production environment:** `{your_server_domain}/docs` @@ -11,7 +9,7 @@ Palmr. provides a **highly documented and typed API** that can be accessed at: The API documentation is powered by **Scalar** ([https://scalar.com](https://scalar.com)), which offers a fully interactive interface for testing all the available requests within Palmr. Below is an example screenshot of the API documentation interface: -![Palmr API Documentation](/public/api-docs/scalar.png) +![Palmr API Documentation](/assets/v1/api-docs/scalar.png) --- @@ -31,7 +29,7 @@ We recommend using **Scalar** for querying and testing the API because the syste If you prefer not to use Scalar or are more comfortable with an alternative tool, a **Swagger-based version** of the documentation is also available. -![Palmr API Documentation](/public/api-docs/swagger.png) +![Palmr API Documentation](/assets/v1/api-docs/swagger.png) You can access it at: diff --git a/apps/docs/src/content/docs/core/architecture.md b/apps/docs/content/docs/1.1.7-beta/architecture.md similarity index 98% rename from apps/docs/src/content/docs/core/architecture.md rename to apps/docs/content/docs/1.1.7-beta/architecture.md index 3fc7fcc..b5e5f3c 100644 --- a/apps/docs/src/content/docs/core/architecture.md +++ b/apps/docs/content/docs/1.1.7-beta/architecture.md @@ -7,7 +7,7 @@ title: Architecture of Palmr. Understanding the architecture of Palmr. is crucial for both deploying and scaling the application. Below is a diagram illustrating the main components: -![Palmr Banner](/public/general/architecture.png) +![Palmr Banner](/assets/v1/general/architecture.png) ## **Technologies Used** diff --git a/apps/docs/src/content/docs/main/available-languages.md b/apps/docs/content/docs/1.1.7-beta/available-languages.md similarity index 95% rename from apps/docs/src/content/docs/main/available-languages.md rename to apps/docs/content/docs/1.1.7-beta/available-languages.md index 77dddbf..3b80b21 100644 --- a/apps/docs/src/content/docs/main/available-languages.md +++ b/apps/docs/content/docs/1.1.7-beta/available-languages.md @@ -32,7 +32,7 @@ The project uses i18next for internationalization (i18n) support. The language d #### 2. Manual Selection -![Palmr Profile Menu](/public/main/language/language-selector.png) +![Palmr Profile Menu](/assets/v1/main/language/language-selector.png) - Users can manually switch languages through the language selector in the UI - Language preference is saved in the browser's localStorage diff --git a/apps/docs/src/content/docs/main/configuring-smtp.md b/apps/docs/content/docs/1.1.7-beta/configuring-smtp.md similarity index 92% rename from apps/docs/src/content/docs/main/configuring-smtp.md rename to apps/docs/content/docs/1.1.7-beta/configuring-smtp.md index 7e39054..3a3e36a 100644 --- a/apps/docs/src/content/docs/main/configuring-smtp.md +++ b/apps/docs/content/docs/1.1.7-beta/configuring-smtp.md @@ -18,15 +18,15 @@ Now, let's go through the step-by-step process to configure the **SMTP Server**. To access **Settings**, an **ADMIN** user must click on the profile picture in the **header** and select **Settings** from the dropdown menu. -![Dropdown Menu](/public/main/smtp/dropdown-menu.png) +![Dropdown Menu](/assets/v1/main/smtp/dropdown-menu.png) Once inside the **Settings** panel, click on the **Email** card to expand the SMTP configuration options. -![Closed Settings Card](/public/main/smtp/closed-card.png) +![Closed Settings Card](/assets/v1/main/smtp/closed-card.png) After expanding the card, the following SMTP configuration fields will appear: -![Opened Settings Card](/public/main/smtp/opened-card.png) +![Opened Settings Card](/assets/v1/main/smtp/opened-card.png) --- @@ -34,7 +34,7 @@ After expanding the card, the following SMTP configuration fields will appear: The first step is to **enable SMTP** by selecting "Yes" in the **SMTP Enabled** field. -![SMTP Enabled](/public/main/smtp/smtp-enabled.png) +![SMTP Enabled](/assets/v1/main/smtp/smtp-enabled.png) Once SMTP is enabled, you can configure the other necessary fields: diff --git a/apps/docs/src/content/docs/developers/contribute.md b/apps/docs/content/docs/1.1.7-beta/contribute.md similarity index 99% rename from apps/docs/src/content/docs/developers/contribute.md rename to apps/docs/content/docs/1.1.7-beta/contribute.md index 51c09b4..14afa70 100644 --- a/apps/docs/src/content/docs/developers/contribute.md +++ b/apps/docs/content/docs/1.1.7-beta/contribute.md @@ -1,5 +1,5 @@ --- -title: How to Contribute to the Palmr. Project +title: How to Contribute --- Thank you for your interest in contributing to the **Palmr.** project! Contributions are what make the open-source community such an amazing place to learn, inspire, and create. This guide will walk you through the process of contributing to Palmr. diff --git a/apps/docs/src/content/docs/main/generate-share.md b/apps/docs/content/docs/1.1.7-beta/generate-share.md similarity index 75% rename from apps/docs/src/content/docs/main/generate-share.md rename to apps/docs/content/docs/1.1.7-beta/generate-share.md index 4f01d1a..e142061 100644 --- a/apps/docs/src/content/docs/main/generate-share.md +++ b/apps/docs/content/docs/1.1.7-beta/generate-share.md @@ -8,11 +8,11 @@ To create a share in Palmr, the process is very intuitive and self-explanatory. On the home page, there is a **"Recent Shares"** section. When no shares have been created yet, this section will appear as follows: -![Recent Shares Section](/public/main/shares/share-section.png) +![Recent Shares Section](/assets/v1/main/shares/share-section.png) Since no shares exist yet, you will see a **"Create Share"** button prominently displayed. -![Create Share Button](/public/main/shares/create-first-share.png) +![Create Share Button](/assets/v1/main/shares/create-first-share.png) > **Note:** You donโ€™t need to upload files to create a share! Yes, itโ€™s entirely possible to create a share without adding any files. While this might not make sense in every scenario, some users and use cases find this feature highly valuable. @@ -20,7 +20,7 @@ As mentioned above, shares in Palmr are created first with their settings, and t To create a share, simply click the **"Create Share"** button in the center of the **Recent Shares** section. Doing so will open the following **Create Share** modal: -![Create Share Modal](/public/main/shares/create-share-modal.png) +![Create Share Modal](/assets/v1/main/shares/create-share-modal.png) Fill in the required information in the modal. The fields **Expiration Date**, **Max Views**, and **Password** are optional but significantly impact how the share functions for recipients: - **Password:** If set, the recipient must enter the correct password to access the share. @@ -40,27 +40,27 @@ Once a share is created, the **Recent Shares** section updates to display a tabl - **Recipients** - **Actions** -![Shares Table](/public/main/shares/shares-table.png) +![Shares Table](/assets/v1/main/shares/shares-table.png) To create additional shares, a **"New Share"** button appears in the upper right corner of the **Recent Shares** section. -![New Share Button](/public/main/shares/new-share-btn.png) +![New Share Button](/assets/v1/main/shares/new-share-btn.png) Clicking this button will reopen the **Create Share** modal. The **Recent Shares** section displays only the **last 5 shares**. To view all created shares, click the **"View All"** button. -![Shares Filled](/public/main/shares/recent-shares-filled.png) +![Shares Filled](/assets/v1/main/shares/recent-shares-filled.png) -![View All Button](/public/main/shares/view-all-button.png) +![View All Button](/assets/v1/main/shares/view-all-button.png) Clicking this redirects you to the **Shares Management** page. -![Shares Management Page](/public/main/shares/my-shares-page.png) +![Shares Management Page](/assets/v1/main/shares/my-shares-page.png) Another way to access the **Shares Management** page is by clicking the **"My Shares"** card on the home page. -![My Shares Card](/public/main/shares/my-shares-card.png) +![My Shares Card](/assets/v1/main/shares/my-shares-card.png) --- @@ -70,19 +70,19 @@ The **Shares Management** page is similar to the **Uploads Management** page, bu ##### Each share has an **Actions** column with the following options: -![Actions Column](/public/main/shares/actions-column.png) +![Actions Column](/assets/v1/main/shares/actions-column.png) ## Edit Share Clicking the **Edit** button allows you to modify the share details. -![Edit Share Modal](/public/main/shares/edit-share-modal.png) +![Edit Share Modal](/assets/v1/main/shares/edit-share-modal.png) ## Manage Files Clicking the **Manage Files** button lets you add or remove files from the share. -![Manage Files Modal](/public/main/shares/manage-files-modal.png) +![Manage Files Modal](/assets/v1/main/shares/manage-files-modal.png) ## Manage Recipients @@ -90,36 +90,36 @@ Clicking the **Manage Recipients** button lets you add or remove recipients for > **Note:** Email notifications will only be sent if SMTP settings are properly configured in the system. -![Manage Recipients Modal](/public/main/shares/manage-recipients-modal.png) +![Manage Recipients Modal](/assets/v1/main/shares/manage-recipients-modal.png) ## View Share Details Clicking **View Details** lets you see all details of a share. -![View Details Modal](/public/main/shares/share-details-modal.png) +![View Details Modal](/assets/v1/main/shares/share-details-modal.png) ## Generate Share Link Clicking the **Generate Link** button creates a shareable link, which can be customized. -![Generate Link Modal](/public/main/shares/generate-share-link-modal.png) +![Generate Link Modal](/assets/v1/main/shares/generate-share-link-modal.png) Once generated, you can view and copy the link. -![Copy Link Modal](/public/main/shares/copy-link-modal.png) +![Copy Link Modal](/assets/v1/main/shares/copy-link-modal.png) The generated link can be edited or copied from a dropdown menu. -![Edit or Copy Link Dropdown](/public/main/shares/dropdown-with-copy.png) +![Edit or Copy Link Dropdown](/assets/v1/main/shares/dropdown-with-copy.png) When the generated link is accessed, the recipient can **view and download** the shared files. -![Shared Page Preview](/public/main/shares/share-screen.png) +![Shared Page Preview](/assets/v1/main/shares/share-screen.png) ## Delete Share Clicking the **Delete** button allows you to permanently remove a share. -![Delete Share Modal](/public/main/shares/delete-share-modal.png) +![Delete Share Modal](/assets/v1/main/shares/delete-share-modal.png) --- diff --git a/apps/docs/src/content/docs/sponsor/gh-sponsor.md b/apps/docs/content/docs/1.1.7-beta/gh-sponsor.md similarity index 96% rename from apps/docs/src/content/docs/sponsor/gh-sponsor.md rename to apps/docs/content/docs/1.1.7-beta/gh-sponsor.md index c4b92cf..103cd51 100644 --- a/apps/docs/src/content/docs/sponsor/gh-sponsor.md +++ b/apps/docs/content/docs/1.1.7-beta/gh-sponsor.md @@ -24,7 +24,7 @@ Alternatively, you can search for "Palmr" in the GitHub search bar and click on On the Palmr repository page, you'll see a "Sponsor" button at the top right corner of the page. Click this button to proceed. -![Palmr Profile Menu](/public/sponsor/sponsor-btn.png) +![Palmr Profile Menu](/assets/v1/sponsor/sponsor-btn.png) --- @@ -35,7 +35,7 @@ GitHub Sponsors allows you to sponsor the project with a **custom amount startin 2. Type in the amount you'd like to sponsor (e.g., $1, $5, $10, or any amount you choose). 3. Select the billing frequency (monthly or one-time). -![Palmr Profile Menu](/public/sponsor/sponsor-page.png) +![Palmr Profile Menu](/assets/v1/sponsor/sponsor-page.png) --- diff --git a/apps/docs/src/content/docs/sponsor/gh-star.md b/apps/docs/content/docs/1.1.7-beta/gh-star.md similarity index 96% rename from apps/docs/src/content/docs/sponsor/gh-star.md rename to apps/docs/content/docs/1.1.7-beta/gh-star.md index f5f0c10..f85d94f 100644 --- a/apps/docs/src/content/docs/sponsor/gh-star.md +++ b/apps/docs/content/docs/1.1.7-beta/gh-star.md @@ -24,7 +24,7 @@ Alternatively, you can search for "Palmr" in the GitHub search bar and click on On the Palmr. repository page, you'll see a "Star" button at the top right corner of the page. Click this button to star the repository. -![Palmr Profile Menu](/public/sponsor/star-btn.png) +![Palmr Profile Menu](/assets/v1/sponsor/star-btn.png) --- @@ -32,7 +32,7 @@ On the Palmr. repository page, you'll see a "Star" button at the top right corne After clicking the "Star" button, the button will change to "Unstar," indicating that the repository has been successfully starred. You can always unstar the repository by clicking the "Unstar" button. -![Palmr Profile Menu](/public/sponsor/starred-button.png) +![Palmr Profile Menu](/assets/v1/sponsor/starred-button.png) --- diff --git a/apps/docs/src/content/docs/core/github-architecture.md b/apps/docs/content/docs/1.1.7-beta/github-architecture.md similarity index 100% rename from apps/docs/src/content/docs/core/github-architecture.md rename to apps/docs/content/docs/1.1.7-beta/github-architecture.md diff --git a/apps/docs/src/content/docs/index.md b/apps/docs/content/docs/1.1.7-beta/index.md similarity index 96% rename from apps/docs/src/content/docs/index.md rename to apps/docs/content/docs/1.1.7-beta/index.md index be90a6d..e4c01b8 100644 --- a/apps/docs/src/content/docs/index.md +++ b/apps/docs/content/docs/1.1.7-beta/index.md @@ -1,8 +1,8 @@ --- -title: Introduction +title: Welcome to Palmr. --- -![Palmr Banner](/public/general/banner.png) +![Palmr Banner](/assets/v1/general/banner.png) ## ๐ŸŒด What is **Palmr.** ? ___ diff --git a/apps/docs/src/content/docs/core/installation.mdx b/apps/docs/content/docs/1.1.7-beta/installation.mdx similarity index 94% rename from apps/docs/src/content/docs/core/installation.mdx rename to apps/docs/content/docs/1.1.7-beta/installation.mdx index 5343d7c..09aa248 100644 --- a/apps/docs/src/content/docs/core/installation.mdx +++ b/apps/docs/content/docs/1.1.7-beta/installation.mdx @@ -1,9 +1,8 @@ --- -title: Installation -description: Guide to install and run Palmr using Docker Compose +title: Installation (Docker Compose) --- -import { Tabs, TabItem } from '@astrojs/starlight/components'; +import { Tab, Tabs } from 'fumadocs-ui/components/tabs'; ### Quick Start with Default Docker Compose @@ -29,12 +28,13 @@ To execute the project using this approach, you need to have **Docker** and **Do ### Ways to Execute the Startup Script -First of all, clone the official repository: `https://github.com/kyantech/Palmr.git` +First of all, download the relase v1.1.7-beta: +[Release version - 1.1.7-beta](https://github.com/kyantech/Palmr/releases/tag/v1.1.7-beta) There are two ways to execute the script: - - + + To use this method, you need to have the `make` command installed on your machine. To generate the new `docker-compose.yml` file using a Makefile, run the following command from the project root: @@ -49,8 +49,8 @@ There are two ways to execute the script: - It is configured to run locally via `localhost` and is **not intended for production** or VPS environments. After the file is generated, you can modify or adapt it for deployment in other environments. - - + + To generate the `docker-compose.yml` file by running the script directly, use the following commands: ```bash @@ -59,7 +59,7 @@ There are two ways to execute the script: ``` This will have the same effect as running `make gen-compose`. - + --- diff --git a/apps/docs/src/content/docs/main/login.md b/apps/docs/content/docs/1.1.7-beta/login.md similarity index 92% rename from apps/docs/src/content/docs/main/login.md rename to apps/docs/content/docs/1.1.7-beta/login.md index 6615f97..369a638 100644 --- a/apps/docs/src/content/docs/main/login.md +++ b/apps/docs/content/docs/1.1.7-beta/login.md @@ -9,7 +9,7 @@ Once you have started all the services as described in the deployment instructio Upon accessing the frontend, you will see a screen similar to the image below: -![Palmr Landing Page](/public/general/lp.png) +![Palmr Landing Page](/assets/v1/general/lp.png) This is the **Palmr. landing page**, which provides basic information about the application. This landing page can be hidden later when you configure your app, allowing the login page to become the default home page. However, on the first execution, it is displayed by default. @@ -25,7 +25,7 @@ To simplify the process, Palmr. comes pre-configured with **seed data** upon the After clicking the **Login** button, you will be redirected to the login screen, which looks like this: -![Palmr Login Page](/public/ui/login.png) +![Palmr Login Page](/assets/v1/ui/login.png) Use the following default credentials to log in for the first time: @@ -35,7 +35,7 @@ Use the following default credentials to log in for the first time: If everything is set up correctly, you will be authenticated and redirected to Palmr.'s main dashboard, which looks like this: -![Palmr Dashboard](/public/ui/dashboard.png) +![Palmr Dashboard](/assets/v1/ui/dashboard.png) At this point, you are officially logged in and ready to start using all the features of Palmr.! @@ -51,11 +51,11 @@ Follow these steps to update the admin credentials and secure your Palmr. instan 1. Click the **user icon** located in the top right corner of the screen. 2. A dropdown menu will appear with several options: -![Palmr Profile Menu](/public/ui/menu.png) +![Palmr Profile Menu](/assets/v1/ui/menu.png) 3. Select **"Profile"** from the dropdown menu. This will redirect you to the profile settings page: -![Palmr Profile Page](/public/ui/profile.png) +![Palmr Profile Page](/assets/v1/ui/profile.png) --- @@ -78,7 +78,7 @@ You can also update the profile picture for better personalization. 1. Click the **camera icon** next to the avatar. 2. Select an image from your local device. -![Palmr Profile Picture](/public/ui/profile_picture.png) +![Palmr Profile Picture](/assets/v1/ui/profile_picture.png) > **Recommendation:** Use a square image to ensure proper display. diff --git a/apps/docs/src/content/docs/main/manage-users.md b/apps/docs/content/docs/1.1.7-beta/manage-users.md similarity index 77% rename from apps/docs/src/content/docs/main/manage-users.md rename to apps/docs/content/docs/1.1.7-beta/manage-users.md index 75d44ed..033f1b4 100644 --- a/apps/docs/src/content/docs/main/manage-users.md +++ b/apps/docs/content/docs/1.1.7-beta/manage-users.md @@ -2,9 +2,8 @@ title: Manage users --- -##### Manage users to **Palmr** is a straightforward process. Below is a detailed step-by-step guide explaining how to create and manage users within the application. +Manage users to **Palmr** is a straightforward process. Below is a detailed step-by-step guide explaining how to create and manage users within the application. ---- ### Step 1: Accessing User Management @@ -13,7 +12,7 @@ To begin, you need to navigate to the **User Management** section: 1. Click on the **user icon** located in the header of the app. 2. A dropdown menu will appear. From the options available, select **"User Management"** -![Palmr Profile Menu](/public/ui/menu.png) +![Palmr Profile Menu](/assets/v1/ui/menu.png) --- @@ -25,7 +24,7 @@ After selecting **User Management**, you will be redirected to the **User Manage - If you need to update the Admin user details, you must follow the steps outlined in the **Profile Management** section. - User details for the logged-in Admin cannot be modified from the **User Management Dashboard**. -![Palmr Profile Menu](/public/main/users/users-management.png) +![Palmr Profile Menu](/assets/v1/main/users/users-management.png) --- @@ -33,18 +32,18 @@ After selecting **User Management**, you will be redirected to the **User Manage 1. To add a new user, click on the **"Add User"** button located at the top right corner of the screen. -![Palmr Profile Menu](/public/main/users/add-users-btn.png) +![Palmr Profile Menu](/assets/v1/main/users/add-users-btn.png) 2. A modal form will appear, allowing you to enter the new user's details: -![Palmr Profile Menu](/public/main/users/add-user-modal.png) +![Palmr Profile Menu](/assets/v1/main/users/add-user-modal.png) 3. After filling in the user details, click on **"Create"** to confirm. Alternatively, you can click **"Cancel"** to abort the user creation process. 4. Once the user is created successfully, it will appear in the user list. -![Palmr Profile Menu](/public/main/users/new-user-table.png) +![Palmr Profile Menu](/assets/v1/main/users/new-user-table.png) --- @@ -52,7 +51,7 @@ After selecting **User Management**, you will be redirected to the **User Manage In the **User List**, under the **"Actions"** column, you will find a dropdown menu for each user. -![Palmr Profile Menu](/public/main/users/add-user-actions-dropdown.png) +![Palmr Profile Menu](/assets/v1/main/users/add-user-actions-dropdown.png) Available actions include: @@ -61,7 +60,7 @@ Available actions include: - Change user details including role. - Change the user password. -![Palmr Profile Menu](/public/main/users/edit-user-modal.png) +![Palmr Profile Menu](/assets/v1/main/users/edit-user-modal.png) - **Deactivate User** โ€“ Marks the user as inactive, preventing them from logging into the system. - **Activate User** โ€“ Reactivates a deactivated user, allowing them to log in again. diff --git a/apps/docs/src/content/docs/core/manual-installation.mdx b/apps/docs/content/docs/1.1.7-beta/manual-installation.mdx similarity index 100% rename from apps/docs/src/content/docs/core/manual-installation.mdx rename to apps/docs/content/docs/1.1.7-beta/manual-installation.mdx diff --git a/apps/docs/content/docs/1.1.7-beta/meta.json b/apps/docs/content/docs/1.1.7-beta/meta.json new file mode 100644 index 0000000..faf9858 --- /dev/null +++ b/apps/docs/content/docs/1.1.7-beta/meta.json @@ -0,0 +1,28 @@ +{ + "title": "v1.1.7-beta", + "description": "(Deprecated)", + "root": true, + "icon": "Building2", + "pages": [ + "---Introduction---", + "index", + "architecture", + "github-architecture", + "installation", + "manual-installation", + "api", + "---How to use Palmr.---", + "login", + "manage-users", + "upload", + "generate-share", + "configuring-smtp", + "available-languages", + "---Developers---", + "contribute", + "open-an-issue", + "---Sponsor this project---", + "gh-star", + "gh-sponsor" + ] +} diff --git a/apps/docs/src/content/docs/developers/open-an-issue.md b/apps/docs/content/docs/1.1.7-beta/open-an-issue.md similarity index 94% rename from apps/docs/src/content/docs/developers/open-an-issue.md rename to apps/docs/content/docs/1.1.7-beta/open-an-issue.md index 228c675..164eedb 100644 --- a/apps/docs/src/content/docs/developers/open-an-issue.md +++ b/apps/docs/content/docs/1.1.7-beta/open-an-issue.md @@ -24,7 +24,7 @@ Alternatively, you can search for "Palmr" in the GitHub search bar and click on On the Palmr repository page, click on the **Issues** tab near the top of the page. This will take you to the issues section of the repository. -![Palmr Profile Menu](/public/developers/issues-tab.png) +![Palmr Profile Menu](/assets/v1/developers/issues-tab.png) --- @@ -33,7 +33,7 @@ On the Palmr repository page, click on the **Issues** tab near the top of the pa Once you're in the issues section, click the **New Issue** button to start creating a new issue. -![Palmr Profile Menu](/public/developers/new-issue-btn.png) +![Palmr Profile Menu](/assets/v1/developers/new-issue-btn.png) --- @@ -47,7 +47,7 @@ Youโ€™ll now see a form where you can provide details about your issue. Hereโ€™s 3. **Labels (Optional)**: Add labels to categorize your issue (e.g., `bug`, `enhancement`, `question`). This helps the maintainers organize and prioritize issues. 4. **Attachments (Optional)**: You can attach screenshots, logs, or other files to help explain the issue. -![Palmr Profile Menu](/public/developers/new-issue-form.png) +![Palmr Profile Menu](/assets/v1/developers/new-issue-form.png) --- diff --git a/apps/docs/src/content/docs/main/upload.md b/apps/docs/content/docs/1.1.7-beta/upload.md similarity index 81% rename from apps/docs/src/content/docs/main/upload.md rename to apps/docs/content/docs/1.1.7-beta/upload.md index 0fc6b89..6721349 100644 --- a/apps/docs/src/content/docs/main/upload.md +++ b/apps/docs/content/docs/1.1.7-beta/upload.md @@ -17,36 +17,36 @@ Now let's focus on the file upload process. As mentioned, it is very simple, and On the home page, there is a **"Recent Uploads"** section. On the first initialization (when no file has been uploaded yet), it will appear like this: -![Recent Uploads Section](/public/main/upload/recent-uploads.png) +![Recent Uploads Section](/assets/v1/main/upload/recent-uploads.png) To upload a file, simply click on the **"Upload File"** button. This will open a modal where you can select the file you want to upload from your device. Some file types, such as images, audio, and video, will have a preview available. -![Upload File Button](/public/main/upload/upload-file-button.png) +![Upload File Button](/assets/v1/main/upload/upload-file-button.png) ### Example with an image: -![Preview Example](/public/main/upload/preview-example.png) +![Preview Example](/assets/v1/main/upload/preview-example.png) After selecting the file, you can either confirm the upload by clicking the **"Upload"** button or cancel the operation by clicking the **"Cancel"** button. -![Upload and Cancel Buttons](/public/main/upload/upload-cancel-buttons.png) +![Upload and Cancel Buttons](/assets/v1/main/upload/upload-cancel-buttons.png) Once one or more files have been uploaded, the **"Recent Uploads"** section will update and look like this: -![Recent Uploads with Files](/public/main/upload/recent-uploads-filled.png) +![Recent Uploads with Files](/assets/v1/main/upload/recent-uploads-filled.png) To upload a new file from this screen, click the **"Upload File"** button in the upper right corner of the section, and follow the same steps as before. -![New Upload Button](/public/main/upload/new-upload-button.png) +![New Upload Button](/assets/v1/main/upload/new-upload-button.png) This list on the home page shows only the **last 5 uploads**. To view older files or upload more, you need to go to the **"My Files"** page. You can access this by clicking on the **"View All"** button in the upper right corner of the section or by clicking on the **"My Files"** card on the home page. -![View All Button](/public/main/upload/view-all-button.png) +![View All Button](/assets/v1/main/upload/view-all-button.png) Or: -![My Files Card](/public/main/files/my-files-card.png) +![My Files Card](/assets/v1/main/files/my-files-card.png) --- @@ -54,7 +54,7 @@ Or: On the **"My Files"** page, the layout will look like this: -![My Files Page](/public/main/files/my-files-page.png) +![My Files Page](/assets/v1/main/files/my-files-page.png) Here, you have the option to **filter** your uploaded files or upload new ones by clicking the **"Upload File"** button and following the same steps explained earlier. @@ -72,13 +72,13 @@ The table fields include: ### Actions Column In the **"Actions"** column, you will find an icon that opens the following dropdown: -![Actions Dropdown](/public/main/files/actions-dropdown.png) +![Actions Dropdown](/assets/v1/main/files/actions-dropdown.png) Each option is self-explanatory, but letโ€™s detail the **Edit** option: - **Edit** โ€“ Opens a modal where you can edit the file name, description, and other details. - ![Edit Modal](/public/main/files/edit-modal.png) + ![Edit Modal](/assets/v1/main/files/edit-modal.png) - You can also **delete** a file directly from the dropdown by selecting the **Delete** option. diff --git a/apps/docs/content/docs/2.0.0-beta/api.mdx b/apps/docs/content/docs/2.0.0-beta/api.mdx new file mode 100644 index 0000000..784d494 --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/api.mdx @@ -0,0 +1,48 @@ +--- +title: ๐Ÿ”Œ API Endpoints +tag: v2.0.0-beta +--- + +## ๐Ÿ“š Accessing the API Documentation + +Palmr. provides a **comprehensive, well-documented, and fully typed API** that has been carefully designed to ensure maximum developer productivity and ease of integration. + +### ๐ŸŽฏ Scalar-Based Documentation + +This API can be accessed through dedicated documentation endpoints at: + +- **In a production environment:** `{your_server_domain}/docs` or `{your_server_ip}/docs` +- **In a local environment:** http://localhost:3333/docs + +The API documentation is powered by **[Scalar](https://scalar.com/)**, which provides developers with a sophisticated and fully interactive interface for exploring, testing, and validating all available requests within the Palmr. ecosystem. This modern documentation platform enables real-time testing and visualization of API responses. Below is an example screenshot of the API documentation interface: + +![Palmr API Documentation](/assets/v2/api-docs/scalar.png) + + +We have made a deliberate decision to **not provide an online version** of the API documentation, as the endpoints and functionality may vary significantly depending on the specific version of Palmr. you have deployed in your environment. To ensure you're always working with accurate and version-specific documentation, we strongly recommend accessing the documentation only after initializing your API service. It's important to note that the API service is specifically designated as the **server** component within the official Palmr. GitHub repository. + +We strongly recommend utilizing **Scalar** as your primary tool for querying and testing the API, as the entire documentation system has been carefully optimized and designed with Scalar integration in mind. Scalar provides developers with an exceptionally intuitive and feature-rich interactive environment that streamlines the process of exploring endpoints, constructing and sending requests, and analyzing responses directly within its sophisticated interface. + +--- + +### ๐Ÿ”„ Swagger-Based Documentation + +Understanding that developers may have different preferences or requirements, we also maintain a **Swagger-based version** of the documentation for those who prefer this widely-adopted documentation standard or require compatibility with existing tools and workflows. + +![Palmr API Documentation](/assets/v2/api-docs/swagger.png) + +This alternative documentation format can be accessed at the following endpoints: + +- **In a production environment:** `{your_server_domain}/swagger` or `{your_server_ip}/swagger` +- **In a local environment:** http://localhost:3333/swagger + +Rest assured that both the Scalar and Swagger documentation versions maintain complete parity in terms of endpoint coverage and provide equally comprehensive documentation levels, ensuring successful testing and system integration regardless of your chosen documentation platform. + +These carefully curated documentation options have been implemented to ensure that developers have access to all the necessary resources, detailed information, and interactive tools required for seamless integration between Palmr. and both internal systems and third-party services. + +### ๐Ÿ”— Useful Links + +For additional information and detailed documentation about the tools that power our API documentation, please refer to these official resources: + +- [Scalar Official Website](https://scalar.com/) +- [Swagger Official Website](https://swagger.io/) \ No newline at end of file diff --git a/apps/docs/content/docs/2.0.0-beta/architecture.mdx b/apps/docs/content/docs/2.0.0-beta/architecture.mdx new file mode 100644 index 0000000..54cdd4a --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/architecture.mdx @@ -0,0 +1,62 @@ +--- +title: ๐Ÿ— Architecture of Palmr. +--- + +## ๐Ÿ” Overview + +Understanding the architecture of Palmr. is crucial for both deploying and scaling the application. Below is a diagram illustrating the main components: + +![Palmr Banner](/assets/v2/general/architecture.png) + +## ๐Ÿ›  Technologies Used + +Each component in the Palmr. architecture plays a vital role in ensuring reliability, performance, and scalability. The stack is built with simplicity, performance, and flexibility in mind, everything is self-hosted, developer-friendly, and designed to scale without adding unnecessary complexity. + + +### ๐Ÿ’พ PostgreSQL +Palmr. uses **PostgreSQL** as the primary database solution. It's a powerful, open-source relational database thatโ€™s trusted by developers around the world. PostgreSQL is fully ACID-compliant, which means it handles transactions safely and reliably. Itโ€™s perfect for storing structured data like user accounts, file metadata, transfer logs, and anything else that requires consistency. With advanced features like full-text search, custom data types (like JSONB), and strong indexing capabilities, PostgreSQL gives us the tools to scale efficiently without giving up query performance or flexibility. + +- Provides reliable and secure data storage, ensuring consistency and high performance for all database operations. +- Powerful indexing, query optimization, and support for complex data types. +- Ideal for handling large amounts of metadata and transactional data in a predictable and scalable way. + + +### ๐ŸŽจ Next.js 15 + React + TypeScript +The frontend of Palmr. is built using **Next.js 15**, along with **React** and **TypeScript**, forming a modern stack thatโ€™s easy to maintain and super fast for end users. Next.js 15 brings server components, server actions, and a new app router system that makes rendering dynamic content incredibly efficient. This allows us to load only whatโ€™s needed, when itโ€™s needed which makes the app feel snappy even under load. React provides a clean, component-based structure that makes it easy to break the UI into reusable pieces, and TypeScript helps prevent bugs before they even happen by enforcing static typing and better code navigation. Whether it's SSR, static pages, or dynamic user interactions, this trio handles it all seamlessly. + +- **React** enables the creation of a dynamic and responsive user interface with a component-based architecture. +- **TypeScript** adds static typing, enhancing code quality and reducing runtime errors. +- **Next.js 15** handles routing, server-side rendering, and server components for performance at scale. + + +### ๐Ÿ“ฆ MinIO +Palmr. uses **MinIO** for object storage. MinIO is a lightweight, high-performance, S3-compatible storage solution that makes file handling simple and scalable. Every file uploaded to Palmr. Whether it's a personal file transfer or a shared asset is stored in MinIO. Itโ€™s built to handle huge amounts of data and can be deployed locally, on-premise, or in the cloud. Because it speaks the same API as Amazon S3, integrating with it is straightforward and familiar to most developers. And since itโ€™s self-hosted, we have full control over performance, redundancy, and security. + +- Supports high-throughput file storage and retrieval. +- Ensures data integrity and redundancy. +- Compatible with AWS S3 APIs, making integration seamless. + + +### โšก Fastify +The backend of Palmr. is powered by **Fastify**, a super-fast Node.js web framework optimized for performance and low overhead. Itโ€™s designed to handle lots of concurrent requests with minimal resource usage, which is key for scalable backend services. Fastify also has a built-in schema validation system that ensures all incoming data is properly validated before reaching business logic, which helps prevent bugs and security issues. It follows a plugin-based architecture, making it easy to keep route handlers, services, and middlewares cleanly separated and easy to extend as the project grows. + +- Provides fast request handling with a lightweight core. +- Built-in schema-based validation for secure and reliable API handling. +- Supports plugin-based architecture for easy extensibility. + + +### ๐Ÿ”„ How It Works +1. **Frontend** โ€” React + TypeScript + Next.js 15 handle the user interface and user interactions. +2. **Backend** โ€” Fastify processes requests and communicates with the database and storage layers. +3. **Database** โ€” PostgreSQL stores metadata and transactional data. +4. **Object Storage** โ€” MinIO stores the actual files and ensures scalable, high-performance storage. + + +### ๐Ÿ“š Useful Links +- [PostgreSQL Documentation](https://www.postgresql.org/docs/) +- [Next.js Documentation](https://nextjs.org/docs) +- [React Documentation](https://react.dev/) +- [TypeScript Handbook](https://www.typescriptlang.org/docs/) +- [MinIO Documentation](https://min.io/docs/minio/container/index.html) +- [Fastify Documentation](https://fastify.dev/docs/latest/) + diff --git a/apps/docs/content/docs/2.0.0-beta/available-languages.mdx b/apps/docs/content/docs/2.0.0-beta/available-languages.mdx new file mode 100644 index 0000000..ba07a03 --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/available-languages.mdx @@ -0,0 +1,52 @@ +--- +title: ๐ŸŒ Available languages +--- + +The project leverages next-intl, a powerful and flexible internationalization (i18n) library, to provide comprehensive language support across the entire application. This robust solution enables seamless translation management, date/time formatting, number formatting, and pluralization rules across different locales. The integration of next-intl ensures consistent internationalization throughout the application's components, pages, and features, while maintaining optimal performance through efficient bundle splitting and lazy loading of language resources. With its TypeScript support and React Server Components compatibility, next-intl serves as the foundation for delivering a truly global and accessible user experience. + +## ๐Ÿ—ฃ๏ธ Available Languages in Palmr. + +--- + +| Language | Code | Description | Translation | +|----------|------|-------------|-------------| +| ๐Ÿ‡บ๐Ÿ‡ธ English | en-US | Primary development language and default fallback option | 100% | +| ๐Ÿ‡ง๐Ÿ‡ท Portuguese | pt-BR | Standard Brazilian Portuguese support | 100% | +| ๐Ÿ‡ซ๐Ÿ‡ท French | fr-FR | Standard French language support | 100% | +| ๐Ÿ‡ช๐Ÿ‡ธ Spanish | es-ES | Standard Spanish language support | 100% | +| ๐Ÿ‡ฉ๐Ÿ‡ช German | de-DE | Standard German language support | 100% | +| ๐Ÿ‡ท๐Ÿ‡บ Russian | ru-RU | Standard Russian language support | 100% | +| ๐Ÿ‡ฎ๐Ÿ‡ณ Hindi | hi-IN | Standard Hindi language support | 100% | +| ๐Ÿ‡ธ๐Ÿ‡ฆ Arabic | ar-SA | Standard Arabic language support with RTL | 100% | +| ๐Ÿ‡ฏ๐Ÿ‡ต Japanese | ja-JP | Standard Japanese language support | 100% | +| ๐Ÿ‡ฐ๐Ÿ‡ท Korean | ko-KR | Standard Korean language support | 100% | +| ๐Ÿ‡น๐Ÿ‡ท Turkish | tr-TR | Standard Turkish language support | 100% | +| ๐Ÿ‡จ๐Ÿ‡ณ Chinese | zh-CN | Standard Simplified Chinese support | 100% | + +### ๐Ÿ”„ Language Selection + +The application provides two convenient methods for language selection, ensuring a seamless user experience: + +### ๐Ÿค– 1. Automatic Detection + +- The application features sophisticated automatic detection of the user's preferred browser language settings +- Intelligently utilizes the browser's preconfigured language preferences to set the initial application language + +### ๐Ÿ‘† 2. Manual Selection + +![](/assets/v1/main/language/language-selector.png) + +- Users have complete control to manually select their preferred language through an intuitive language selector interface in the UI +- Selected language preferences are persistently stored in the browser's localStorage for a consistent experience across sessions + +### โญ Default Language + +English (en-US) serves as the system's fallback language, ensuring consistent functionality even when language detection or selection encounters issues. This means that if a user's preferred language is not available or if there are any problems with language selection, the application will automatically default to English. This fallback mechanism is crucial for maintaining a seamless user experience and preventing any potential language-related disruptions. Additionally, all new features and updates are first implemented in English before being translated into other supported languages, ensuring that the English version always remains the most up-to-date and comprehensive. + +### ๐Ÿ” Language Detection + +The application employs advanced detection mechanisms to automatically identify and apply the user's browser language settings as the initial language configuration. For maximum flexibility, users can easily override this selection at any time using the convenient language switcher, accessible via the globe icon prominently displayed in the navigation bar. + +### โ†”๏ธ RTL Support + +The application incorporates comprehensive right-to-left (RTL) text handling capabilities, with particular attention paid to Arabic (ar-SA) language requirements, ensuring proper text alignment, layout direction, and user interface elements. \ No newline at end of file diff --git a/apps/docs/content/docs/2.0.0-beta/configuring-smtp.mdx b/apps/docs/content/docs/2.0.0-beta/configuring-smtp.mdx new file mode 100644 index 0000000..d08f9ae --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/configuring-smtp.mdx @@ -0,0 +1,67 @@ +--- +title: โœ‰๏ธ Configuring SMTP +--- + +For Palmr to function with all its best features, we need to configure our email server. To make this easier, there is a built-in configuration panel inside **Settings** in Palmr. However, only users with an **ADMIN** profile can access and configure these settings. + +## โ“ Why Configure SMTP? + +The main functionalities that depend on SMTP configuration are: +- ๐Ÿ”‘ **Password Reset** โ€“ Users who forget their password and cannot access the **Settings** panel need this feature. +- ๐Ÿ“ง **Email Notifications** โ€“ Recipients will receive emails when new shares are sent to them. + +Now, let's go through the step-by-step process to configure the **SMTP Server**. + +--- + +### ๐Ÿ”ง Accessing SMTP Settings + +To access **Settings**, an **ADMIN** user must click on the profile picture in the **header** and select **Settings** from the dropdown menu. + +![Dropdown Menu](/assets/v1/main/smtp/dropdown-menu.png) + +Once inside the **Settings** panel, click on the **Email** card to expand the SMTP configuration options. + +![Closed Settings Card](/assets/v1/main/smtp/closed-card.png) + +After expanding the card, the following SMTP configuration fields will appear: + +![Opened Settings Card](/assets/v1/main/smtp/opened-card.png) + +--- + +### โš™๏ธ Configuring SMTP Server + +The first step is to **enable SMTP** by selecting "Yes" in the **SMTP Enabled** field. + +![SMTP Enabled](/assets/v1/main/smtp/smtp-enabled.png) + +Once SMTP is enabled, you can configure the other necessary fields: + +- **Sender Name** โ€“ This will appear as the senderโ€™s name in emails. (Example: "Palmr") +- **Sender Email** โ€“ The email address from which notifications will be sent. (Example: "noreply@palmr.app") +- **SMTP Server** โ€“ The SMTP server address. You can use any email service provider. For Gmail, use `smtp.gmail.com` (this is the recommended option and set as default). +- **SMTP Port** โ€“ The server port. For Gmail, the standard port is **587**. +- **SMTP Username** โ€“ The username for the SMTP server. For Gmail, enter your email address. +- **SMTP Password** โ€“ The SMTP password. (Generate an App Password for Gmail) + +> **Important:** If using **Gmail**, you need to generate an **App Password** instead of using your standard email password. +> For other email services, consult the official documentation of the service provider you are using. We recommend using Gmail for simplicity and limits the number of emails sent. + +--- + +### ๐Ÿ” Generating a Gmail App Password + +To generate an App Password for Gmail: +1. Go to [Google My Account](https://myaccount.google.com/). +2. Select **Security**. +3. Scroll down to **App Passwords**. +4. Generate a new password specifically for Palmr. + +For a complete guide, refer to: **[How to set up SMTP credentials with Gmail](https://medium.com/rails-to-rescue/how-to-set-up-smtp-credentials-with-gmail-for-your-app-send-email-cf236d11087d)**. + +--- + +### โœ… Finalizing SMTP Configuration + +After entering the correct information, save the settings. Palmr is now ready to send emails for password resets and share notifications! diff --git a/apps/docs/content/docs/2.0.0-beta/contribute.mdx b/apps/docs/content/docs/2.0.0-beta/contribute.mdx new file mode 100644 index 0000000..cc56cf2 --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/contribute.mdx @@ -0,0 +1,217 @@ +--- +title: ๐Ÿค How to Contribute +--- + +## ๐Ÿ‘‹ Introduction + +Thank you for your interest in contributing to the **Palmr.** project! Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Whether you're fixing bugs, adding new features, improving documentation, or sharing ideas, every contribution helps make Palmr better for everyone. We welcome contributors of all experience levels - from beginners to seasoned developers. This comprehensive guide will walk you through the process of contributing to Palmr, from setting up your development environment to submitting your first pull request. We're excited to have you join our community of contributors! + +--- + +### ๐Ÿ”‘ GitHub Login + +Before you can contribute, you need to be logged into your GitHub account. If you don't have an account yet, you can sign up for free at **[GitHub](https://github.com/)**. Having a GitHub account is essential as it allows you to fork repositories, submit pull requests, and interact with other contributors. Make sure to use a professional email address when creating your account, and consider enabling two-factor authentication for enhanced security. Once your account is set up, you can customize your profile and start exploring the vast open-source community on GitHub. + +--- + +### ๐Ÿ” Access the Repository +Once you're logged in, go to the Palmr repository by clicking on this link: **[https://github.com/kyantech/Palmr](https://github.com/kyantech/Palmr)**. The repository contains all the source code, documentation, and resources for the Palmr project. Take a moment to explore the repository structure, including the README file, which provides an overview of the project. + +Alternatively, you can search for "Palmr" in the GitHub search bar and click on the repository owned by **kyantech**. When searching, make sure you're looking at the official repository by checking the owner and repository name. The repository should have a description that matches the Palmr project and show recent activity from the maintainers. You can also check the number of stars, forks, and watchers to verify you're accessing the correct repository. + +--- + +### ๐Ÿด Fork the Repository + +To contribute to the project, you'll need to create your own copy of the repository. This is called a **fork**. Here's how to do it: + +1. Click the **Fork** button at the top right of the repository page. +2. Select where you want to fork the repository (your personal account or an organization). +3. Wait a few moments while GitHub creates your fork. +4. This will create a copy of the repository under your GitHub account. +5. You'll be automatically redirected to your forked repository once it's ready. + +The fork will maintain a connection to the original repository, allowing you to: +- Keep your fork synchronized with the original repository +- Submit pull requests from your fork to the original repository +- Work independently on your own copy without affecting the original + +--- + +### ๐Ÿ“ฅ Clone the Fork + +Next, youโ€™ll need to clone your forked repository to your local machine. Hereโ€™s how: +1. On your forked repository page, click the **Code** button. +2. Copy the repository URL (HTTPS or SSH). +3. Open your terminal or command prompt and run the following command to clone the repository: + + ```bash + git clone + ``` + +4. Navigate into the cloned directory: + + ```bash + cd Palmr + ``` + +--- + +### ๐Ÿ”„ Set up Base Branch + +Before making changes, ensure your local repository is set up to track the `next` branch from the original Palmr repository. Hereโ€™s how: +1. Add the original Palmr repository as a remote: + + ```bash + git remote add upstream https://github.com/kyantech/Palmr.git + ``` + +2. Fetch the latest changes from the `next` branch: + + ```bash + git fetch upstream next + ``` + +3. Create a new branch for your contribution based on `upstream/next`: + + ```bash + git checkout -b your-branch-name upstream/next + ``` + +--- + +### โœ๏ธ Make Local Changes +Now you're ready to make your contributions! This could include: +- Fixing a bug +- Adding a new feature +- Improving documentation +- Writing tests +- Enhancing performance +- Adding translations +- Improving accessibility +- Refactoring code +- Adding examples +- Reporting issues + +Make your changes in your local repository using your preferred code editor. Here are some tips for making changes: + +1. **Follow the Style Guide**: Make sure your code follows the project's coding standards and style guidelines +2. **Test Your Changes**: Run tests locally to ensure your changes don't break existing functionality +3. **Keep Changes Focused**: Make small, focused changes that address a single issue or feature +4. **Document Your Changes**: Add or update documentation as needed to explain your changes +5. **Review Your Work**: Double-check your changes before committing to ensure quality + +Remember to regularly save your work and test your changes incrementally to catch any issues early in the development process. + +--- + +### ๐Ÿ“ Use Conventional Commits + +Once youโ€™ve made your changes, commit them to your branch using **Conventional Commits**. Conventional Commits help maintain a clean and consistent commit history. Hereโ€™s how to format your commit messages: + +**Commit Message Format:** +`(): ` + +**Examples:** +- `feat: add user authentication` +- `fix(api): resolve null pointer exception` +- `docs: update README file` +- `chore: update dependencies` + +**Steps to Commit:** +1. Stage your changes: + + ```bash + git add . + ``` + +2. Commit your changes with a properly formatted message: + + ```bash + git commit -m "feat: add new feature for user profiles" + ``` + +--- + +### ๐Ÿ“ค Push Changes + +After committing your changes, you'll need to push them to your forked repository on GitHub. This step synchronizes your local changes with your remote repository. Here's how to do it: + +1. First, ensure your branch is up-to-date with any remote changes: + ```bash + git pull origin your-branch-name + ``` + +2. Then push your commits to your forked repository: + ```bash + git push origin your-branch-name + ``` + +If this is the first time pushing this branch, you might need to set the upstream branch: + ```bash + git push -u origin your-branch-name + ``` + +If you encounter any errors while pushing: +- Make sure you have the correct permissions on your fork +- Verify your remote URL is correct using `git remote -v` +- Check if you need to authenticate with GitHub + +--- + +### ๐Ÿ”€ Create Pull Request + +Now that your changes are on GitHub, you can open a **Pull Request (PR)** to propose your changes to the `next` branch of the Palmr repository. Hereโ€™s how: +1. Go to your forked repository on GitHub. +2. Click the **Pull Request** button. +3. On the PR creation page: + - Set the **base repository** to `kyantech/Palmr`. + - Set the **base branch** to `next`. + - Set the **head repository** to your forked repository. + - Set the **compare branch** to your branch (`your-branch-name`). +4. Fill out the PR form with a clear title and description of your changes. +5. Click **Create Pull Request**. + +--- + +### โณ Await Review + +Once your PR is submitted, the maintainers will review your changes. They may provide feedback or request additional changes. During this process: + +- **Monitor Your PR**: Keep an eye on GitHub notifications for any comments or requests +- **Be Responsive**: Try to address feedback promptly and professionally +- **Make Updates**: If changes are requested, update your branch and push the new commits +- **Ask Questions**: Don't hesitate to ask for clarification if needed +- **Be Patient**: The review process may take some time depending on maintainer availability + +Remember that code review is a collaborative process aimed at ensuring code quality. Stay engaged and maintain open communication with the maintainers throughout the review process. + +--- + +## ๐Ÿ’ก Contribution Tips + +To ensure your contribution is accepted, follow these tips: +- **Use Conventional Commits**: Write clear and consistent commit messages using the Conventional Commits format. +- **Keep Your PRs Small**: Focus on one issue or feature per PR to make it easier to review. +- **Be Patient**: Maintainers are often volunteers and may take some time to review your PR. +- **Write Tests**: Include tests for any new features or bug fixes you implement. +- **Follow Code Style**: Adhere to the project's coding standards and style guidelines. +- **Update Documentation**: Keep documentation in sync with code changes. +- **Engage in Discussion**: Participate in PR discussions and be open to feedback. +- **Review Others' PRs**: Help the community by reviewing other contributors' pull requests. +- **Stay Updated**: Keep your fork synchronized with the main repository. + +--- + +## โญ Why Contribute? + +Contributing to open-source projects like Palmr has many benefits: +1. **Improves the Project**: Your contributions help make the project better for everyone. +2. **Builds Your Skills**: Youโ€™ll gain experience working with Git, GitHub, and collaborative coding. +3. **Supports the Community**: Open-source thrives on community contributions. Your work helps sustain the project. + +--- + +## ๐ŸŽ‰ Final Words + +That's it! You've successfully contributed to the **๐ŸŒด Palmr.** project on GitHub. Thank you for your time and effort in making Palmr better for everyone. We appreciate your contribution! diff --git a/apps/docs/content/docs/2.0.0-beta/first-login.mdx b/apps/docs/content/docs/2.0.0-beta/first-login.mdx new file mode 100644 index 0000000..c93f104 --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/first-login.mdx @@ -0,0 +1,108 @@ +--- +title: ๐Ÿ‘‹ First Login (Admin) +--- +After successfully initiating all required services according to the detailed deployment instructions provided, you will gain access to the frontend interface through the following designated endpoints: + +- **Production environment:** `{your_web_domain}` or `{your_server_ip}` - This is your primary access point for the live application deployment +- **Local environment:** [http://localhost:4173](http://localhost:4173/) - This endpoint is specifically for development and testing purposes + +Upon successfully navigating to the frontend interface through either of these endpoints, you will be presented with a comprehensive welcome screen, as illustrated in the image below: + +![Landing Page](/assets/v1/general/lp.png) + +What you are viewing is the **Palmr. landing page** โœจ, which serves as an introductory interface providing essential information about the application's capabilities and features. While this landing page is displayed by default during your initial setup, you have the flexibility to modify this configuration later. Should you prefer, you can configure the system to bypass this landing page and present the login interface as your primary entry point. However, for the purposes of initial system familiarization, the landing page is deliberately set as the default welcome screen. + +--- + +## ๐Ÿ”‘ First Login + +Prominently displayed at the top of the landing page, you will notice a clearly marked button that enables you to authenticate and access Palmr.: + +> But you may wonder: +> + +To facilitate a smooth onboarding experience, Palmr. has been thoughtfully designed with pre-configured **seed data** that is automatically implemented during the initial system initialization. This preliminary data setup includes a comprehensive **admin user** account that is granted complete access privileges, enabling full control over all system settings and user management functionalities within the application environment. + +Upon selecting the **Login** button, the system will seamlessly redirect you to the authentication interface, which presents itself as shown in the following image: + +![Login Page](/assets/v1/ui/login.png) + +For your initial access to the system, please utilize these pre-configured authentication credentials: + +### ๐Ÿ‘ค Admin Credentials + +| User | Password | +| --- | --- | +| `admin@example.com` | `admin123` | + +Following successful validation of your credentials, the system will authenticate your session and automatically direct you to Palmr.'s primary dashboard interface, which appears as demonstrated in this image: + +![Dashboard](/assets/v1/ui/dashboard.png) + +Having completed these steps successfully, you have now established an authenticated session and are fully prepared to explore and utilize the comprehensive feature set that Palmr. has to offer! ๐ŸŽ‰ + +--- + +## ๐Ÿ›ก๏ธ Recommendations After First Access + +Given that Palmr.'s initial configuration includes a solitary default admin user within the seed data, it is **strongly recommended** as a security best practice to modify the default administrative credentials immediately following your first successful login. This crucial step is fundamental to establishing and maintaining the security integrity of your Palmr. instance. + +Please follow this detailed sequence of steps to update your administrative credentials and enhance the security of your Palmr. installation: + +### ๐Ÿ”ง Access the Profile Settings + +1. Locate and click the **user icon** positioned in the upper right corner of your screen interface. +2. Upon clicking, you will be presented with an expandable dropdown menu containing several configuration options: + +![Menu](/assets/v1/ui/menu.png) + +1. From the available options in the dropdown menu, select **"Profile"**. This selection will navigate you to the comprehensive profile settings interface: + +![Profile](/assets/v1/ui/profile.png) + +--- + +### ๐Ÿ“ Update the Admin Profile + +Within the profile settings interface, you have full access to modify all information associated with the administrative account. + +- To enhance security through password modification, input and confirm your newly chosen secure password. +- Take this opportunity to review and adjust any additional profile details according to your specific requirements and preferences. + +**Tip:** โœจ To establish robust security measures, ensure your new password incorporates the following elements: + +- A minimum length of 12 characters to provide adequate complexity +- A diverse combination of uppercase and lowercase alphabetical characters +- An assortment of numerical digits and special character symbols + +--- + +### ๐Ÿ“ธ Update the Profile Picture + +To enhance the personalization of your administrative profile, you have the option to customize your profile picture. + +1. Identify and select the **camera icon** positioned adjacent to your current avatar display. +2. Browse and select an appropriate image file from your local storage device. + +![Profile Picture](/assets/v1/ui/profile_picture.png) + +> ๐Ÿ’ก Recommendation: For optimal visual presentation, utilize an image with equal width and height dimensions (square format). +> + +--- + +## โš ๏ธ Troubleshooting + +Should you encounter any technical difficulties during the initial authentication process or while updating your profile information, please verify the following system components: + +- Confirm the operational status of all essential services, including the frontend interface, backend systems, MinIO storage, and database connections. +- Verify the accurate configuration of all necessary environment variables within your system. +- Ensure the successful and complete application of all database seed operations. + +--- + +## ๐Ÿ”’ Security Best Practices + +- Following the successful configuration of your administrative account, establish additional user accounts with appropriately restricted access permissions based on specific roles and responsibilities. +- Implement HTTPS protocol to ensure secure data transmission between client devices and the server infrastructure. +- Maintain system security by regularly implementing updates to your Palmr. installation to incorporate the latest security patches and system improvements. \ No newline at end of file diff --git a/apps/docs/content/docs/2.0.0-beta/generate-share.mdx b/apps/docs/content/docs/2.0.0-beta/generate-share.mdx new file mode 100644 index 0000000..5f5ef2b --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/generate-share.mdx @@ -0,0 +1,152 @@ +--- +title: ๐Ÿ”— Managing shares +--- + +## ๐Ÿ“ค Creating a share + +Creating a share in Palmr is designed to be a straightforward and user-friendly experience that anyone can master quickly. While the platform offers several methods for share creation, we recommend beginning with the most accessible approach: utilizing the **Home Page**, particularly through the well-organized **Recent Shares** section. + +___ + +### Home Page + +When you visit the home page, you'll immediately notice the **"Recent Shares"** section, which serves as your central hub for file sharing. For new users who haven't created any shares yet, this section presents a clean, welcoming interface as follows: + +![](/assets/v1/main/shares/share-section.png) + +For first-time users, the interface features a prominently positioned **"Create Share"** button that stands out against the clean background, making it impossible to miss. + +![](/assets/v1/main/shares/create-first-share.png) + +> Note: One of Palmr's unique features is its flexibility - you don't need to upload files to create a share! This might seem counterintuitive at first, but it's a deliberately designed feature that many users find invaluable for their specific workflows and use cases. This approach allows you to set up the sharing framework first and add content later. +> + +This design philosophy reflects Palmr's user-centric approach: you can establish your share's parameters and settings first, then populate it with files at your convenience. Furthermore, all aspects of your share remain fully editable at any time, providing maximum flexibility. + +To initiate the share creation process, locate and click the **"Create Share"** button positioned centrally within the **Recent Shares** section. This action will trigger the appearance of a comprehensive **Create Share** modal window: + +![](/assets/v1/main/shares/create-share-modal.png) + +Within the modal, you'll find various fields to customize your share. While some fields are optional, they each serve important functions in controlling how your share behaves. Pay particular attention to these three powerful security options - **Expiration Date**, **Max Views**, and **Password** - as they significantly enhance your control over how recipients interact with your shared content: + +- **Password:** Adding this extra layer of security ensures that only recipients with the correct password can gain access to your shared content, providing an additional verification step. +- **Max Views:** This feature allows you to set a specific limit on the number of times your share can be accessed. Once this threshold is reached, the share becomes inaccessible unless you, as the creator, choose to adjust or remove the viewing limit. +- **Expiration Date:** By setting this parameter, you can determine precisely how long your share remains accessible. After the specified date passes, the share automatically deactivates, though you retain the ability to extend this deadline if needed. + +While the **name** field isn't mandatory, we strongly encourage users to assign meaningful names to their shares for easier management and organization of multiple shares over time. + +After successfully creating a share, the **Recent Shares** section transforms into an informative table display, presenting comprehensive details through the following columns: + +- **Name** +- **Created At** +- **Expires At** +- **Status** +- **Security** +- **Files** +- **Recipients** +- **Actions** + +![](/assets/v1/main/shares/shares-table.png) + +For your convenience, once you've created your first share, a **"New Share"** button appears in the upper right corner of the **Recent Shares** section, making it easy to create additional shares. + +![](/assets/v1/main/shares/new-share-btn.png) + +This conveniently positioned button provides quick access to the **Create Share** modal whenever you need to create another share. + +To maintain a clean and manageable interface, the **Recent Shares** section displays your **last 5 shares** by default. When you need to access your complete sharing history, simply click the **"View All"** button to see your entire collection of shares. + +![](/assets/v1/main/shares/recent-shares-filled.png) + +![](/assets/v1/main/shares/view-all-button.png) + +Upon clicking this button, you'll be seamlessly redirected to the comprehensive **Shares Management** page. + +![](/assets/v1/main/shares/my-shares-page.png) + +For quick access to your complete share collection, you can also reach the **Shares Management** page by clicking the conveniently placed **"My Shares"** card on the home page. + +![](/assets/v1/main/shares/my-shares-card.png) + +--- + +### ๐Ÿ“Š Shares Management Page + +The **Shares Management** page functions similarly to the **Uploads Management** page but offers expanded capabilities. Here, you'll find a complete overview where you can **add, remove, edit, and view all created shares** without being restricted to the five-share limit of the Recent Shares section. + +Each share has an **Actions** column with the following options: + +![](/assets/v1/main/shares/actions-column.png) + +___ + +## โœ๏ธ Edit Share + +The **Edit** button provides access to a comprehensive interface where you can modify and update all share details as needed. + +![](/assets/v1/main/shares/edit-share-modal.png) + +## ๐Ÿ“ Manage Files + +___ + +Through the **Manage Files** button, you gain complete control over the content of your share, with the ability to both add new files and remove existing ones. + +![](/assets/v1/main/shares/manage-files-modal.png) + +___ + +## ๐Ÿ‘ฅ Manage Recipients + +The **Manage Recipients** button opens an interface where you can maintain your recipient list, adding or removing access as needed. + +> Note: For email notifications to function properly, please ensure that your system's SMTP settings are correctly configured and active. +> + +![](/assets/v1/main/shares/manage-recipients-modal.png) + +___ + +## ๐Ÿ‘€ View Share Details + +The **View Details** option provides a comprehensive overview of all aspects and settings associated with your share. + +![](/assets/v1/main/shares/share-details-modal.png) + +___ + +## ๐Ÿ”— Generate Share Link + +The **Generate Link** feature allows you to create a customizable sharing link for easy distribution of your content. + +![](/assets/v1/main/shares/generate-share-link-modal.png) + +After generation, the system presents you with the link for immediate viewing and copying. + +![](/assets/v1/main/shares/copy-link-modal.png) + +A convenient dropdown menu provides options to either edit the generated link's settings or copy it to your clipboard. + +![](/assets/v1/main/shares/dropdown-with-copy.png) + +When recipients access your generated link, they'll be able to both **view and download** the shared files according to the permissions you've set. + +![](/assets/v1/main/shares/share-screen.png) + +___ + +## Delete Share + +Clicking the + +**Delete** + +button allows you to permanently remove any share that's no longer needed. + +![](/assets/v1/main/shares/delete-share-modal.png) + +--- + +### ๐Ÿ“ Summary + +Palmr's share creation system exemplifies intuitive design and flexible functionality. The platform offers comprehensive features including file-free share creation, customizable share settings, recipient management, and secure link generation. The dedicated **Shares Management** page serves as your command center, providing complete oversight and control of your entire sharing ecosystem. \ No newline at end of file diff --git a/apps/docs/content/docs/2.0.0-beta/gh-sponsor.mdx b/apps/docs/content/docs/2.0.0-beta/gh-sponsor.mdx new file mode 100644 index 0000000..19e4621 --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/gh-sponsor.mdx @@ -0,0 +1,110 @@ +--- +title: ๐Ÿ’ Github Sponsors +--- + +## ๐Ÿ‘‹ Introduction + +Sponsoring a project on GitHub is a powerful way to support its development and ensure its long-term sustainability. This tutorial will guide you through the process of sponsoring the **Palmr.** project on GitHub using GitHub Sponsors. + +By becoming a sponsor, you'll not only help maintain and improve the project, but you'll also: + +- Support continuous development and bug fixes +- Enable new feature implementations +- Help cover hosting and infrastructure costs +- Show appreciation for the developers' hard work +- Join a community of supporters who value open source + +--- + +### ๐Ÿ”‘ GitHub Login + +Before you can sponsor a project, you need to be logged into your GitHub account. If you don't have an account yet, you can sign up for free at [GitHub](https://github.com/). Having an account also allows you to: + +- Follow project updates +- Report issues +- Contribute to discussions +- Access sponsor-only content (if available) + +--- + +### ๐Ÿ” Access the Repository + +Once you're logged in, go to the Palmr. repository by clicking on this link: [https://github.com/kyantech/Palmr](https://github.com/kyantech/Palmr). + +Alternatively, you can search for "Palmr" in the GitHub search bar and click on the repository owned by **Kyantech**. + +You can also: +- Star the repository to show your support +- Watch it for updates +- Fork it if you want to contribute + +--- + +### ๐Ÿ’– Click the Sponsor Button + +On the Palmr repository page, you'll see a **Sponsor** button at the top right corner of the page. Click this button to proceed. The button is typically highlighted in a distinct color to make it easily visible. + +![Palmr Sponsor Button](/assets/v1/sponsor/sponsor-btn.png) + +Pro tip: You can also access the sponsorship page directly through your GitHub dashboard under "Sponsoring" if you've sponsored us before. + +--- + +### ๐Ÿ’ฐ Choose a Custom Sponsorship + +GitHub Sponsors allows you to sponsor the project with a **custom amount starting at $1**: + +1. On the sponsorship page, look for the option to **enter a custom amount**. +2. Type in the amount you'd like to sponsor (e.g., $1, $5, $10, or any amount you choose). +3. Select the billing frequency (**monthly** or **one-time**). +4. Consider setting up automatic annual sponsorship for a simplified experience. +5. Look for any special tier benefits that might be available at different sponsorship levels. + +![Sponsor Page Example](/assets/v1/sponsor/sponsor-page.png) + +--- + +### โœ… Complete Your Sponsorship + +After entering your custom amount and selecting the billing frequency, you'll be prompted to enter your payment details. Follow the instructions to complete the sponsorship process. + +Once done, you'll officially be a **Palmr sponsor**! ๐Ÿ™Œ + +--- + +### โญ Why Sponsoring Matters + +- ๐Ÿงฑ Supports Sustainability +Your sponsorship helps keep the project alive and maintained long-term. + +- ๐Ÿš€ Encourages Innovation +Financial support gives developers the freedom to try new ideas and push boundaries. + +- ๐Ÿซถ Shows Deep Appreciation +Sponsoring is a meaningful, tangible way to thank developers for their work. + +- ๐Ÿ† Earns You Recognition +Many projects publicly thank their sponsors โ€” you might appear in the README or on the site! + +- ๐ŸŒฑ Helps Open Source Thrive +Open-source projects rely on community support. Sponsoring helps the ecosystem grow. + +--- + +## ๐ŸŽ What Happens After Sponsoring + +Once you become a sponsor: +1. You'll receive a confirmation email from GitHub +2. Your name will appear in our sponsors list +3. You'll get access to sponsor-only updates and content +4. You'll be invited to our private Discord channel +5. You'll receive early access to new features + +--- + +## ๐ŸŒŸ Final Words + +That's it! You've successfully sponsored the **Palmr.** project on GitHub. +Your support will help ensure this open-source project continues to evolve and thrive. +**We appreciate you and welcome you to our community!** ๐ŸŽ‰ + diff --git a/apps/docs/content/docs/2.0.0-beta/gh-star.mdx b/apps/docs/content/docs/2.0.0-beta/gh-star.mdx new file mode 100644 index 0000000..a276df4 --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/gh-star.mdx @@ -0,0 +1,127 @@ +--- +title: โญ Star on Github +--- + +## ๐Ÿ‘‹ Introduction + +Starring a project on GitHub is a great way to show appreciation for a repository and to bookmark it for easy access later. This tutorial will guide you through the process of starring the **Palmr** project on GitHub. By starring our repository, you help increase its visibility and support the ongoing development of the project. + +--- + +### ๐Ÿ”‘ GitHub Login + +Before you can star a project, you need to be logged into your GitHub account. If you don't have an account yet, you can sign up for free at [GitHub](https://github.com/). Here's how to get started: + +1. Visit [GitHub's signup page](https://github.com/signup) +2. Enter your email address +3. Create a strong password +4. Choose a username +5. Complete the verification process +6. Select your preferences and complete the setup + +Once your account is created, make sure to verify your email address to access all GitHub features. + +--- + +### ๐Ÿ” Access the Repository + +There are several ways to find and access the Palmr repository: + +1. **Direct Link**: Go to the Palmr repository by clicking on this link: [https://github.com/kyantech/Palmr](https://github.com/kyantech/Palmr) + +2. **Search Method**: + - Go to GitHub's main page + - Click the search bar at the top + - Type "Palmr" + - Look for the repository owned by **Kyantech** + - Click on the repository name to access it + +3. **Through Profile**: + - Visit Kyantech's GitHub profile + - Navigate to the "Repositories" tab + - Find and click on "Palmr" + +--- + +### ๐ŸŒŸ Find the Star Button + +Once you're on the Palmr repository page, you'll find the "Star" button in the top-right section of the page. Here's what to look for: + +1. Look at the top navigation bar of the repository +2. Find the row of action buttons (Watch, Fork, Star) +3. The Star button will be prominently displayed with a star icon โญ +4. You may see the current star count next to the button + +![Palmr Profile Menu](/assets/v1/sponsor/star-btn.png) + +--- + +### โœ… Confirm the Star + +After clicking the "Star" button, several things will happen: + +1. The button will change from "Star" to "Unstar" +2. The star count will increase by one +3. The button will fill with color to indicate it's active +4. The repository will be added to your starred repositories list + +You can access your starred repositories anytime by: +- Clicking your profile picture +- Selecting "Your stars" from the dropdown menu +- Or visiting: https://github.com/[your-username]?tab=stars + +To remove your star, simply click the "Unstar" button at any time. + +![Palmr Profile Menu](/assets/v1/sponsor/starred-button.png) + +--- + +### ๐Ÿ’ซ Why Starring Matters + +Starring a repository on GitHub is more than just a bookmarking toolโ€”itโ€™s a way to support the project and its developers. Hereโ€™s why starring is so important: + +- ๐Ÿ™Œ Shows Appreciation +Starring a repository is a simple way to show your appreciation for the hard work and effort that goes into maintaining and developing a project. + +- ๐Ÿ“ˆ Increases Visibility +The more stars a repository has, the more visible it becomes on GitHub. + +- ๐Ÿ’ช Encourages Developers +Seeing stars motivates developers to continue improving the project. + +- ๐Ÿ” Helps with Discovery +GitHub prioritizes repositories with more stars in trending and recommendations. + +- ๐Ÿ“š Tracks Your Interests +Starred repositories are saved to your list for easy access later. + +- ๐ŸŒ Supports Open Source +Your stars help sustain the open-source community and the Palmr project. + +--- + +## ๐Ÿ’ Small Action / Big Impact + +Starring a repository takes just a second, but it can have a huge impact on the project's growth and development. Here's what your star means to us: + +- Helps drive project momentum +- Encourages more community participation +- Provides valuable feedback on project value +- Helps us set and achieve development goals +- Supports sustainable open-source development + +Your star is more than just a number - it's a vote of confidence in our vision and helps shape the future of Palmr. + +--- + +## ๐ŸŽ‰ Final Words + +That's it! You've successfully starred the **Palmr** project on GitHub. Thank you for supporting Palmr and becoming part of our growing community! Your support helps us continue improving and expanding the project for everyone. + +Feel free to explore our other ways to contribute, like: +- Sharing Palmr with others +- Reporting issues +- Contributing code +- Joining discussions + +Every interaction helps make Palmr. better! diff --git a/apps/docs/content/docs/2.0.0-beta/github-architecture.mdx b/apps/docs/content/docs/2.0.0-beta/github-architecture.mdx new file mode 100644 index 0000000..f5dd7a3 --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/github-architecture.mdx @@ -0,0 +1,145 @@ +--- +title: Github Architecture +--- + +import { File, Folder, Files } from "fumadocs-ui/components/files"; + +## Project Structure + + + + + + + + + + + + + + + + + +## Core Components + +### ๐Ÿ–ฅ๏ธ Frontend Application (apps/web) + + **Technology Stack:** + +- Next.js 15 (App Router) +- React 18 +- TypeScript +- TailwindCSS +- shadcn/ui components +- next-intl for internationalization + +Palmr.'s frontend is built with **Next.js 15**, using the App Router and Server Components for performance, scalability, and flexibility. The structure is modular and feature-based, keeping things easy to evolve as the product grows. UI logic runs on **React 18**, and **TypeScript** adds type safety that prevents a lot of silent bugs. Styles are handled with **TailwindCSS**, letting us build clean, responsive interfaces quickly. For components, we rely on **shadcn/ui**, a headless component library built with Radix UI and Tailwind, itโ€™s fast, accessible, and fully customizable. + +Internationalization is handled by **next-intl**, which integrates perfectly with Next.js routing. It supports locale-aware routes, per-page translation loading, and plural rules, all without any extra client-side bloat. Itโ€™s flexible, lightweight, and great for apps with multilingual audiences. + +The frontend is organized with: + +- A **components-based architecture** for modular UI +- **Custom hooks** to isolate logic and side effects +- A **route protection system** using session cookies and middleware +- A **file management interface** integrated with the backend +- A **reusable modal system** used for file actions, confirmations, and more +- **Dynamic, locale-aware routing** using next-intl + +--- + +### โš™๏ธ Backend Service (apps/server) + + **Technology Stack:** + +- Fastify +- PostgreSQL +- MinIO (S3-compatible) +- Prisma ORM + +The backend is built on **Fastify**, a blazing-fast web framework for Node.js. Itโ€™s lightweight, modular, and optimized for high performance. Every route is validated using JSON schema, which helps keep the API consistent and secure. Auth flows are built using JWTs stored in HTTP-only cookies, and everything from file uploads to token-based sharing goes through this layer. + +Data is stored in **PostgreSQL**, which handles user info, file metadata, session tokens, and more. For actual file storage, we use **MinIO**, a fast, S3-compatible object store thatโ€™s self-hosted and super scalable. Itโ€™s perfect for keeping user files isolated and safe. We use **Prisma** as our ORM to simplify database access, it gives us type-safe queries and easy-to-read code. + +Key features include: + +- **Authentication/authorization** with JWT + cookie sessions +- **File management logic** including uploads, deletes, and renames +- **Storage operations** to handle bucket creation, usage tracking, and cleanup +- A **share system** that generates tokenized public file links +- Schema-based request validation for all endpoints +- Prisma models that keep the database logic predictable and type-safe + +--- + +### ๐Ÿ“š Documentation (apps/docs) + + **Technology Stack:** + +- Fumadocs +- MDX (Markdown + JSX) +- React-based components + +The docs are built using **Fumadocs**, a modern documentation system built on top of Next.js. It uses **MDX**, so you can mix Markdown with interactive React components, perfect for developer tools and open-source projects. Pages are fast, versionable, and easy to customize. The goal is to keep the documentation as close to the codebase as possible, using shared components where needed and reusing UI patterns directly from the app. + +It supports sidebar navigation, keyboard shortcuts, dark mode, and even interactive demos or UI previews. The file tree you see above, for example, is powered by a real React component from the docs. + +- Built with **Fumadocs**, powered by Next.js +- Supports **MDX** and full React component embedding +- Ideal for technical docs and live code samples +- Styled using the same Tailwind setup from the main app + +--- + +### ๐Ÿ—๏ธ Infrastructure + +Palmr. is fully containerized using **Docker**, which means every service: frontend, backend, database, storage, runs in its own isolated environment. With `docker-compose`, the whole stack spins up locally with a single command. Itโ€™s also easy to deploy to services like Fly.io, Render, or your own VPS. + +Volumes are used to persist data locally, and containers are networked together so that all services can talk to each other securely. + +- **Docker-first architecture** with all services containerized +- Configurable through `.env` and compose overrides +- Local volumes and named networks +- Easy to deploy and scale on any container-compatible infra + +--- + +## Key Features + +### ๐Ÿ“‚ File Management + +Files are at the heart of Palmr. Users can upload files via the frontend, and theyโ€™re streamed directly to MinIO. The backend handles metadata (name, size, type, ownership), and also handles deletion, renaming, and public sharing. Every file operation is tracked, and all actions can be scoped per user. + +- Upload/download with instant feedback +- File previews, type validation, and size limits +- Token-based sharing system +- Disk usage tracking by user + +### ๐Ÿ‘ค User System + +Authentication is done through secure JWTs, stored in HTTP-only cookies for safety. Signup and login flows are simple and fast, and user info is kept in sync across the frontend and backend. + +- Cookie-based session management +- Role support and future admin access +- Profile updates and password reset flows +- Logged-in user state handled via custom hooks + +### ๐Ÿ’พ Storage System + +MinIO is used for all file storage. Itโ€™s fast, lightweight, and fully S3-compatible which means it can scale easily and integrates with tons of other tools. The backend tracks usage, handles cleanup of orphaned files, and ensures that every file on disk has a matching database record. + +- S3-compatible object storage via MinIO +- Upload validation and automatic cleanup +- Usage tracking and quotas (per user or global) +- Secure access to stored files with signed URLs + +### ๐ŸŒ Internationalization + +Palmr. supports multiple languages using **next-intl**, which is deeply integrated into the routing system. It loads only the necessary translations per route, supports nested namespaces, and makes it easy to keep things organized even at scale. + +- Per-locale localstorage (`en-US`, `pt-BR`, etc.) +- Translation loading by namespace/page +- Full pluralization and formatting support +- Easy translation management via JSON files diff --git a/apps/docs/content/docs/2.0.0-beta/index.mdx b/apps/docs/content/docs/2.0.0-beta/index.mdx new file mode 100644 index 0000000..04f2f2a --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/index.mdx @@ -0,0 +1,52 @@ +--- +title: ๐ŸŒด Welcome to Palmr. +--- + +![Palmr Banner](/assets/v2/general/banner.png) + +**Palmr.** is a powerful and **flexible open-source alternative** to popular file transfer services like **WeTransfer**, **SendGB**, **Send Anywhere** and **Files.fm**. The key advantage of Palmr. is that you can **host it on your own infrastructure**, such as a **dedicated server** or **VPS**, giving you full control over your files and data security without relying on third-party services or worrying about artificial limits or high fees. + +## **Why Choose Palmr.?** + +### ๐Ÿšซ **No Artificial Limits** + +Unlike traditional file transfer services that impose arbitrary restrictions, Palmr. takes a fundamentally different approach by removing all artificial constraints on file sizes and quantities. The only practical limitation you'll encounter is the **available storage** space on your server or VPS infrastructure. This means that as long as you have adequate storage capacity in your hosting environment, you have complete freedom to transfer files of any size and in any quantity. There are no premium tiers to unlock additional features, no intrusive advertisements to navigate around, and absolutely no hidden charges or unexpected fees that might surprise you later. This unrestricted approach ensures that your file transfer capabilities are determined solely by your infrastructure choices rather than arbitrary service limitations. + +### ๐ŸŒŸ **Open Source and Free** + +Palmr. is completely **open source** and free to use, which means there are no licensing fees, subscription costs, or hidden charges associated with implementing and maintaining the software. This commitment to open source principles ensures complete transparency and freedom in how you utilize the platform. You can: + +- Deploy it on any infrastructure of your choice (VPS, dedicated server, Docker, cloud platforms, or other hosting environments), giving you complete flexibility in your hosting decisions. +- Review and audit the entire codebase to ensure security and integrity, allowing you to verify that the software meets your organization's security standards and compliance requirements. +- Contribute improvements or custom features to enhance the platform's functionality, participating in the collaborative development process that makes open source software so powerful. +- Adapt it for different use cases as needed, whether you're using it for personal file sharing, business operations, or specialized applications that require custom modifications. + +### ๐Ÿ”’ **Security and Privacy Under Your Control** + +When you host Palmr. on your infrastructure, you maintain **full control over your data** through end-to-end management of the storage and transfer process. By keeping files within your own hosting environment, you eliminate security vulnerabilities that could arise from third-party handling. Your files never get stored or processed by external services, ensuring complete **privacy** and **confidentiality** of transferred information. This allows you to implement security protocols and compliance measures that match your specific requirements. + +By eliminating third-party involvement, you gain peace of mind knowing that the files are never handled by external providers. This guarantees that you retain full control over data handling and processing, reinforcing the confidentiality of sensitive information throughout its lifecycle. + +With Palmr., your security and privacy are entirely in your hands, making it a powerful and reliable solution for organizations that require full control over their data, whether for internal use or for compliance with regulations. + +### ๐ŸŽจ **Highly Customizable** + +Palmr. offers extensive customization options that allow you to tailor every aspect of the platform to perfectly align with your brand identity and create an optimal user experience that matches your specific requirements: + +- Add your own **logo** to maintain consistent branding across your file-sharing platform and establish a professional, unified presence. +- Set a **custom app name** that reflects your organization's identity and helps users instantly recognize your branded file-sharing solution. +- Configure an **SMTP server** for email notifications, enabling seamless communication with users about file transfers, updates, and system alerts. +- Customize text throughout the interface to create a unique user experience that resonates with your audience and maintains your brand voice. + +### ๐Ÿ‘ฅ **Complete User and Admin Management** + +Palmr. provides a comprehensive and sophisticated user and admin management system that puts you in complete control of your file-sharing environment: + +- Create and manage multiple **administrators** with different permission levels to ensure proper oversight and delegation of responsibilities. +- Add unlimited **users** to accommodate teams of any size, from small workgroups to large enterprises. +- Control who can view, upload, and manage files with granular permission settings that allow you to implement precise access controls. +- Easily monitor storage usage through detailed analytics and reporting tools that help you optimize resource allocation. + +### โšก **Fast, Lightweight, and Scalable** + +Palmr. demonstrates exceptional technical capabilities through its streamlined and expandable architecture, engineered to deliver optimal operational efficiency. The system effectively processes substantial file transfers and manages high-volume user activity while consistently maintaining superior transfer rates. The platform's contemporary infrastructure automatically adjusts to accommodate increased utilization, facilitating uninterrupted functionality as operational requirements expand. Through advanced resource allocation and refined programming, the system delivers a highly responsive user experience that accommodates organizational growth while maintaining consistent performance standards and operational stability. \ No newline at end of file diff --git a/apps/docs/content/docs/2.0.0-beta/installation.mdx b/apps/docs/content/docs/2.0.0-beta/installation.mdx new file mode 100644 index 0000000..0748264 --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/installation.mdx @@ -0,0 +1,253 @@ +--- +title: ๐Ÿณ Installation (Docker Compose) +--- + + +Installation via Docker Compose is the simplest way to run the project across different environments. For it to run correctly, we need two main tools installed in our environment: + +- Docker ([https://docs.docker.com](https://docs.docker.com/)) +- Docker Compose ([https://docs.docker.com/compose](https://docs.docker.com/compose/)) + +> *It's worth emphasizing that Palmr. was fully developed in a MacOS environment and extensively tested on Linux servers. Therefore, we can guarantee the best system performance in these environments. Windows and other environments have not been tested yet, and potential bugs may occur during execution. However, remember that we are still in a beta version of Palmr., and errors or bugs can occur in any operating system. If you identify any issues, we appreciate your help in notifying us through our GitHub [issues page](https://github.com/kyantech/Palmr/issues).* + +--- + +## โšก Quick Start + +Having installed [Docker](https://docs.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) in our environment, we can proceed with the simple installation using these tools. + +In the root folder of our project, we can find our `docker-compose.yaml` file, which is the only file needed to run the project via Docker and Docker Compose. This is because the pre-built images are already in our [DockerHub](https://hub.docker.com/repositories/kyantech) and are only referenced in the `docker-compose.yaml` + +Any changes needed for execution can be made directly in our `docker-compose.yaml` or via environment variables, which we will show later in this tutorial. + +Next, let's look at the content of our `docker-compose.yaml`. + +--- + +## ๐Ÿณ Docker Compose Content +Below is the complete content of our `docker-compose.yaml` that can be copied directly from here or from our official repository ([Docker Compose](https://github.com/kyantech/Palmr/blob/main/docker-compose.yaml)). + +```yaml +services: + palmr-api: + image: kyantech/palmr-api:v2.0.0-beta # Make sure to use the correct version (latest) of the image + container_name: palmr-api + depends_on: + postgres: + condition: "service_healthy" + minio: + condition: "service_healthy" + environment: + - PORT=${API_INTERNAL_PORT:-3333} # Port for the backend service + - DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD:-postgresRootPassword}@postgres:5432/palmr_db?schema=public # Database URL with configurable password through POSTGRES_PASSWORD env var + - MINIO_ENDPOINT=minio # This can change if your MinIO is at a different address + - MINIO_PORT=${MINIO_INTERNAL_API_PORT:-6421} # Default MinIO port (Change if yours is not the default) + - MINIO_USE_SSL=false # MinIO uses SSL by default, but you can change it to true if needed + - MINIO_ROOT_USER=${MINIO_ROOT_USER:-minio_root_user} # MinIO credentials can be configured through MINIO_ROOT_USER env vars + - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-minioRootPassword} # MinIO credentials can be configured through MINIO_ROOT_PASSWORD env vars + - MINIO_REGION=sa-east-1 # MinIO region - This is needed for MinIO to work properly + - MINIO_BUCKET_NAME=files # MinIO bucket name - This is needed for MinIO to work properly, dont change it if you don't know what you are doing + - FRONTEND_URL=${APP_URL:-http://${SERVER_IP:-localhost}:${APP_EXTERNAL_PORT:-5487}} # Frontend URL - Make sure to use the correct frontend URL, depends on where the frontend is running, its prepared for localhost, but you can change it to your frontend URL if needed + - SERVER_IP=${SERVER_IP:-localhost} # Server IP - Make sure to use the correct server IP if you running on a cloud provider or a virtual machine. This prepared for localhost, but you can change it to your server IP if needed + ports: + - "${API_EXTERNAL_PORT:-3333}:${API_INTERNAL_PORT:-3333}" # Backend port mapping + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:${API_INTERNAL_PORT:-3333}/health"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 30s + + palmr-app: + image: kyantech/palmr-app:v2.0.0-beta # Make sure to use the correct version (latest) of the image + container_name: palmr-web + depends_on: + palmr-api: + condition: "service_healthy" + ports: + - "${APP_EXTERNAL_PORT:-5487}:5487" # Frontend port mapping + environment: + - NODE_ENV=production + - NEXT_TELEMETRY_DISABLED=1 + - API_BASE_URL=http://palmr-api:${API_INTERNAL_PORT:-3333} # Here we use docker's internal network to reference the backend service (can be changed if needed) + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:5487"] + interval: 30s + timeout: 10s + retries: 3 + + minio: + image: minio/minio:RELEASE.2025-03-12T18-04-18Z # Use only version RELEASE.2025-03-12T18-04-18Z to avoid compatibility issues with the backend + container_name: minio + environment: + # MinIO credentials - same as above, configurable through environment variables + - MINIO_ROOT_USER=${MINIO_ROOT_USER:-minio_root_user} + - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-minioRootPassword} + - MINIO_SITE_REGION=sa-east-1 + command: server /data --address ":${MINIO_INTERNAL_API_PORT:-6421}" --console-address ":${MINIO_INTERNAL_CONSOLE_PORT:-6422}" + volumes: + - minio_data:/data + ports: + - "${MINIO_EXTERNAL_API_PORT:-6421}:${MINIO_INTERNAL_API_PORT:-6421}" + - "${MINIO_EXTERNAL_CONSOLE_PORT:-6422}:${MINIO_INTERNAL_CONSOLE_PORT:-6422}" + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:${MINIO_INTERNAL_API_PORT:-6421}/minio/health/ready"] + interval: 10s + timeout: 5s + retries: 5 + + minio-init: + image: minio/mc:RELEASE.2025-03-12T17-29-24Z # Use only version RELEASE.2025-03-12T17-29-24Z to avoid compatibility issues with the backend and MinIO + container_name: minio-init + depends_on: + minio: + condition: "service_healthy" + restart: "no" + # The entrypoint script will create a bucket called "files" and set it to be publicly readable using the MinIO client (mc). + entrypoint: > + sh -c " + sleep 5 && + mc alias set myminio http://minio:${MINIO_INTERNAL_API_PORT:-6421} ${MINIO_ROOT_USER:-minio_root_user} ${MINIO_ROOT_PASSWORD:-minioRootPassword} && + mc mb myminio/files --ignore-existing && + mc anonymous set download myminio/files + " + + postgres: + image: bitnami/postgresql:17.2.0 # You can use any postgres version you prefer, but remember that some versions might not be compatible + container_name: palmr-postgres + environment: + # PostgreSQL credentials configurable through environment variables + # POSTGRES_USER, POSTGRES_PASSWORD, and POSTGRES_DB can be set to override defaults + - POSTGRESQL_USERNAME=${POSTGRES_USER:-postgres} + - POSTGRESQL_PASSWORD=${POSTGRES_PASSWORD:-postgresRootPassword} + - POSTGRESQL_DATABASE=${POSTGRES_DB:-palmr_db} + volumes: + - postgres_data:/bitnami/postgresql + ports: + - "5432:5432" + restart: unless-stopped + healthcheck: + test: ["CMD", "pg_isready", "-U", "palmr"] + interval: 10s + timeout: 5s + retries: 5 + +volumes: + minio_data: + postgres_data: + +``` + +Notice that the `docker-compose.yaml` has several comments that help you configure your own compose to meet your environment's needs. Let's give an overview of some changes we can make. + +--- + +### โš™๏ธ Services Overview + +Palmr. consists of five main services, each with specific responsibilities. Below, we present a detailed view of each component: + +| **Service** | **Image** | **Exposed Ports** | **Main Features** | +| --- | --- | --- | --- | +| palmr-api (Backend) | [kyantech/palmr-api:latest](https://hub.docker.com/repository/docker/kyantech/palmr-api/tags/latest/sha256-84245d3d0012aa65c588caba56322363729c4b68c3722a08dcda912904de9d1d) | **3333** | โ€ข Main API service
โ€ข Depends on services: postgres and minio
โ€ข Has healthcheck to ensure availability | +| palmr-app (Frontend) | [kyantech/palmr-app:latest](https://hub.docker.com/repository/docker/kyantech/palmr-app/tags/latest/sha256-33f568673ae8cc8529532146b6afc1acafa203387ced6c7bb3451a7ab4198a2f) | **5487** | โ€ข Web application interface
โ€ข Depends on palmr-api service
โ€ข Configured for production environment | +| minio (Storage) | [minio/minio:RELEASE.2025-03-12T18-04-18Z](https://hub.docker.com/layers/minio/minio/RELEASE.2025-03-12T18-04-18Z/images/sha256-85f3e4cd1ca92a2711553ab79f222bcd8b75aa2c77a1a0b0ccf80d38e8ab2fe5) | **6421**(API)
**6422**(Console) | โ€ข File storage service
โ€ข Persistent volume for data | +| minio-init (Config) | [minio/mc:RELEASE.2025-03-12T17-29-24Z](https://hub.docker.com/layers/minio/mc/RELEASE.2025-03-12T17-29-24Z/images/sha256-68d8c80f43908b02daa285e55547131870a1d36b3ffe272c26d7d8f4d52d1e5c) | N/A | โ€ข Initially configures the "files" bucket
โ€ข Runs only once during initialization | +| postgres (Database) | [bitnami/postgresql:17.2.0](https://hub.docker.com/layers/bitnami/postgresql/17.2.0/images/sha256-29c614afad4f514b12b5c0f4d006f38c98fa4b18c3582732ff93b3fe9a79d875) | **5432** | โ€ข PostgreSQL database
โ€ข Persistent volume for data | + +--- + +### ๐Ÿ› ๏ธ Available Environment Variables + +The table below shows all environment variables that can be set + +| **Variable** | **Default Value** | **Description** | +| --- | --- | --- | +| API_INTERNAL_PORT | 3333 | Internal API port in container | +| API_EXTERNAL_PORT | 3333 | Exposed port on host for API | +| POSTGRES_PASSWORD | postgresRootPassword | PostgreSQL database password | +| APP_EXTERNAL_PORT | 5487 | Exposed port on host for frontend | +| APP_URL | http://localhost:5487 | Complete frontend URL | +| SERVER_IP | localhost | IP of the server where the application is running | +| MINIO_ROOT_USER | minio_root_user | MinIO admin user | +| MINIO_ROOT_PASSWORD | minioRootPassword | MinIO admin password | +| MINIO_INTERNAL_API_PORT | 6421 | Internal MinIO API port | +| MINIO_INTERNAL_CONSOLE_PORT | 6422 | Internal MinIO console port | +| MINIO_EXTERNAL_API_PORT | 6421 | Exposed port on host for MinIO API | +| MINIO_EXTERNAL_CONSOLE_PORT | 6422 | Exposed port on host for MinIO console | +| POSTGRESQL_USERNAME | postgres | PostgreSQL user | +| POSTGRESQL_DATABASE | palmr_db | Database name | + +> *All these variables can be configured through a .env file in the project root or defined directly in the environment where docker-compose will be executed. The best way to do this is up to you. But be careful to replace correctly if doing directly in the compose instead of providing an environment var.* +> + + +#### ๐Ÿ—‚๏ธ Persistent Volumes + +- minio_data: Stores MinIO files +- postgres_data: Stores PostgreSQL data + +--- + +### ๐Ÿ’ป Local Execution + +In a localhost environment, there's no mystery. If you don't want to change any service exposure ports, you can simply run: + +This will execute all necessary services and give you access to the following URLs (if you haven't changed any ports): + +- **Frontend:** [http://localhost:5487](http://localhost:5487) +- **Backend:** [http://localhost:3333](http://localhost:3333/) +- **MinIO API:** [http://localhost:6421](http://localhost:6421) +- **MinIO Console:** [http://localhost:6422](http://localhost:6422) +- **Postgres Database:** [http://localhost:5423](http://localhost:5423/) (Connection only) + +> *If you have changed any port, simply access the URL with the port you configured.* +> + +--- + +### ๐ŸŒ Production (VPS or other) + +For production environments, whether it's your VPS, Homelab Server, or other, the execution is very similar to the localhost environment, except for some particularities that may occur in some cases. + +We mainly need to pay attention to the following points: + +- Correctly set the `SERVER_IP` env var with our server's IP, otherwise some redirects and queries will fail during App execution. +- Set the `APP_URL` - regardless of whether the frontend is on the same server and with the same IP, it's extremely important to set this environment variable, otherwise sharing links will be generated incorrectly. +- For all environment variables that are `PASSWORD`, it's highly recommended to generate secure passwords and replace them as env vars. +- Lastly, make sure no docker service will conflict with any existing ones in your environment. If there is a conflict, simply change the execution ports via environment var or in the docker compose. + +Basically, by paying attention to these points, you can quickly execute the project with the same command we used for localhost: + +```bash +docker compose up -d +``` + +At this stage, if you encounter any errors, it's worth reviewing your `docker-compose.yaml` and trying again, paying close attention to the points mentioned above. + +> *First test without using reverse proxies like Caddy, Traefik, etc... if you plan to use them. Access the services via `server_ip:port` after confirming they work, then make the necessary routing configurations as desired.* +> + +If you haven't changed the execution ports, you'll have access on your server at: + +- **Frontend:** `[server_ip]:5487` +- **Backend:** `[server_ip]:3333` +- **MinIO API:** `[server_ip]:6421` +- **MinIO Console:** `[server_ip]:6422` +- **Postgres Database:** `[server_ip]:5423` (Connection only) + +> *If you've changed any port, simply access the URL with the port you configured.* +> + +It's worth noting that this is just a quick start and we're not going into details about any of the developed services, but it's recommended for execution in any environment. However, if your focus is on using Palmr. with high availability in mind, it's recommended to use a container orchestrator prepared for this, such as Kubernetes or similar, but we don't cover this type of configuration in our documentation. + +--- + +## ๐Ÿ“š Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Docker Compose Documentation](https://docs.docker.com/compose/) +- [MinIO Documentation](https://min.io/docs/minio/container/index.html) +- [PostgreSQL Documentation](https://www.postgresql.org/docs/) diff --git a/apps/docs/content/docs/2.0.0-beta/manage-users.mdx b/apps/docs/content/docs/2.0.0-beta/manage-users.mdx new file mode 100644 index 0000000..9f8496b --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/manage-users.mdx @@ -0,0 +1,81 @@ +--- +title: ๐Ÿ‘ฅ Users Management +--- + +Managing users in **Palmr.** is a straightforward and intuitive process that ensures proper access control and organization within your system. This comprehensive step-by-step guide will walk you through the essential processes of creating, modifying, and managing user accounts within the application. + +## ๐Ÿ” Accessing User Management + +To initiate the user management process, you'll need to navigate to the dedicated **User Management** section. This centralized hub provides all the tools necessary for effective user administration: + +1. Locate and click on the **user icon** prominently displayed in the application's header area, where all primary navigation controls are situated. +2. Upon clicking, a comprehensive dropdown menu will appear, presenting various options. From these choices, locate and select **"User Management"** to proceed + +![Menu](/assets/v1/ui/menu.png) + +--- + +### ๐Ÿ“Š User Management Dashboard + +Upon selecting **User Management**, the system will automatically direct you to the comprehensive **User Management Dashboard**, your central control panel for all user-related operations. + +- During your initial access to the system, you'll notice that the user list contains only the **default Admin** user account, which serves as the primary administrative account. +- Should you find it necessary to modify the Admin user's information or credentials, please note that these changes must be implemented through the dedicated **Profile Management** section, which provides specialized tools for administrator profile maintenance. +- For security purposes and to maintain system integrity, it's important to understand that the currently logged-in Admin user's details cannot be altered directly from within the **User Management Dashboard**. + +![Users Management Page](/assets/v1/main/users/users-management.png) + +--- + +### ๐Ÿ‘ค Adding a New User + +1. To initiate the process of adding a new user to the system, locate and click the **"Add User"** button, which is conveniently positioned in the top right corner of your screen for easy access. + +![Add Users Button](/assets/v1/main/users/add-users-btn.png) + +1. Upon clicking, an interactive modal form will be displayed, presenting you with all the necessary fields to input the new user's comprehensive details and access permissions: + +![Add Users Modal](/assets/v1/main/users/add-user-modal.png) + +1. After carefully entering all the required user information and reviewing for accuracy, click the **"Create"** button to finalize the process. โœจ If you need to start over or decide not to proceed, simply click the **"Cancel"** button to terminate the user creation process without saving any changes. +2. Following successful user creation, the new account will be immediately visible in the user list, confirming the completion of the process. ๐ŸŽ‰ + +![New Users Table](/assets/v1/main/users/new-user-table.png) + +--- + +### โš™๏ธ Managing User Actions + +Within the **User List** interface, you'll find a comprehensive **"Actions"** column containing a dropdown menu for each user account, providing access to all available management functions. + +![Add User Actions Dropdown](/assets/v1/main/users/add-user-actions-dropdown.png) + +The following administrative actions are available for your convenience: + +- ๐Ÿ“ **Edit User** โ€“ Provides access to a detailed modal form for comprehensive user information updates: +- Modify various user details including their assigned role and permissions within the system. +- Implement security measures such as password changes and access control modifications. + +![Edit User Modal](/assets/v1/main/users/edit-user-modal.png) + +- ๐Ÿ”’ **Deactivate User** โ€“ Temporarily suspends user access by marking the account as inactive, effectively preventing any system login attempts while maintaining their account information. +- ๐Ÿ”“ **Activate User** โ€“ Restores full system access for previously deactivated users, enabling them to resume normal account activities and authentication. +- โŒ **Delete User** โ€“ Executes a permanent removal of the user account from the system, including all associated data and permissions. + +--- + +## โš ๏ธ Troubleshooting + +In the event of any challenges or issues during the user management process, please refer to the following troubleshooting guidelines: + +### ๐Ÿšซ User Creation Fails + +- Carefully verify that all required fields (including name, email address, and role assignments) have been completed with accurate information. +- Perform a thorough check to ensure the email address isn't already associated with an existing account in the system. +- Confirm that your system maintains a stable and active connection to the backend services necessary for user management. + +### ๐Ÿ”‘ User Cannot Log In + +- First, verify that the user's account status is set to **Active** in the system. +- Double-check that the user is attempting to authenticate with their correct email address and current password combination. +- If authentication issues persist, initiate a password reset procedure to establish new credentials. diff --git a/apps/docs/content/docs/2.0.0-beta/manual-installation.mdx b/apps/docs/content/docs/2.0.0-beta/manual-installation.mdx new file mode 100644 index 0000000..f8d81d8 --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/manual-installation.mdx @@ -0,0 +1,212 @@ +--- +title: ๐Ÿ“ฆ Manual Installation +--- + +Manual installation requires more detailed attention and hands-on configuration compared to the streamlined process offered by Docker Compose. While this approach demands additional effort and technical understanding, following our comprehensive step-by-step guide will ensure a clean and successful project execution with full control over each component. + +An important consideration in this manual setup process is that while we'll be handling the frontend and backend deployments directly, we still require Docker or an equivalent third-party service to manage our Postgres database and MinIO object storage infrastructure. For the purposes of this tutorial, we've chosen to utilize Docker with Docker Compose to establish and configure both MinIO and Postgres, as this provides a reliable and well-tested environment. + +To facilitate this setup, we've included a pre-configured Docker Compose file within the `apps/server` directory that handles the initialization and configuration of both MinIO and Postgres - two essential components for the application's core functionality. While this is our recommended approach, you maintain the flexibility to implement alternative solutions that better suit your specific needs or infrastructure requirements. Our decision to leverage Docker Compose for these particular services stems from its ability to significantly streamline the configuration process, especially when dealing with complex third-party services like Postgres and MinIO. + +Should you be interested in exploring alternative deployment methods for hosting MinIO and Postgres without utilizing Docker and Docker Compose, comprehensive information is available through their respective official channels and documentation: + +- MinIO GitHub: [Visit MinIO GitHub](https://github.com/minio/minio) +- Postgres Github: [Visit Postgres GitHub](https://github.com/postgres/postgres) +- MinIO documentation: [View MinIO docs](https://min.io/docs/minio/linux/index.html) +- Postgres documentation: [View Postgres docs](https://www.postgresql.org/docs/) + +With these foundational concepts established, we can now proceed with our detailed, step-by-step installation guide. + +--- + +## โœ… Prerequisites + +Before proceeding with the installation, it's essential to ensure that your development environment is properly configured with all the necessary tools and dependencies. Please verify that you have the following software components installed and properly configured on your system: + +- Docker *(Required only if you plan to use Docker + Docker Compose)* +- Docker Compose *(Required only if you plan to use Docker + Docker Compose)* +- Node.js *(Essential for running JavaScript/TypeScript applications)* +- pnpm *(Our preferred package manager)* +- Git *(For version control and repository management)* + +โš ๏ธ A critical note regarding package management: This repository has been specifically developed and thoroughly tested using the pnpm package manager. While technically possible to use alternative package managers such as `npm`, `yarn`, or `bun`, we strongly advise against this approach. + + +--- + +## Running the Application + +### ๐Ÿ“ฅ Clone the Repository + +To begin the installation process, you'll need to obtain a local copy of the codebase. Start by cloning the official repository using the following Git command: + +```bash +git clone https://github.com/kyantech/Palmr.git +``` + +Upon successful cloning, you'll find yourself with a new directory containing the project structure. Within this directory, there's a crucial folder named 'apps' that houses three essential components: docs, server, and web. For the purposes of this installation guide, we'll focus primarily on the server and web directories, which contain our robust backend infrastructure (built with Fastify) and our responsive frontend application (developed using React + Vite), respectively. + +--- + +### โš™๏ธ Set Up Backend Services + +The next phase involves setting up our backend services. First, navigate to the backend directory where you'll find the Docker Compose configuration file for our essential services - MinIO and Postgres: + +```bash +cd ./apps/server +``` + +Once you're in the correct directory, initiate the services by executing the following command: + +```bash +docker compose up -d +``` + +This command initializes both Postgres and MinIO services in detached mode, allowing them to run seamlessly in the background. While the configuration file at `apps/server/docker-compose.yaml` can be customized to suit specific needs, we strongly recommend maintaining the default configuration for your initial setup. This approach ensures a smooth installation process, and you can always refine the settings once you have a working implementation. + +Now that our essential services are operational through Docker Compose, we can proceed with the core backend setup. During this phase, we'll be preparing the application for production deployment rather than development mode. This process requires careful attention to both the backend and frontend components. + +Since our current working directory is already set to the server folder, let's begin with the backend configuration. + +#### ๐Ÿ”‘ Set Up Environment Variables + +A crucial preliminary step is configuring the environment variables that Palmr requires for proper operation. We've provided a template file named `.env.example` in the repository to streamline this process. + +Execute this straightforward command to create your environment configuration: + +```bash +cp .env.example .env +``` + +This operation creates a new `.env` file in the root directory, populated with all the necessary environmental configurations. + +#### ๐Ÿ“ฆ Install Dependencies + +The next crucial step involves initializing our database connection through Prisma, our chosen Object-Relational Mapping (ORM) tool. However, before we can utilize Prisma effectively, we need to ensure all backend dependencies are properly installed. With your Node.js environment and pnpm package manager ready, execute: + +```bash +pnpm install +``` + +#### โšก Generate Prisma Client + +After successfully installing all dependencies, proceed with generating the Prisma client by running: + +```bash +pnpm dlx prisma generate +``` + +This essential command generates the Prisma client specifically tailored for our project, establishing the necessary interface for seamless database interactions and operations. + +#### ๐Ÿ”„ Deploy Prisma Migrations + +With the client generation complete, deploy the database schema using: + +```bash +pnpm dlx prisma migrate deploy +``` + +This command ensures all your database migrations are properly implemented, establishing the required database structure. + +#### ๐ŸŒฑ Seed the Database + +Following the successful migration deployment, we'll populate the database with initial data using our seeding script. Execute: + +```bash +pnpm db:seed +``` + +This process will populate your database with the necessary initial data, preparing it for application use. + +#### ๐Ÿ—๏ธ Build and Run the Backend + +With all preparatory steps completed, we can now build the backend application: + +```bash +pnpm run build +``` + +Once the build process successfully concludes, start the backend service: + +```bash +pnpm start +``` + +To verify that your backend is functioning correctly, you can access the comprehensive API documentation at: + +```bash +http://localhost:3333/docs +``` + +This documentation interface provides detailed information about all available API endpoints and their usage. + +--- + +### ๐ŸŽจ Set Up Frontend + +The frontend configuration process follows a similar pattern to the backend setup, though it's somewhat simplified as it doesn't require Docker container management - we'll only need to configure and run the service itself. + +#### ๐Ÿ“‚ Navigate to the Frontend Directory + +If your current location is the server directory, use: + +```bash +cd ../web +``` + +Alternatively, if you're starting from the repository root, navigate with: + +```bash +cd apps/web +``` + +#### โš™๏ธ Set Up Environment Variables + +After reaching the web directory, begin by creating your frontend environment configuration: + +```bash +cp .env.example .env +``` + +This step mirrors our backend environment setup, ensuring all necessary variables are properly configured. + +#### ๐Ÿ“ฆ Install Dependencies + +Proceed with installing all required frontend dependencies: + +```bash +pnpm install +``` + +#### ๐Ÿ’ป Build and Run the Frontend + +The final stage of our frontend setup is straightforward. First, create a production build: + +```bash +pnpm run build +``` + +After the build completes successfully, launch the frontend service: + +```bash +pnpm serve +``` + +Once the service initialization is complete, you can access the full application through your web browser at: + +```bash +http://localhost:3000 +``` + +--- + +## ๐ŸŽ‰ Conclusion + +Congratulations! You've successfully completed the comprehensive setup process for deploying a production-ready instance of Palmr. This detailed guide has walked you through each crucial step, from initial repository cloning to final application deployment. + +## ๐Ÿ”— Useful Links + +- [Docker Documentation](https://docs.docker.com/) +- [Node.js Documentation](https://nodejs.org/en/docs/) +- [pnpm Documentation](https://pnpm.io/) +- [Prisma Documentation](https://www.prisma.io/docs/) \ No newline at end of file diff --git a/apps/docs/content/docs/2.0.0-beta/meta.json b/apps/docs/content/docs/2.0.0-beta/meta.json new file mode 100644 index 0000000..2841360 --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/meta.json @@ -0,0 +1,29 @@ +{ + "title": "v2.0.0-beta", + "description": "v2.0.0-beta Documentation", + "root": true, + "icon": "Building2", + "pages": [ + "---Introduction---", + "index", + "architecture", + "github-architecture", + "installation", + "manual-installation", + "api", + "---How to use Palmr.---", + "first-login", + "manage-users", + "uploading-files", + "generate-share", + "configuring-smtp", + "available-languages", + "---Developers---", + "contribute", + "open-an-issue", + "---Sponsor this project---", + "gh-star", + "gh-sponsor", + "..." + ] +} diff --git a/apps/docs/content/docs/2.0.0-beta/open-an-issue.mdx b/apps/docs/content/docs/2.0.0-beta/open-an-issue.mdx new file mode 100644 index 0000000..3ca184b --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/open-an-issue.mdx @@ -0,0 +1,137 @@ +--- +title: ๐ŸŽซ How to open an issue +--- + +## ๐Ÿ‘‹ Introduction + +Opening an issue on GitHub is a great way to report bugs, request features, or ask questions about a project. This tutorial will guide you through the process of opening an issue for the **Palmr.** project on GitHub. + +Issues are an essential communication tool in open source development that help track bugs, feature requests, and general questions. They create a transparent record of project discussions and improvements. Whether you've found a bug that needs fixing, have an idea for a new feature, or just need clarification about how something works, creating an issue is the first step to getting your voice heard. + +--- + +### ๐Ÿ”‘ GitHub Login + +Before you can open an issue, you need to be logged into your GitHub account. If you don't have an account yet, you can sign up for free at [GitHub](https://github.com/). Having a GitHub account allows you to: + +- Create and manage issues +- Comment on existing issues +- Receive notifications about updates +- Collaborate with other developers + +Once you have an account, make sure you're logged in before proceeding to the next steps. + +--- + +### ๐Ÿ” Access the Repository + +There are several ways to access the Palmr repository: + +1. **Direct Link**: + Go to the Palmr repository by clicking this link: [https://github.com/kyantech/Palmr](https://github.com/kyantech/Palmr) + +2. **GitHub Search**: + - Click the search bar at the top of GitHub + - Type "Palmr" or "kyantech/Palmr" + - Look for the repository owned by **Kyantech** + - Click on the repository name to access it + +3. **Through Organization**: + - Visit [Kyantech's GitHub profile](https://github.com/kyantech) + - Navigate to the "Repositories" tab + - Find and click on "Palmr" in the repository list + +--- + +### ๐Ÿ“‹ Open the Issues Tab + +To access the issues section: + +1. Look at the navigation bar near the top of the repository page +2. Find the **Issues** tab - it's usually between "Code" and "Pull requests" +3. Click on the **Issues** tab to open the issues section +4. You'll see a list of all existing issues, both open and closed + +The issues tab shows important information like: +- Number of open issues +- Issue labels and categories +- Issue status (open/closed) +- Recent activity +- Assigned contributors + +![Palmr Profile Menu](/assets/v1/developers/issues-tab.png) + +--- + +### โž• Create New Issue + +To start creating a new issue: + +1. Look for the green **New Issue** button on the right side of the issues page +2. Click the button to open the issue creation form +3. If there are multiple issue templates available, choose the most appropriate one for your needs +4. Take time to read through the template requirements carefully +5. Make sure you have all necessary information ready before starting + +Pro Tips: +- Before creating a new issue, search existing issues to avoid duplicates +- Review any contribution guidelines or issue templates +- Consider adding relevant labels when creating your issue +- Include system information if reporting a bug +- Reference related issues or pull requests if applicable +- Use markdown formatting to make your issue more readable + +![Palmr Profile Menu](/assets/v1/developers/new-issue-btn.png) + +--- + +### ๐Ÿ“ Fill Out the Form + +Youโ€™ll now see a form where you can provide details about your issue. Hereโ€™s how to fill it out: + +1. **Title**: Write a clear and concise title that summarizes the issue. +2. **Description**: Provide a detailed description of the issue. Include steps to reproduce the problem (if itโ€™s a bug), expected behavior, and actual behavior. If youโ€™re requesting a feature, explain why it would be useful. +3. **Labels (Optional)**: Add labels to categorize your issue (e.g., `bug`, `enhancement`, `question`). This helps the maintainers organize and prioritize issues. +4. **Attachments (Optional)**: You can attach screenshots, logs, or other files to help explain the issue. + +![Palmr Profile Menu](/assets/v1/developers/new-issue-form.png) + +--- + +### โœ… Submit the Issue + +Once you've filled out the form, click the **Create** button at the bottom of the page. Your issue will now be visible to the project maintainers and other contributors. You can track the status of your issue and receive notifications when there are updates or responses. Feel free to participate in any follow-up discussions in the comments section of your issue. + +--- + +### ๐Ÿ’ก Tips for Issues + +To ensure your issue is addressed quickly and effectively, follow these tips: +- **Be Clear and Specific**: Provide as much detail as possible. +- **Use a Descriptive Title**: A good title helps maintainers understand the issue at a glance. +- **Include Steps to Reproduce**: If itโ€™s a bug, explain how to reproduce it. +- **Be Polite and Respectful**: Remember that maintainers and contributors are volunteering their time. + +--- + +### โญ Why Issues Matter + +Opening issues is a key part of contributing to open-source projects. Hereโ€™s why it matters: +1. **Improves the Project**: Your feedback helps identify bugs and suggest new features. +2. **Helps Maintainers**: Clear and detailed issues make it easier for maintainers to address problems. +3. **Encourages Collaboration**: Issues can spark discussions and attract contributors to help solve problems. + +--- + +### ๐ŸŽ‰ Final Words + +Congratulations on creating your first issue for the **Palmr** project! Your contribution is valuable and helps make the project better for everyone. Remember: + +- Stay engaged with your issue's progress +- Help others when you can +- Share your knowledge and experiences +- Consider contributing code if possible +- Star the repository to show support +- Spread the word about Palmr + +Thank you for being part of our open-source community. Your participation helps make Palmr better for everyone! diff --git a/apps/docs/content/docs/2.0.0-beta/uploading-files.mdx b/apps/docs/content/docs/2.0.0-beta/uploading-files.mdx new file mode 100644 index 0000000..d6c89fa --- /dev/null +++ b/apps/docs/content/docs/2.0.0-beta/uploading-files.mdx @@ -0,0 +1,91 @@ +--- +title: ๐Ÿ“ค Uploading Files +--- + +To upload a file in Palmr, the process has been designed to be straightforward and user-friendly. The platform offers two convenient locations where users can upload their files, ensuring flexibility and ease of access. Each location has been optimized to provide a seamless upload experience. + +Before we delve into the specifics of file uploading, it's essential to understand that file sharing stands at the heart of Palmr's functionality. This core feature enables users to collaborate and distribute content efficiently. To initiate this collaborative process, you'll need to first upload one or more files to your account. Once your files are uploaded, you can proceed to create a sharing session, which serves as a container that can encompass either a single file or multiple files, depending on your specific needs. + +Now let's explore the file upload process in detail. As previously mentioned, the procedure has been streamlined for maximum efficiency, and you can initiate file uploads from two distinct locations: **the Home Page** or **the My Files Page**. We will thoroughly examine both options in the following sections, though it's worth noting that the underlying upload mechanism remains consistent regardless of which location you choose. + +--- + +## ๐Ÿ  Home Page + +On the home page, you'll find a dedicated "Recent Uploads" section. When you're using Palmr for the first time and haven't uploaded any files yet, this section will appear in its initial state: + +![Recent Uploads Section](/assets/v1/main/upload/recent-uploads.png) + +To begin the upload process, locate and click the "Upload File" button. This action will trigger a modal window where you can browse and select the desired file from your device. For enhanced user experience, certain file formats including images, audio files, and video content will automatically generate a preview within the modal. + +![Upload File Button](/assets/v1/main/upload/upload-file-button.png) + + +**Example with an image:** + +![Preview Example](/assets/v1/main/upload/preview-example.png) + +Upon selecting your file, you'll be presented with two options: confirm the upload by clicking the "Upload" button, or if you need to make changes, you can abort the process by selecting the "Cancel" button. + +![Upload and Cancel Buttons](/assets/v1/main/upload/upload-cancel-buttons.png) + +After successfully uploading one or more files, the "Recent Uploads" section will automatically refresh to display your newly added content: + +![Recent Uploads with Files](/assets/v1/main/upload/recent-uploads-filled.png) + +Should you wish to upload additional files from this view, simply click the "Upload File" button positioned in the upper right corner of the section, then follow the same straightforward procedure outlined above. + +![New Upload Button](/assets/v1/main/upload/new-upload-button.png) + +It's important to note that the home page list displays only your last 5 uploads for quick access. For a comprehensive view of your uploaded files or to upload additional content, you'll need to navigate to the "My Files" page. This can be accomplished in two ways: either click the "View All" button located in the upper right corner of the section, or select the "My Files" card directly from the home page. + +![View All Button](/assets/v1/main/upload/view-all-button.png) + +Or: + +![My Files Card](/assets/v1/main/files/my-files-card.png) + +--- + +## ๐Ÿ“‚ My Files Page + +Upon accessing the **"My Files"** page, you'll be presented with this comprehensive layout: + +This interface provides enhanced functionality, allowing you to **filter** through your uploaded files for better organization. You can also continue uploading new files by clicking the **"Upload File"** button and following the previously described upload procedure. + +For clarity, it's worth mentioning that the tables found in both the **"Recent Files"** section and the **"My Files"** page share the same structure and organization โ€” the primary distinction lies in the quantity of files displayed. While the **"Recent Files"** section provides quick access to your five most recent uploads, the **"My Files"** table presents a comprehensive view of your entire upload history. + +The table provides detailed information through the following fields: + +- **Name** +- **Description** +- **Size** +- **Created At** +- **Updated At** +- **Actions** + +--- + +### โš™๏ธ Actions Column + +Within the **"Actions"** column, you'll discover an interactive icon that reveals the following dropdown menu: + +![Actions Dropdown](/assets/v1/main/files/actions-dropdown.png) + +While most options are self-explanatory, let's examine the Edit functionality in detail: + +- Edit โ€“ Opens a modal where you can modify various file attributes including the file name, description, and other relevant details. + + ![Edit Modal](/assets/v1/main/files/edit-modal.png) + +- The platform also provides the ability to **delete** files directly through the dropdown menu by selecting the **Delete** option. + +For enhanced user experience, the preview functionality is available for common media formats including images, audio files, PDFs, and videos. For all other file types, you can easily access the content through the **Download** option in the dropdown menu. + +--- + +## ๐Ÿ“ Notes and Recommendations + +- To ensure optimal performance and user experience, we strongly recommend uploading files that have been properly optimized. +- For troubleshooting purposes, all upload errors and related issues are systematically logged and can be accessed through the administrative panel. +- System administrators have full control over file access permissions and can manage them as needed. diff --git a/apps/docs/content/docs/meta.json b/apps/docs/content/docs/meta.json new file mode 100644 index 0000000..ed656a4 --- /dev/null +++ b/apps/docs/content/docs/meta.json @@ -0,0 +1,3 @@ +{ + "pages": ["2.0.0-beta", "1.1.7-beta"] +} \ No newline at end of file diff --git a/apps/docs/next.config.mjs b/apps/docs/next.config.mjs new file mode 100644 index 0000000..f8b746a --- /dev/null +++ b/apps/docs/next.config.mjs @@ -0,0 +1,23 @@ +import { createMDX } from 'fumadocs-mdx/next'; + +const withMDX = createMDX(); + +/** @type {import('next').NextConfig} */ +const config = { + reactStrictMode: true, + images: { + qualities: [100], + remotePatterns: [ + { + protocol: 'https', + hostname: '**' + }, + { + protocol: 'http', + hostname: '**' + } + ] + } +}; + +export default withMDX(config); diff --git a/apps/docs/package.json b/apps/docs/package.json index ed8e86b..8e13db2 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -1,17 +1,37 @@ { - "name": "palmr-docs", - "type": "module", - "version": "1.1.6", + "name": "docs-v2", + "version": "0.0.0", + "private": true, "scripts": { - "dev": "astro dev", - "start": "astro preview", - "build": "astro build && cp -r public dist/", - "preview": "astro preview", - "astro": "astro" + "build": "next build", + "dev": "next dev --turbo", + "start": "next start", + "postinstall": "fumadocs-mdx" }, "dependencies": { - "@astrojs/starlight": "^0.32.2", - "astro": "^5.1.5", - "sharp": "^0.32.5" + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "fumadocs-core": "15.2.7", + "fumadocs-mdx": "11.6.0", + "fumadocs-ui": "15.2.7", + "lucide-react": "^0.488.0", + "motion": "^12.9.1", + "next": "15.3.0", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "tailwind-merge": "^3.2.0" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4.1.3", + "@types/mdx": "^2.0.13", + "@types/node": "22.14.0", + "@types/react": "^19.1.0", + "@types/react-dom": "^19.1.2", + "eslint": "^8", + "eslint-config-next": "15.3.0", + "postcss": "^8.5.3", + "tailwindcss": "^4.1.3", + "tw-animate-css": "^1.2.8", + "typescript": "^5.8.3" } } \ No newline at end of file diff --git a/apps/docs/pnpm-lock.yaml b/apps/docs/pnpm-lock.yaml index 91d96ca..8817796 100644 --- a/apps/docs/pnpm-lock.yaml +++ b/apps/docs/pnpm-lock.yaml @@ -8,511 +8,957 @@ importers: .: dependencies: - '@astrojs/starlight': - specifier: ^0.32.2 - version: 0.32.2(astro@5.5.2(rollup@4.35.0)(typescript@5.8.2)) - astro: - specifier: ^5.1.5 - version: 5.5.2(rollup@4.35.0)(typescript@5.8.2) - sharp: - specifier: ^0.32.5 - version: 0.32.6 + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + fumadocs-core: + specifier: 15.2.7 + version: 15.2.7(@types/react@19.1.2)(next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + fumadocs-mdx: + specifier: 11.6.0 + version: 11.6.0(acorn@8.14.1)(fumadocs-core@15.2.7(@types/react@19.1.2)(next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) + fumadocs-ui: + specifier: 15.2.7 + version: 15.2.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.4) + lucide-react: + specifier: ^0.488.0 + version: 0.488.0(react@19.1.0) + motion: + specifier: ^12.9.1 + version: 12.9.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: + specifier: 15.3.0 + version: 15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: + specifier: ^19.1.0 + version: 19.1.0 + react-dom: + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) + tailwind-merge: + specifier: ^3.2.0 + version: 3.2.0 + devDependencies: + '@tailwindcss/postcss': + specifier: ^4.1.3 + version: 4.1.4 + '@types/mdx': + specifier: ^2.0.13 + version: 2.0.13 + '@types/node': + specifier: 22.14.0 + version: 22.14.0 + '@types/react': + specifier: ^19.1.0 + version: 19.1.2 + '@types/react-dom': + specifier: ^19.1.2 + version: 19.1.2(@types/react@19.1.2) + eslint: + specifier: ^8 + version: 8.57.1 + eslint-config-next: + specifier: 15.3.0 + version: 15.3.0(eslint@8.57.1)(typescript@5.8.3) + postcss: + specifier: ^8.5.3 + version: 8.5.3 + tailwindcss: + specifier: ^4.1.3 + version: 4.1.4 + tw-animate-css: + specifier: ^1.2.8 + version: 1.2.8 + typescript: + specifier: ^5.8.3 + version: 5.8.3 packages: - '@astrojs/compiler@2.11.0': - resolution: {integrity: sha512-zZOO7i+JhojO8qmlyR/URui6LyfHJY6m+L9nwyX5GiKD78YoRaZ5tzz6X0fkl+5bD3uwlDHayf6Oe8Fu36RKNg==} + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} - '@astrojs/internal-helpers@0.6.1': - resolution: {integrity: sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==} + '@emnapi/core@1.4.3': + resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} - '@astrojs/markdown-remark@6.3.0': - resolution: {integrity: sha512-imInEojAbpeV9D/SRaSQBz3yUzvtg3UQC1euX70QHVf8X0kWAIAArmzBbgXl8LlyxSFe52f/++PXQ4t14V9b+A==} + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} - '@astrojs/mdx@4.2.0': - resolution: {integrity: sha512-MHiogYeb7XdzbqUktoMsrziph1vK10WfLgwDJVejGOieEsJ1eOUtNtQCl2vv85tnr/+IGBqZ0bOf6ydQGgJMYA==} - engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} - peerDependencies: - astro: ^5.0.0 + '@emnapi/wasi-threads@1.0.2': + resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} - '@astrojs/prism@3.2.0': - resolution: {integrity: sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw==} - engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} - - '@astrojs/sitemap@3.2.1': - resolution: {integrity: sha512-uxMfO8f7pALq0ADL6Lk68UV6dNYjJ2xGUzyjjVj60JLBs5a6smtlkBYv3tQ0DzoqwS7c9n4FUx5lgv0yPo/fgA==} - - '@astrojs/starlight@0.32.2': - resolution: {integrity: sha512-FLz8Y8R+GsD0jD/G64bYijwwVsAq99Ugk2bJYRmH2k1reYMh83GRma2IaKGgSI2fLNEu7tdyG4cpkwrwP3W02A==} - peerDependencies: - astro: ^5.1.5 - - '@astrojs/telemetry@3.2.0': - resolution: {integrity: sha512-wxhSKRfKugLwLlr4OFfcqovk+LIFtKwLyGPqMsv+9/ibqqnW3Gv7tBhtKEb0gAyUAC4G9BTVQeQahqnQAhd6IQ==} - engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} - - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.26.10': - resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/runtime@7.26.10': - resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.26.10': - resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} - engines: {node: '>=6.9.0'} - - '@ctrl/tinycolor@4.1.0': - resolution: {integrity: sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ==} - engines: {node: '>=14'} - - '@emnapi/runtime@1.3.1': - resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} - - '@esbuild/aix-ppc64@0.25.1': - resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} + '@esbuild/aix-ppc64@0.25.2': + resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.1': - resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} + '@esbuild/android-arm64@0.25.2': + resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.1': - resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} + '@esbuild/android-arm@0.25.2': + resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.1': - resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} + '@esbuild/android-x64@0.25.2': + resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.1': - resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} + '@esbuild/darwin-arm64@0.25.2': + resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.1': - resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} + '@esbuild/darwin-x64@0.25.2': + resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.1': - resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} + '@esbuild/freebsd-arm64@0.25.2': + resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.1': - resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} + '@esbuild/freebsd-x64@0.25.2': + resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.1': - resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} + '@esbuild/linux-arm64@0.25.2': + resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.1': - resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} + '@esbuild/linux-arm@0.25.2': + resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.1': - resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} + '@esbuild/linux-ia32@0.25.2': + resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.1': - resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} + '@esbuild/linux-loong64@0.25.2': + resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.1': - resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} + '@esbuild/linux-mips64el@0.25.2': + resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.1': - resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} + '@esbuild/linux-ppc64@0.25.2': + resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.1': - resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} + '@esbuild/linux-riscv64@0.25.2': + resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.1': - resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} + '@esbuild/linux-s390x@0.25.2': + resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.1': - resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} + '@esbuild/linux-x64@0.25.2': + resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.1': - resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} + '@esbuild/netbsd-arm64@0.25.2': + resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.1': - resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} + '@esbuild/netbsd-x64@0.25.2': + resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.1': - resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} + '@esbuild/openbsd-arm64@0.25.2': + resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.1': - resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} + '@esbuild/openbsd-x64@0.25.2': + resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.25.1': - resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} + '@esbuild/sunos-x64@0.25.2': + resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.1': - resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} + '@esbuild/win32-arm64@0.25.2': + resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.1': - resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} + '@esbuild/win32-ia32@0.25.2': + resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.1': - resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} + '@esbuild/win32-x64@0.25.2': + resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@expressive-code/core@0.40.2': - resolution: {integrity: sha512-gXY3v7jbgz6nWKvRpoDxK4AHUPkZRuJsM79vHX/5uhV9/qX6Qnctp/U/dMHog/LCVXcuOps+5nRmf1uxQVPb3w==} + '@eslint-community/eslint-utils@4.6.1': + resolution: {integrity: sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@expressive-code/plugin-frames@0.40.2': - resolution: {integrity: sha512-aLw5IlDlZWb10Jo/TTDCVsmJhKfZ7FJI83Zo9VDrV0OBlmHAg7klZqw68VDz7FlftIBVAmMby53/MNXPnMjTSQ==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@expressive-code/plugin-shiki@0.40.2': - resolution: {integrity: sha512-t2HMR5BO6GdDW1c1ISBTk66xO503e/Z8ecZdNcr6E4NpUfvY+MRje+LtrcvbBqMwWBBO8RpVKcam/Uy+1GxwKQ==} + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@expressive-code/plugin-text-markers@0.40.2': - resolution: {integrity: sha512-/XoLjD67K9nfM4TgDlXAExzMJp6ewFKxNpfUw4F7q5Ecy+IU3/9zQQG/O70Zy+RxYTwKGw2MA9kd7yelsxnSmw==} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + + '@floating-ui/react-dom@2.1.2': + resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + + '@formatjs/intl-localematcher@0.6.1': + resolution: {integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@img/sharp-darwin-arm64@0.34.1': + resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + '@img/sharp-darwin-x64@0.34.1': + resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + '@img/sharp-libvips-darwin-arm64@1.1.0': + resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + '@img/sharp-libvips-darwin-x64@1.1.0': + resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + '@img/sharp-libvips-linux-arm64@1.1.0': + resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + '@img/sharp-libvips-linux-arm@1.1.0': + resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + '@img/sharp-libvips-linux-ppc64@1.1.0': + resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.1.0': + resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + '@img/sharp-libvips-linux-x64@1.1.0': + resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + '@img/sharp-linux-arm64@0.34.1': + resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + '@img/sharp-linux-arm@0.34.1': + resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + '@img/sharp-linux-s390x@0.34.1': + resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + '@img/sharp-linux-x64@0.34.1': + resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + '@img/sharp-linuxmusl-arm64@0.34.1': + resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + '@img/sharp-linuxmusl-x64@0.34.1': + resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + '@img/sharp-wasm32@0.34.1': + resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + '@img/sharp-win32-ia32@0.34.1': + resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + '@img/sharp-win32-x64@0.34.1': + resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@mdx-js/mdx@3.1.0': resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} - '@oslojs/encoding@1.1.0': - resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} + '@napi-rs/wasm-runtime@0.2.9': + resolution: {integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==} - '@pagefind/darwin-arm64@1.3.0': - resolution: {integrity: sha512-365BEGl6ChOsauRjyVpBjXybflXAOvoMROw3TucAROHIcdBvXk9/2AmEvGFU0r75+vdQI4LJdJdpH4Y6Yqaj4A==} + '@next/env@15.3.0': + resolution: {integrity: sha512-6mDmHX24nWlHOlbwUiAOmMyY7KELimmi+ed8qWcJYjqXeC+G6JzPZ3QosOAfjNwgMIzwhXBiRiCgdh8axTTdTA==} + + '@next/eslint-plugin-next@15.3.0': + resolution: {integrity: sha512-511UUcpWw5GWTyKfzW58U2F/bYJyjLE9e3SlnGK/zSXq7RqLlqFO8B9bitJjumLpj317fycC96KZ2RZsjGNfBw==} + + '@next/swc-darwin-arm64@15.3.0': + resolution: {integrity: sha512-PDQcByT0ZfF2q7QR9d+PNj3wlNN4K6Q8JoHMwFyk252gWo4gKt7BF8Y2+KBgDjTFBETXZ/TkBEUY7NIIY7A/Kw==} + engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@pagefind/darwin-x64@1.3.0': - resolution: {integrity: sha512-zlGHA23uuXmS8z3XxEGmbHpWDxXfPZ47QS06tGUq0HDcZjXjXHeLG+cboOy828QIV5FXsm9MjfkP5e4ZNbOkow==} + '@next/swc-darwin-x64@15.3.0': + resolution: {integrity: sha512-m+eO21yg80En8HJ5c49AOQpFDq+nP51nu88ZOMCorvw3g//8g1JSUsEiPSiFpJo1KCTQ+jm9H0hwXK49H/RmXg==} + engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@pagefind/default-ui@1.3.0': - resolution: {integrity: sha512-CGKT9ccd3+oRK6STXGgfH+m0DbOKayX6QGlq38TfE1ZfUcPc5+ulTuzDbZUnMo+bubsEOIypm4Pl2iEyzZ1cNg==} - - '@pagefind/linux-arm64@1.3.0': - resolution: {integrity: sha512-8lsxNAiBRUk72JvetSBXs4WRpYrQrVJXjlRRnOL6UCdBN9Nlsz0t7hWstRk36+JqHpGWOKYiuHLzGYqYAqoOnQ==} + '@next/swc-linux-arm64-gnu@15.3.0': + resolution: {integrity: sha512-H0Kk04ZNzb6Aq/G6e0un4B3HekPnyy6D+eUBYPJv9Abx8KDYgNMWzKt4Qhj57HXV3sTTjsfc1Trc1SxuhQB+Tg==} + engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@pagefind/linux-x64@1.3.0': - resolution: {integrity: sha512-hAvqdPJv7A20Ucb6FQGE6jhjqy+vZ6pf+s2tFMNtMBG+fzcdc91uTw7aP/1Vo5plD0dAOHwdxfkyw0ugal4kcQ==} + '@next/swc-linux-arm64-musl@15.3.0': + resolution: {integrity: sha512-k8GVkdMrh/+J9uIv/GpnHakzgDQhrprJ/FbGQvwWmstaeFG06nnAoZCJV+wO/bb603iKV1BXt4gHG+s2buJqZA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@15.3.0': + resolution: {integrity: sha512-ZMQ9yzDEts/vkpFLRAqfYO1wSpIJGlQNK9gZ09PgyjBJUmg8F/bb8fw2EXKgEaHbCc4gmqMpDfh+T07qUphp9A==} + engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@pagefind/windows-x64@1.3.0': - resolution: {integrity: sha512-BR1bIRWOMqkf8IoU576YDhij1Wd/Zf2kX/kCI0b2qzCKC8wcc2GQJaaRMCpzvCCrmliO4vtJ6RITp/AnoYUUmQ==} + '@next/swc-linux-x64-musl@15.3.0': + resolution: {integrity: sha512-RFwq5VKYTw9TMr4T3e5HRP6T4RiAzfDJ6XsxH8j/ZeYq2aLsBqCkFzwMI0FmnSsLaUbOb46Uov0VvN3UciHX5A==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@15.3.0': + resolution: {integrity: sha512-a7kUbqa/k09xPjfCl0RSVAvEjAkYBYxUzSVAzk2ptXiNEL+4bDBo9wNC43G/osLA/EOGzG4CuNRFnQyIHfkRgQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@15.3.0': + resolution: {integrity: sha512-vHUQS4YVGJPmpjn7r5lEZuMhK5UQBNBRSB+iGDvJjaNk649pTIcRluDWNb9siunyLLiu/LDPHfvxBtNamyuLTw==} + engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@rollup/pluginutils@5.1.4': - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} - engines: {node: '>=14.0.0'} + '@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'} + + '@orama/orama@3.1.6': + resolution: {integrity: sha512-qtSrqCqRU93SjEBedz987tvWao1YQSELjBhGkHYGVP7Dg0lBWP6d+uZEIt5gxTAYio/YWWlhivmRABvRfPLmnQ==} + engines: {node: '>= 16.0.0'} + + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + + '@radix-ui/primitive@1.1.2': + resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} + + '@radix-ui/react-accordion@1.2.4': + resolution: {integrity: sha512-SGCxlSBaMvEzDROzyZjsVNzu9XY5E28B3k8jOENyrz6csOv/pG1eHyYfLJai1n9tRjwG61coXDhfpgtxKxUv5g==} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - rollup: + '@types/react': + optional: true + '@types/react-dom': optional: true - '@rollup/rollup-android-arm-eabi@4.35.0': - resolution: {integrity: sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==} - cpu: [arm] - os: [android] + '@radix-ui/react-arrow@1.1.3': + resolution: {integrity: sha512-2dvVU4jva0qkNZH6HHWuSz5FN5GeU5tymvCgutF8WaXz9WnD1NgUhy73cqzkjkN4Zkn8lfTPv5JIfrC221W+Nw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-android-arm64@4.35.0': - resolution: {integrity: sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==} - cpu: [arm64] - os: [android] + '@radix-ui/react-collapsible@1.1.4': + resolution: {integrity: sha512-u7LCw1EYInQtBNLGjm9nZ89S/4GcvX1UR5XbekEgnQae2Hkpq39ycJ1OhdeN1/JDfVNG91kWaWoest127TaEKQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-darwin-arm64@4.35.0': - resolution: {integrity: sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==} - cpu: [arm64] - os: [darwin] + '@radix-ui/react-collection@1.1.3': + resolution: {integrity: sha512-mM2pxoQw5HJ49rkzwOs7Y6J4oYH22wS8BfK2/bBxROlI4xuR0c4jEenQP63LlTlDkO6Buj2Vt+QYAYcOgqtrXA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-darwin-x64@4.35.0': - resolution: {integrity: sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==} - cpu: [x64] - os: [darwin] + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@rollup/rollup-freebsd-arm64@4.35.0': - resolution: {integrity: sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==} - cpu: [arm64] - os: [freebsd] + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@rollup/rollup-freebsd-x64@4.35.0': - resolution: {integrity: sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==} - cpu: [x64] - os: [freebsd] + '@radix-ui/react-dialog@1.1.7': + resolution: {integrity: sha512-EIdma8C0C/I6kL6sO02avaCRqi3fmWJpxH6mqbVScorW6nNktzKJT/le7VPho3o/7wCsyRg3z0+Q+Obr0Gy/VQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.35.0': - resolution: {integrity: sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==} - cpu: [arm] - os: [linux] + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@rollup/rollup-linux-arm-musleabihf@4.35.0': - resolution: {integrity: sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==} - cpu: [arm] - os: [linux] + '@radix-ui/react-dismissable-layer@1.1.6': + resolution: {integrity: sha512-7gpgMT2gyKym9Jz2ZhlRXSg2y6cNQIK8d/cqBZ0RBCaps8pFryCWXiUKI+uHGFrhMrbGUP7U6PWgiXzIxoyF3Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-linux-arm64-gnu@4.35.0': - resolution: {integrity: sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==} - cpu: [arm64] - os: [linux] + '@radix-ui/react-focus-guards@1.1.2': + resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@rollup/rollup-linux-arm64-musl@4.35.0': - resolution: {integrity: sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==} - cpu: [arm64] - os: [linux] + '@radix-ui/react-focus-scope@1.1.3': + resolution: {integrity: sha512-4XaDlq0bPt7oJwR+0k0clCiCO/7lO7NKZTAaJBYxDNQT/vj4ig0/UvctrRscZaFREpRvUTkpKR96ov1e6jptQg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.35.0': - resolution: {integrity: sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==} - cpu: [loong64] - os: [linux] + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.35.0': - resolution: {integrity: sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==} - cpu: [ppc64] - os: [linux] + '@radix-ui/react-navigation-menu@1.2.6': + resolution: {integrity: sha512-HJqyzqG74Lj7KV58rk73i/B1nnopVyCfUmKgeGWWrZZiCuMNcY0KKugTrmqMbIeMliUnkBUDKCy9J6Mzl6xeWw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-linux-riscv64-gnu@4.35.0': - resolution: {integrity: sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==} - cpu: [riscv64] - os: [linux] + '@radix-ui/react-popover@1.1.7': + resolution: {integrity: sha512-I38OYWDmJF2kbO74LX8UsFydSHWOJuQ7LxPnTefjxxvdvPLempvAnmsyX9UsBlywcbSGpRH7oMLfkUf+ij4nrw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-linux-s390x-gnu@4.35.0': - resolution: {integrity: sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==} - cpu: [s390x] - os: [linux] + '@radix-ui/react-popper@1.2.3': + resolution: {integrity: sha512-iNb9LYUMkne9zIahukgQmHlSBp9XWGeQQ7FvUGNk45ywzOb6kQa+Ca38OphXlWDiKvyneo9S+KSJsLfLt8812A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-linux-x64-gnu@4.35.0': - resolution: {integrity: sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==} - cpu: [x64] - os: [linux] + '@radix-ui/react-portal@1.1.5': + resolution: {integrity: sha512-ps/67ZqsFm+Mb6lSPJpfhRLrVL2i2fntgCmGMqqth4eaGUf+knAuuRtWVJrNjUhExgmdRqftSgzpf0DF0n6yXA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-linux-x64-musl@4.35.0': - resolution: {integrity: sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==} - cpu: [x64] - os: [linux] + '@radix-ui/react-presence@1.1.3': + resolution: {integrity: sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-win32-arm64-msvc@4.35.0': - resolution: {integrity: sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==} - cpu: [arm64] - os: [win32] + '@radix-ui/react-primitive@2.0.3': + resolution: {integrity: sha512-Pf/t/GkndH7CQ8wE2hbkXA+WyZ83fhQQn5DDmwDiDo6AwN/fhaH8oqZ0jRjMrO2iaMhDi6P1HRx6AZwyMinY1g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-win32-ia32-msvc@4.35.0': - resolution: {integrity: sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==} - cpu: [ia32] - os: [win32] + '@radix-ui/react-roving-focus@1.1.3': + resolution: {integrity: sha512-ufbpLUjZiOg4iYgb2hQrWXEPYX6jOLBbR27bDyAff5GYMRrCzcze8lukjuXVUQvJ6HZe8+oL+hhswDcjmcgVyg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@rollup/rollup-win32-x64-msvc@4.35.0': - resolution: {integrity: sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==} - cpu: [x64] - os: [win32] + '@radix-ui/react-scroll-area@1.2.4': + resolution: {integrity: sha512-G9rdWTQjOR4sk76HwSdROhPU0jZWpfozn9skU1v4N0/g9k7TmswrJn8W8WMU+aYktnLLpk5LX6fofj2bGe5NFQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@shikijs/core@1.29.2': - resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} + '@radix-ui/react-slot@1.2.0': + resolution: {integrity: sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@shikijs/engine-javascript@1.29.2': - resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} + '@radix-ui/react-tabs@1.1.4': + resolution: {integrity: sha512-fuHMHWSf5SRhXke+DbHXj2wVMo+ghVH30vhX3XVacdXqDl+J4XWafMIGOOER861QpBx1jxgwKXL2dQnfrsd8MQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@shikijs/engine-oniguruma@1.29.2': - resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@shikijs/langs@1.29.2': - resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} + '@radix-ui/react-use-controllable-state@1.1.1': + resolution: {integrity: sha512-YnEXIy8/ga01Y1PN0VfaNH//MhA91JlEGVBDxDzROqwrAtG5Yr2QGEPz8A/rJA3C7ZAHryOYGaUv8fLSW2H/mg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@shikijs/themes@1.29.2': - resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - '@shikijs/types@1.29.2': - resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.1.3': + resolution: {integrity: sha512-oXSF3ZQRd5fvomd9hmUCb2EHSZbPp3ZSHAHJJU/DlF9XoFkJBBW8RHU/E8WEH+RbSfJd/QFA0sl8ClJXknBwHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rushstack/eslint-patch@1.11.0': + resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} + + '@shikijs/core@3.2.2': + resolution: {integrity: sha512-yvlSKVMLjddAGBa2Yu+vUZxuu3sClOWW1AG+UtJkvejYuGM5BVL35s6Ijiwb75O9QdEx6IkMxinHZSi8ZyrBaA==} + + '@shikijs/engine-javascript@3.2.2': + resolution: {integrity: sha512-tlDKfhWpF4jKLUyVAnmL+ggIC+0VyteNsUpBzh1iwWLZu4i+PelIRr0TNur6pRRo5UZIv3ss/PLMuwahg9S2hg==} + + '@shikijs/engine-oniguruma@3.2.2': + resolution: {integrity: sha512-vyXRnWVCSvokwbaUD/8uPn6Gqsf5Hv7XwcW4AgiU4Z2qwy19sdr6VGzMdheKKN58tJOOe5MIKiNb901bgcUXYQ==} + + '@shikijs/langs@3.2.2': + resolution: {integrity: sha512-NY0Urg2dV9ETt3JIOWoMPuoDNwte3geLZ4M1nrPHbkDS8dWMpKcEwlqiEIGqtwZNmt5gKyWpR26ln2Bg2ecPgw==} + + '@shikijs/rehype@3.2.2': + resolution: {integrity: sha512-Z/1crAoWBpQoUx/KSjiUM2eT91cjAhxMiInQ8gbgtWm2l2qQEIAWdSk6RJAINq+kl0+KO59QvcKWZHpKhCfXvw==} + + '@shikijs/themes@3.2.2': + resolution: {integrity: sha512-Zuq4lgAxVKkb0FFdhHSdDkALuRpsj1so1JdihjKNQfgM78EHxV2JhO10qPsMrm01FkE3mDRTdF68wfmsqjt6HA==} + + '@shikijs/transformers@3.2.2': + resolution: {integrity: sha512-DQvrPdygc6NNdbfeOZoO1+KiRnnjUQuuPLwsAbUuSKq4QFLD0Ik15FbHojmot5NbgCQRbVr8ufRg8U6X5rGWuQ==} + + '@shikijs/types@3.2.2': + resolution: {integrity: sha512-a5TiHk7EH5Lso8sHcLHbVNNhWKP0Wi3yVnXnu73g86n3WoDgEra7n3KszyeCGuyoagspQ2fzvy4cpSc8pKhb0A==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@types/acorn@4.0.6': - resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@tailwindcss/node@4.1.4': + resolution: {integrity: sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw==} + + '@tailwindcss/oxide-android-arm64@4.1.4': + resolution: {integrity: sha512-xMMAe/SaCN/vHfQYui3fqaBDEXMu22BVwQ33veLc8ep+DNy7CWN52L+TTG9y1K397w9nkzv+Mw+mZWISiqhmlA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.4': + resolution: {integrity: sha512-JGRj0SYFuDuAGilWFBlshcexev2hOKfNkoX+0QTksKYq2zgF9VY/vVMq9m8IObYnLna0Xlg+ytCi2FN2rOL0Sg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.4': + resolution: {integrity: sha512-sdDeLNvs3cYeWsEJ4H1DvjOzaGios4QbBTNLVLVs0XQ0V95bffT3+scptzYGPMjm7xv4+qMhCDrkHwhnUySEzA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.4': + resolution: {integrity: sha512-VHxAqxqdghM83HslPhRsNhHo91McsxRJaEnShJOMu8mHmEj9Ig7ToHJtDukkuLWLzLboh2XSjq/0zO6wgvykNA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.4': + resolution: {integrity: sha512-OTU/m/eV4gQKxy9r5acuesqaymyeSCnsx1cFto/I1WhPmi5HDxX1nkzb8KYBiwkHIGg7CTfo/AcGzoXAJBxLfg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.4': + resolution: {integrity: sha512-hKlLNvbmUC6z5g/J4H+Zx7f7w15whSVImokLPmP6ff1QqTVE+TxUM9PGuNsjHvkvlHUtGTdDnOvGNSEUiXI1Ww==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.4': + resolution: {integrity: sha512-X3As2xhtgPTY/m5edUtddmZ8rCruvBvtxYLMw9OsZdH01L2gS2icsHRwxdU0dMItNfVmrBezueXZCHxVeeb7Aw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.4': + resolution: {integrity: sha512-2VG4DqhGaDSmYIu6C4ua2vSLXnJsb/C9liej7TuSO04NK+JJJgJucDUgmX6sn7Gw3Cs5ZJ9ZLrnI0QRDOjLfNQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.4': + resolution: {integrity: sha512-v+mxVgH2kmur/X5Mdrz9m7TsoVjbdYQT0b4Z+dr+I4RvreCNXyCFELZL/DO0M1RsidZTrm6O1eMnV6zlgEzTMQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.4': + resolution: {integrity: sha512-2TLe9ir+9esCf6Wm+lLWTMbgklIjiF0pbmDnwmhR9MksVOq+e8aP3TSsXySnBDDvTTVd/vKu1aNttEGj3P6l8Q==} + 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.1.4': + resolution: {integrity: sha512-VlnhfilPlO0ltxW9/BgfLI5547PYzqBMPIzRrk4W7uupgCt8z6Trw/tAj6QUtF2om+1MH281Pg+HHUJoLesmng==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.4': + resolution: {integrity: sha512-+7S63t5zhYjslUGb8NcgLpFXD+Kq1F/zt5Xv5qTv7HaFTG/DHyHD9GA6ieNAxhgyA4IcKa/zy7Xx4Oad2/wuhw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.4': + resolution: {integrity: sha512-p5wOpXyOJx7mKh5MXh5oKk+kqcz8T+bA3z/5VWWeQwFrmuBItGwz8Y2CHk/sJ+dNb9B0nYFfn0rj/cKHZyjahQ==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.4': + resolution: {integrity: sha512-bjV6sqycCEa+AQSt2Kr7wpGF1bOZJ5wsqnLEkqSbM/JEHxx/yhMH8wHmdkPyApF9xhHeMSwnnkDUUMMM/hYnXw==} + + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -520,14 +966,14 @@ packages: '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/js-yaml@4.0.9': - resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -538,14 +984,16 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/nlcst@2.0.3': - resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + '@types/node@22.14.0': + resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} - '@types/node@17.0.45': - resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + '@types/react-dom@19.1.2': + resolution: {integrity: sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==} + peerDependencies: + '@types/react': ^19.0.0 - '@types/sax@1.2.7': - resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + '@types/react@19.1.2': + resolution: {integrity: sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==} '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -553,9 +1001,136 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@typescript-eslint/eslint-plugin@8.30.1': + resolution: {integrity: sha512-v+VWphxMjn+1t48/jO4t950D6KR8JaJuNXzi33Ve6P8sEmPr5k6CEXjdGwT6+LodVnEa91EQCtwjWNUCPweo+Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/parser@8.30.1': + resolution: {integrity: sha512-H+vqmWwT5xoNrXqWs/fesmssOW70gxFlgcMlYcBaWNPIEWDgLa4W9nkSPmhuOgLnXq9QYgkZ31fhDyLhleCsAg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.30.1': + resolution: {integrity: sha512-+C0B6ChFXZkuaNDl73FJxRYT0G7ufVPOSQkqkpM/U198wUwUFOtgo1k/QzFh1KjpBitaK7R1tgjVz6o9HmsRPg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.30.1': + resolution: {integrity: sha512-64uBF76bfQiJyHgZISC7vcNz3adqQKIccVoKubyQcOnNcdJBvYOILV1v22Qhsw3tw3VQu5ll8ND6hycgAR5fEA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/types@8.30.1': + resolution: {integrity: sha512-81KawPfkuulyWo5QdyG/LOKbspyyiW+p4vpn4bYO7DM/hZImlVnFwrpCTnmNMOt8CvLRr5ojI9nU1Ekpw4RcEw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.30.1': + resolution: {integrity: sha512-kQQnxymiUy9tTb1F2uep9W6aBiYODgq5EMSk6Nxh4Z+BDUoYUSa029ISs5zTzKBFnexQEh71KqwjKnRz58lusQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.30.1': + resolution: {integrity: sha512-T/8q4R9En2tcEsWPQgB5BQ0XJVOtfARcUvOa8yJP3fh9M/mXraLxZrkCfGb6ChrO/V3W+Xbd04RacUEqk1CFEQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.30.1': + resolution: {integrity: sha512-aEhgas7aJ6vZnNFC7K4/vMGDGyOiqWcYZPpIWrTKuTAlsvDNKy2GFDqh9smL+iq069ZvR0YzEeq0B8NJlLzjFA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@unrs/resolver-binding-darwin-arm64@1.5.0': + resolution: {integrity: sha512-YmocNlEcX/AgJv8gI41bhjMOTcKcea4D2nRIbZj+MhRtSH5+vEU8r/pFuTuoF+JjVplLsBueU+CILfBPVISyGQ==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.5.0': + resolution: {integrity: sha512-qpUrXgH4e/0xu1LOhPEdfgSY3vIXOxDQv370NEL8npN8h40HcQDA+Pl2r4HBW6tTXezWIjxUFcP7tj529RZtDw==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.5.0': + resolution: {integrity: sha512-3tX8r8vgjvZzaJZB4jvxUaaFCDCb3aWDCpZN3EjhGnnwhztslI05KSG5NY/jNjlcZ5QWZ7dEZZ/rNBFsmTaSPw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.5.0': + resolution: {integrity: sha512-FH+ixzBKaUU9fWOj3TYO+Yn/eO6kYvMLV9eNJlJlkU7OgrxkCmiMS6wUbyT0KA3FOZGxnEQ2z3/BHgYm2jqeLA==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.5.0': + resolution: {integrity: sha512-pxCgXMgwB/4PfqFQg73lMhmWwcC0j5L+dNXhZoz/0ek0iS/oAWl65fxZeT/OnU7fVs52MgdP2q02EipqJJXHSg==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.5.0': + resolution: {integrity: sha512-FX2FV7vpLE/+Z0NZX9/1pwWud5Wocm/2PgpUXbT5aSV3QEB10kBPJAzssOQylvdj8mOHoKl5pVkXpbCwww/T2g==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.5.0': + resolution: {integrity: sha512-+gF97xst1BZb28T3nwwzEtq2ewCoMDGKsenYsZuvpmNrW0019G1iUAunZN+FG55L21y+uP7zsGX06OXDQ/viKw==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.5.0': + resolution: {integrity: sha512-5bEmVcQw9js8JYM2LkUBw5SeELSIxX+qKf9bFrfFINKAp4noZ//hUxLpbF7u/3gTBN1GsER6xOzIZlw/VTdXtA==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.5.0': + resolution: {integrity: sha512-GGk/8TPUsf1Q99F+lzMdjE6sGL26uJCwQ9TlvBs8zR3cLQNw/MIumPN7zrs3GFGySjnwXc8gA6J3HKbejywmqA==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.5.0': + resolution: {integrity: sha512-5uRkFYYVNAeVaA4W/CwugjFN3iDOHCPqsBLCCOoJiMfFMMz4evBRsg+498OFa9w6VcTn2bD5aI+RRayaIgk2Sw==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.5.0': + resolution: {integrity: sha512-j905CZH3nehYy6NimNqC2B14pxn4Ltd7guKMyPTzKehbFXTUgihQS/ZfHQTdojkMzbSwBOSgq1dOrY+IpgxDsA==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.5.0': + resolution: {integrity: sha512-dmLevQTuzQRwu5A+mvj54R5aye5I4PVKiWqGxg8tTaYP2k2oTs/3Mo8mgnhPk28VoYCi0fdFYpgzCd4AJndQvQ==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.5.0': + resolution: {integrity: sha512-LtJMhwu7avhoi+kKfAZOKN773RtzLBVVF90YJbB0wyMpUj9yQPeA+mteVUI9P70OG/opH47FeV5AWeaNWWgqJg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.5.0': + resolution: {integrity: sha512-FTZBxLL4SO1mgIM86KykzJmPeTPisBDHQV6xtfDXbTMrentuZ6SdQKJUV5BWaoUK3p8kIULlrCcucqdCnk8Npg==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.5.0': + resolution: {integrity: sha512-i5bB7vJ1waUsFciU/FKLd4Zw0VnAkvhiJ4//jYQXyDUuiLKodmtQZVTcOPU7pp97RrNgCFtXfC1gnvj/DHPJTw==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.5.0': + resolution: {integrity: sha512-wAvXp4k7jhioi4SebXW/yfzzYwsUCr9kIX4gCsUFKpCTUf8Mi7vScJXI3S+kupSUf0LbVHudR8qBbe2wFMSNUw==} + cpu: [x64] + os: [win32] + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -566,122 +1141,131 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} + aria-query@5.3.2: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - array-iterate@2.0.1: - resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + 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==} astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true - astro-expressive-code@0.40.2: - resolution: {integrity: sha512-yJMQId0yXSAbW9I6yqvJ3FcjKzJ8zRL7elbJbllkv1ZJPlsI0NI83Pxn1YL1IapEM347EvOOkSW2GL+2+NO61w==} - peerDependencies: - astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} - astro@5.5.2: - resolution: {integrity: sha512-SOTJxB8mqxe/KEYEJiLIot0YULiCffyfTEclwmdeaASitDJ7eLM/KYrJ9sx3U5hq9GVI17Z4Y0P/1T2aQ0ZN3A==} - engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} - hasBin: true + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.10.3: + resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} + engines: {node: '>=4'} axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} - b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} - bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - bare-events@2.5.4: - resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-fs@4.0.1: - resolution: {integrity: sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==} - engines: {bare: '>=1.7.0'} + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - bare-os@3.6.0: - resolution: {integrity: sha512-BUrFS5TqSBdA0LwHop4OjPJwisqxGy6JsWVqV6qaFoe965qqtaKfDzHY5T2YA1gUL0ZeeQeA+4BBc1FJTcHiPw==} - engines: {bare: '>=1.14.0'} + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} - bare-stream@2.6.5: - resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} - peerDependencies: - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - bare-events: - optional: true + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} - base-64@1.0.0: - resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} - bcp-47-match@2.0.3: - resolution: {integrity: sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==} + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} - bcp-47@2.1.0: - resolution: {integrity: sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==} + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - - boxen@8.0.1: - resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} - engines: {node: '>=18'} - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - camelcase@8.0.0: - resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} - engines: {node: '>=16'} + caniuse-lite@1.0.30001714: + resolution: {integrity: sha512-mtgapdwDLSSBnCI3JokHM7oEQBLxiJKVRtg10AxM1AyeiKcM96f0Mkbqeq+1AbiCtvMcHRulAAEMu693JrSWqg==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -699,16 +1283,11 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - ci-info@4.2.0: - resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} - engines: {node: '>=8'} - - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} @@ -734,27 +1313,47 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - common-ancestor-path@1.0.1: - resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} - cookie-es@1.2.2: - resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - crossws@0.3.4: - resolution: {integrity: sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw==} - - css-selector-parser@3.0.5: - resolution: {integrity: sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + 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.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -767,71 +1366,84 @@ packages: decode-named-character-reference@1.1.0: resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destr@2.0.3: - resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} - detect-libc@2.0.3: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} - deterministic-object-hash@2.0.2: - resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==} - engines: {node: '>=18'} - - devalue@5.1.1: - resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} - direction@2.0.1: - resolution: {integrity: sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==} - hasBin: true + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - dset@3.1.4: - resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} - engines: {node: '>=4'} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} - es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + 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.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} esast-util-from-estree@2.0.0: resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} @@ -839,15 +1451,132 @@ packages: esast-util-from-js@2.0.1: resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} - esbuild@0.25.1: - resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} + esbuild@0.25.2: + resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} engines: {node: '>=18'} hasBin: true + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + eslint-config-next@15.3.0: + resolution: {integrity: sha512-+Z3M1W9MnJjX3W4vI9CHfKlEyhTWOUHvc5dB89FyRnzPsUkJlLWZOi8+1pInuVcSztSM4MwBFB0hIHf4Rbwu4g==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.10.0: + resolution: {integrity: sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ==} + 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.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + 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.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + 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@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.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@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.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.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + 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'} + estree-util-attach-comments@3.0.0: resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} @@ -863,30 +1592,45 @@ packages: estree-util-to-js@2.0.0: resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + estree-util-value-to-estree@3.3.3: + resolution: {integrity: sha512-Db+m1WSD4+mUO7UgMeKkAwdbfNWwIxLt48XF2oFU9emPfXkIu+k5/nlOj313v7wqtAPo0f9REhUvznFrPkG8CQ==} + estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - - expressive-code@0.40.2: - resolution: {integrity: sha512-1zIda2rB0qiDZACawzw2rbdBQiWHBT56uBctS+ezFe5XMAaFaHLnnSYND/Kd+dVzO9HfCXRDpzH3d+3fvOWRcw==} + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + 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-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + 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.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} fdir@6.4.3: resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} @@ -896,66 +1640,180 @@ packages: picomatch: optional: true - flattie@1.1.1: - resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} - get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} - engines: {node: '>=18'} + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + framer-motion@12.9.1: + resolution: {integrity: sha512-dZBp2TO0a39Cc24opshlLoM0/OdTZVKzcXWuhntfwy2Qgz3t9+N4sTyUqNANyHaRFiJUWbwwsXeDvQkEBPky+g==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fumadocs-core@15.2.7: + resolution: {integrity: sha512-uPMOlU+W4nT+qg1hyr8QBI+tMMpDys7QtIWWKFBhZFnVYCHPGuYKykSn5MbCkVkRH5HW3KMpm6zThAWk7gLCjQ==} + peerDependencies: + '@oramacloud/client': 1.x.x || 2.x.x + algoliasearch: 4.24.0 + next: 14.x.x || 15.x.x + react: 18.x.x || 19.x.x + react-dom: 18.x.x || 19.x.x + peerDependenciesMeta: + '@oramacloud/client': + optional: true + algoliasearch: + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + + fumadocs-mdx@11.6.0: + resolution: {integrity: sha512-g0mArgliPBcZgi4691lwTCIw52y2BbxwIila7a6fQ6AEcu236uiBsDHWT4dm+xyjR3S84MlYkty9z2BWVTTNhg==} + hasBin: true + peerDependencies: + '@fumadocs/mdx-remote': ^1.2.0 + fumadocs-core: ^14.0.0 || ^15.0.0 + next: ^15.3.0 + peerDependenciesMeta: + '@fumadocs/mdx-remote': + optional: true + + fumadocs-ui@15.2.7: + resolution: {integrity: sha512-sixoRJdXW2ZyIG0DnuNLbv4Ov4xxu0H2A60una62TJ2uLrxIwFiFq2FfzhmZlT1EK0Gg9pzl2zM4QlFDdLKGjA==} + peerDependencies: + next: 14.x.x || 15.x.x + react: 18.x.x || 19.x.x + react-dom: 18.x.x || 19.x.x + tailwindcss: ^3.4.14 || ^4.0.0 + peerDependenciesMeta: + tailwindcss: + optional: true + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + 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.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} - h3@1.15.1: - resolution: {integrity: sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} - hast-util-embedded@3.0.0: - resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} - hast-util-format@1.1.0: - resolution: {integrity: sha512-yY1UDz6bC9rDvCWHpx12aIBGRG7krurX0p0Fm6pT547LwDIZZiNr8a+IHDogorAdreULSEzP82Nlv5SZkHZcjA==} + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported - hast-util-from-html@2.0.3: - resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} - hast-util-from-parse5@8.0.3: - resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} - hast-util-has-property@3.0.0: - resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} - hast-util-is-body-ok-link@3.0.1: - resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - hast-util-minify-whitespace@1.0.1: - resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} + gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} - hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} - hast-util-phrasing@3.0.1: - resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} - hast-util-raw@9.1.0: - resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - hast-util-select@6.0.4: - resolution: {integrity: sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==} + 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.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} hast-util-to-estree@3.1.3: resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} @@ -966,53 +1824,45 @@ packages: hast-util-to-jsx-runtime@2.3.6: resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} - hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} - hast-util-to-string@3.0.1: resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} - hast-util-to-text@4.0.2: - resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} - hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - hastscript@9.0.1: - resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} - - html-escaper@3.0.3: - resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} - html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - html-whitespace-sensitive-tag-names@3.0.1: - resolution: {integrity: sha512-q+310vW8zmymYHALr1da4HyXUQ0zgiIwIicEfotYPWGN0OJVEN/58IJ3A4GBYcEq3LGAZqKb+ugvP0GNB9CEAA==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + image-size@2.0.2: + resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} + engines: {node: '>=16.x'} + hasBin: true - i18next@23.16.8: - resolution: {integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==} + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} - import-meta-resolve@4.1.0: - resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - iron-webcrypto@1.2.1: - resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} @@ -1020,64 +1870,277 @@ packages: is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + 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.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + 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-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + 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.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + 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-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} + 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.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - klona@2.0.6: - resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} - engines: {node: '>= 8'} + 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 + + 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==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + 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-darwin-arm64@1.29.2: + resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.29.2: + resolution: {integrity: sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.29.2: + resolution: {integrity: sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.29.2: + resolution: {integrity: sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.29.2: + resolution: {integrity: sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.29.2: + resolution: {integrity: sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.29.2: + resolution: {integrity: sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.29.2: + resolution: {integrity: sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.29.2: + resolution: {integrity: sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.29.2: + resolution: {integrity: sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.29.2: + resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==} + 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==} longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + lru-cache@11.1.0: + resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} + engines: {node: 20 || >=22} - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + lucide-react@0.487.0: + resolution: {integrity: sha512-aKqhOQ+YmFnwq8dWgGjOuLc8V1R9/c/yOd+zDY4+ohsR2Jo05lSGc3WsstYPIzcTpeosN7LoCkLReUUITvaIvw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + lucide-react@0.488.0: + resolution: {integrity: sha512-ronlL0MyKut4CEzBY/ai2ZpKPxyWO4jUqdAkm2GNK5Zn3Rj+swDz+3lvyAUXN0PNqPKIX6XM9Xadwz/skLs/pQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} @@ -1086,11 +2149,9 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - mdast-util-definitions@6.0.0: - resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==} - - mdast-util-directive@3.1.0: - resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} @@ -1140,12 +2201,13 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} - micromark-extension-directive@3.0.2: - resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} - micromark-extension-gfm-autolink-literal@2.1.0: resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} @@ -1167,11 +2229,11 @@ packages: micromark-extension-gfm@3.0.0: resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} - micromark-extension-mdx-expression@3.0.0: - resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} - micromark-extension-mdx-jsx@3.0.1: - resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==} + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} micromark-extension-mdx-md@2.0.0: resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} @@ -1188,8 +2250,8 @@ packages: micromark-factory-label@2.0.1: resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - micromark-factory-mdx-expression@2.0.2: - resolution: {integrity: sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==} + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} micromark-factory-space@2.0.1: resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} @@ -1221,8 +2283,8 @@ packages: micromark-util-encode@2.0.1: resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - micromark-util-events-to-acorn@2.0.2: - resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} micromark-util-html-tag-name@2.0.1: resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} @@ -1248,94 +2310,160 @@ packages: micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + motion-dom@12.9.1: + resolution: {integrity: sha512-xqXEwRLDYDTzOgXobSoWtytRtGlf7zdkRfFbrrdP7eojaGQZ5Go4OOKtgnx7uF8sAkfr1ZjMvbCJSCIT2h6fkQ==} - mrmime@2.0.1: - resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} - engines: {node: '>=10'} + motion-utils@12.8.3: + resolution: {integrity: sha512-GYVauZEbca8/zOhEiYOY9/uJeedYQld6co/GJFKOy//0c/4lDqk0zB549sBYqqV2iMuX+uHrY1E5zd8A2L+1Lw==} + + motion@12.9.1: + resolution: {integrity: sha512-amdtlwafU+XLPcrfSrOQ/S2sqiSw+UTywH+X/Yoqaz0qYEocqJKh8bs6M09CdRmkjZuKx2YM+BHodXjsqoTEag==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.9: - resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-build-utils@2.0.0: - resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - neotraverse@0.6.18: - resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} - engines: {node: '>= 10'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} - nlcst-to-string@4.0.0: - resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - node-abi@3.74.0: - resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} - engines: {node: '>=10'} + next@15.3.0: + resolution: {integrity: sha512-k0MgP6BsK8cZ73wRjMazl2y2UcXj49ZXLDEgx6BikWuby/CN+nh81qFFI16edgd7xYpe/jj2OZEIwCoqnzz0bQ==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true - node-addon-api@6.1.0: - resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - - node-fetch-native@1.6.6: - resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} - - node-mock-http@1.0.0: - resolution: {integrity: sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} - ofetch@1.4.1: - resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} + 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'} once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - oniguruma-to-es@2.3.0: - resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} + oniguruma-parser@0.11.2: + resolution: {integrity: sha512-F7Ld4oDZJCI5/wCZ8AOffQbqjSzIRpKH7I/iuSs1SkhZeCj0wS6PMZ4W6VA16TWHrAo0Y9bBKEJOe7tvwcTXnw==} - p-limit@6.2.0: - resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} - engines: {node: '>=18'} + oniguruma-to-es@4.2.0: + resolution: {integrity: sha512-MDPs6KSOLS0tKQ7joqg44dRIRZUyotfTy0r+7oEEs6VwWWP0+E2PPDYWMFN0aqOjRyWHBYq7RfKw9GQk2S2z5g==} - p-queue@8.1.0: - resolution: {integrity: sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==} - engines: {node: '>=18'} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} - p-timeout@6.1.4: - resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} - engines: {node: '>=14.16'} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} - package-manager-detector@1.0.0: - resolution: {integrity: sha512-7elnH+9zMsRo7aS72w6MeRugTpdRvInmEB4Kmm9BVvPw/SLG8gXUGQ+4wF0Mys0RSWPz0B9nuBbDe8vFeA2sfg==} + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} - pagefind@1.3.0: - resolution: {integrity: sha512-8KPLGT5g9s+olKMRTU9LFekLizkVIu9tes90O1/aigJ0T5LmyPqTzGJrETnSw3meSYg58YH7JTzhTTW/3z6VAw==} - hasBin: true + 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'} parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - parse-latin@7.0.0: - resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} - parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + 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==} @@ -1348,52 +2476,86 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} engines: {node: '>=4'} + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + postcss@8.5.3: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} - prebuild-install@7.1.3: - resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} - engines: {node: '>=10'} - hasBin: true + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} - prismjs@1.30.0: - resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} - engines: {node: '>=6'} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} property-information@7.0.0: resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} - radix3@1.1.2: - resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true + react-dom@19.1.0: + resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + peerDependencies: + react: ^19.1.0 - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-medium-image-zoom@5.2.14: + resolution: {integrity: sha512-nfTVYcAUnBzXQpPDcZL+cG/e6UceYUIG+zDcnemL7jtAqbJjVVkA85RgneGtJeni12dTyiRPZVM6Szkmwd/o8w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.6.3: + resolution: {integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.1.0: + resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + engines: {node: '>=0.10.0'} readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} @@ -1411,42 +2573,26 @@ packages: recma-stringify@1.0.0: resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} - regex-recursion@5.1.1: - resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} regex-utilities@2.3.0: resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - regex@5.1.1: - resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} - rehype-expressive-code@0.40.2: - resolution: {integrity: sha512-+kn+AMGCrGzvtH8Q5lC6Y5lnmTV/r33fdmi5QU/IH1KPHKobKr5UnLwJuqHv5jBTSN/0v2wLDS7RTM73FVzqmQ==} - - rehype-format@5.0.1: - resolution: {integrity: sha512-zvmVru9uB0josBVpr946OR8ui7nJEdzZobwLOOqHb/OOD88W0Vk2SqLwoVOj0fM6IPCCO6TaV9CvQvJMWwukFQ==} - - rehype-parse@9.0.1: - resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} - - rehype-raw@7.0.0: - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} rehype-recma@1.0.0: resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} - rehype-stringify@10.0.1: - resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} - - rehype@13.0.2: - resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} - - remark-directive@3.0.1: - resolution: {integrity: sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==} - remark-gfm@4.0.1: resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} @@ -1456,76 +2602,120 @@ packages: remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - remark-rehype@11.1.1: - resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} - - remark-smartypants@3.0.2: - resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} - engines: {node: '>=16.0.0'} + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - retext-latin@4.0.0: - resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} - retext-smartypants@6.2.0: - resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} - retext-stringify@4.0.0: - resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - retext@9.0.0: - resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} - - rollup@4.35.0: - resolution: {integrity: sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} hasBin: true - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true - sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + 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.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + + section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true semver@7.7.1: resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} engines: {node: '>=10'} hasBin: true - sharp@0.32.6: - resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} - engines: {node: '>=14.15.0'} + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + 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.34.1: + resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - shiki@1.29.2: - resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + shiki@3.2.2: + resolution: {integrity: sha512-0qWBkM2t/0NXPRcVgtLhtHv6Ak3Q5yI4K/ggMqcgLRKm4+pCs3namgZlhlat/7u2CuqNtlShNs9lENOG6n7UaQ==} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + 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.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - sitemap@8.0.0: - resolution: {integrity: sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A==} - engines: {node: '>=14.0.0', npm: '>=6.0.0'} - hasBin: true - - smol-toml@1.3.1: - resolution: {integrity: sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==} - engines: {node: '>= 18'} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -1537,22 +2727,38 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - stream-replace-string@2.0.0: - resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==} + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - streamx@2.22.0: - resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + 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.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -1561,282 +2767,210 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} engines: {node: '>=0.10.0'} + 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'} + style-to-js@1.1.16: resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} - tar-fs@2.1.2: - resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} + 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 - tar-fs@3.0.8: - resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tailwind-merge@3.2.0: + resolution: {integrity: sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==} + + tailwindcss@4.1.4: + resolution: {integrity: sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} tinyglobby@0.2.12: resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - tsconfck@3.1.5: - resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} - engines: {node: ^18 || >=20} - hasBin: true + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true + 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==} - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tw-animate-css@1.2.8: + resolution: {integrity: sha512-AxSnYRvyFnAiZCUndS3zQZhNfV/B77ZhJ+O7d3K6wfg/jKJY+yv6ahuyXwnyaYA9UdLqnpCwhTRv9pPTBnPR2g==} - type-fest@4.37.0: - resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==} - engines: {node: '>=16'} + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + 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.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true - ufo@1.5.4: - resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} - ultrahtml@1.5.3: - resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==} - - uncrypto@0.1.3: - resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - unist-util-modify-children@4.0.0: - resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} - unist-util-position-from-estree@2.0.0: resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} unist-util-position@5.0.0: resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - unist-util-visit-children@3.0.0: - resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} - unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - unstorage@1.15.0: - resolution: {integrity: sha512-m40eHdGY/gA6xAPqo8eaxqXgBuzQTlAKfmB1iF7oCKXE1HfwHwzDJBywK+qQGn52dta+bPlZluPF7++yR3p/bg==} + unrs-resolver@1.5.0: + resolution: {integrity: sha512-6aia3Oy7SEe0MuUGQm2nsyob0L2+g57w178K5SE/3pvSGAIp28BB2O921fKx424Ahc/gQ6v0DXFbhcpyhGZdOA==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} peerDependencies: - '@azure/app-configuration': ^1.8.0 - '@azure/cosmos': ^4.2.0 - '@azure/data-tables': ^13.3.0 - '@azure/identity': ^4.6.0 - '@azure/keyvault-secrets': ^4.9.0 - '@azure/storage-blob': ^12.26.0 - '@capacitor/preferences': ^6.0.3 - '@deno/kv': '>=0.9.0' - '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 - '@planetscale/database': ^1.19.0 - '@upstash/redis': ^1.34.3 - '@vercel/blob': '>=0.27.1' - '@vercel/kv': ^1.0.1 - aws4fetch: ^1.0.20 - db0: '>=0.2.1' - idb-keyval: ^6.2.1 - ioredis: ^5.4.2 - uploadthing: ^7.4.4 + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc peerDependenciesMeta: - '@azure/app-configuration': + '@types/react': optional: true - '@azure/cosmos': - optional: true - '@azure/data-tables': - optional: true - '@azure/identity': - optional: true - '@azure/keyvault-secrets': - optional: true - '@azure/storage-blob': - optional: true - '@capacitor/preferences': - optional: true - '@deno/kv': - optional: true - '@netlify/blobs': - optional: true - '@planetscale/database': - optional: true - '@upstash/redis': - optional: true - '@vercel/blob': - optional: true - '@vercel/kv': - optional: true - aws4fetch: - optional: true - db0: - optional: true - idb-keyval: - optional: true - ioredis: - optional: true - uploadthing: + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': optional: true util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - vfile-location@5.0.3: - resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} - vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite@6.2.2: - resolution: {integrity: sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + 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.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vitefu@1.0.6: - resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - vite: - optional: true - - web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - - which-pm-runs@1.1.0: - resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} - engines: {node: '>=4'} - - widest-line@5.0.0: - resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} - engines: {node: '>=18'} - - wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - xxhash-wasm@1.1.0: - resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yocto-queue@1.2.0: - resolution: {integrity: sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==} - engines: {node: '>=12.20'} - - yocto-spinner@0.2.1: - resolution: {integrity: sha512-lHHxjh0bXaLgdJy3cNnVb/F9myx3CkhrvSOEVTkaUgNMXnYFa2xYPVhtGnqhh3jErY2gParBOHallCbc7NrlZQ==} - engines: {node: '>=18.19'} - - yoctocolors@2.1.1: - resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} - engines: {node: '>=18'} - - zod-to-json-schema@3.24.3: - resolution: {integrity: sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==} - peerDependencies: - zod: ^3.24.1 - - zod-to-ts@1.2.0: - resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==} - peerDependencies: - typescript: ^4.9.4 || ^5.0.2 - zod: ^3 + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} zod@3.24.2: resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} @@ -1846,312 +2980,236 @@ packages: snapshots: - '@astrojs/compiler@2.11.0': {} + '@alloc/quick-lru@5.2.0': {} - '@astrojs/internal-helpers@0.6.1': {} - - '@astrojs/markdown-remark@6.3.0': + '@emnapi/core@1.4.3': dependencies: - '@astrojs/internal-helpers': 0.6.1 - '@astrojs/prism': 3.2.0 - github-slugger: 2.0.0 - hast-util-from-html: 2.0.3 - hast-util-to-text: 4.0.2 - import-meta-resolve: 4.1.0 - js-yaml: 4.1.0 - mdast-util-definitions: 6.0.0 - rehype-raw: 7.0.0 - rehype-stringify: 10.0.1 - remark-gfm: 4.0.1 - remark-parse: 11.0.0 - remark-rehype: 11.1.1 - remark-smartypants: 3.0.2 - shiki: 1.29.2 - smol-toml: 1.3.1 - unified: 11.0.5 - unist-util-remove-position: 5.0.0 - unist-util-visit: 5.0.0 - unist-util-visit-parents: 6.0.1 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color + '@emnapi/wasi-threads': 1.0.2 + tslib: 2.8.1 + optional: true - '@astrojs/mdx@4.2.0(astro@5.5.2(rollup@4.35.0)(typescript@5.8.2))': - dependencies: - '@astrojs/markdown-remark': 6.3.0 - '@mdx-js/mdx': 3.1.0(acorn@8.14.1) - acorn: 8.14.1 - astro: 5.5.2(rollup@4.35.0)(typescript@5.8.2) - es-module-lexer: 1.6.0 - estree-util-visit: 2.0.0 - hast-util-to-html: 9.0.5 - kleur: 4.1.5 - rehype-raw: 7.0.0 - remark-gfm: 4.0.1 - remark-smartypants: 3.0.2 - source-map: 0.7.4 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@astrojs/prism@3.2.0': - dependencies: - prismjs: 1.30.0 - - '@astrojs/sitemap@3.2.1': - dependencies: - sitemap: 8.0.0 - stream-replace-string: 2.0.0 - zod: 3.24.2 - - '@astrojs/starlight@0.32.2(astro@5.5.2(rollup@4.35.0)(typescript@5.8.2))': - dependencies: - '@astrojs/mdx': 4.2.0(astro@5.5.2(rollup@4.35.0)(typescript@5.8.2)) - '@astrojs/sitemap': 3.2.1 - '@pagefind/default-ui': 1.3.0 - '@types/hast': 3.0.4 - '@types/js-yaml': 4.0.9 - '@types/mdast': 4.0.4 - astro: 5.5.2(rollup@4.35.0)(typescript@5.8.2) - astro-expressive-code: 0.40.2(astro@5.5.2(rollup@4.35.0)(typescript@5.8.2)) - bcp-47: 2.1.0 - hast-util-from-html: 2.0.3 - hast-util-select: 6.0.4 - hast-util-to-string: 3.0.1 - hastscript: 9.0.1 - i18next: 23.16.8 - js-yaml: 4.1.0 - klona: 2.0.6 - mdast-util-directive: 3.1.0 - mdast-util-to-markdown: 2.1.2 - mdast-util-to-string: 4.0.0 - pagefind: 1.3.0 - rehype: 13.0.2 - rehype-format: 5.0.1 - remark-directive: 3.0.1 - unified: 11.0.5 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@astrojs/telemetry@3.2.0': - dependencies: - ci-info: 4.2.0 - debug: 4.4.0 - dlv: 1.1.3 - dset: 3.1.4 - is-docker: 3.0.0 - is-wsl: 3.1.0 - which-pm-runs: 1.1.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.25.9': {} - - '@babel/helper-validator-identifier@7.25.9': {} - - '@babel/parser@7.26.10': - dependencies: - '@babel/types': 7.26.10 - - '@babel/runtime@7.26.10': - dependencies: - regenerator-runtime: 0.14.1 - - '@babel/types@7.26.10': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - - '@ctrl/tinycolor@4.1.0': {} - - '@emnapi/runtime@1.3.1': + '@emnapi/runtime@1.4.3': dependencies: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.1': - optional: true - - '@esbuild/android-arm64@0.25.1': - optional: true - - '@esbuild/android-arm@0.25.1': - optional: true - - '@esbuild/android-x64@0.25.1': - optional: true - - '@esbuild/darwin-arm64@0.25.1': - optional: true - - '@esbuild/darwin-x64@0.25.1': - optional: true - - '@esbuild/freebsd-arm64@0.25.1': - optional: true - - '@esbuild/freebsd-x64@0.25.1': - optional: true - - '@esbuild/linux-arm64@0.25.1': - optional: true - - '@esbuild/linux-arm@0.25.1': - optional: true - - '@esbuild/linux-ia32@0.25.1': - optional: true - - '@esbuild/linux-loong64@0.25.1': - optional: true - - '@esbuild/linux-mips64el@0.25.1': - optional: true - - '@esbuild/linux-ppc64@0.25.1': - optional: true - - '@esbuild/linux-riscv64@0.25.1': - optional: true - - '@esbuild/linux-s390x@0.25.1': - optional: true - - '@esbuild/linux-x64@0.25.1': - optional: true - - '@esbuild/netbsd-arm64@0.25.1': - optional: true - - '@esbuild/netbsd-x64@0.25.1': - optional: true - - '@esbuild/openbsd-arm64@0.25.1': - optional: true - - '@esbuild/openbsd-x64@0.25.1': - optional: true - - '@esbuild/sunos-x64@0.25.1': - optional: true - - '@esbuild/win32-arm64@0.25.1': - optional: true - - '@esbuild/win32-ia32@0.25.1': - optional: true - - '@esbuild/win32-x64@0.25.1': - optional: true - - '@expressive-code/core@0.40.2': + '@emnapi/wasi-threads@1.0.2': dependencies: - '@ctrl/tinycolor': 4.1.0 - hast-util-select: 6.0.4 - hast-util-to-html: 9.0.5 - hast-util-to-text: 4.0.2 - hastscript: 9.0.1 - postcss: 8.5.3 - postcss-nested: 6.2.0(postcss@8.5.3) - unist-util-visit: 5.0.0 - unist-util-visit-parents: 6.0.1 + tslib: 2.8.1 + optional: true - '@expressive-code/plugin-frames@0.40.2': + '@esbuild/aix-ppc64@0.25.2': + optional: true + + '@esbuild/android-arm64@0.25.2': + optional: true + + '@esbuild/android-arm@0.25.2': + optional: true + + '@esbuild/android-x64@0.25.2': + optional: true + + '@esbuild/darwin-arm64@0.25.2': + optional: true + + '@esbuild/darwin-x64@0.25.2': + optional: true + + '@esbuild/freebsd-arm64@0.25.2': + optional: true + + '@esbuild/freebsd-x64@0.25.2': + optional: true + + '@esbuild/linux-arm64@0.25.2': + optional: true + + '@esbuild/linux-arm@0.25.2': + optional: true + + '@esbuild/linux-ia32@0.25.2': + optional: true + + '@esbuild/linux-loong64@0.25.2': + optional: true + + '@esbuild/linux-mips64el@0.25.2': + optional: true + + '@esbuild/linux-ppc64@0.25.2': + optional: true + + '@esbuild/linux-riscv64@0.25.2': + optional: true + + '@esbuild/linux-s390x@0.25.2': + optional: true + + '@esbuild/linux-x64@0.25.2': + optional: true + + '@esbuild/netbsd-arm64@0.25.2': + optional: true + + '@esbuild/netbsd-x64@0.25.2': + optional: true + + '@esbuild/openbsd-arm64@0.25.2': + optional: true + + '@esbuild/openbsd-x64@0.25.2': + optional: true + + '@esbuild/sunos-x64@0.25.2': + optional: true + + '@esbuild/win32-arm64@0.25.2': + optional: true + + '@esbuild/win32-ia32@0.25.2': + optional: true + + '@esbuild/win32-x64@0.25.2': + optional: true + + '@eslint-community/eslint-utils@4.6.1(eslint@8.57.1)': dependencies: - '@expressive-code/core': 0.40.2 + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 - '@expressive-code/plugin-shiki@0.40.2': + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/eslintrc@2.1.4': dependencies: - '@expressive-code/core': 0.40.2 - shiki: 1.29.2 + ajv: 6.12.6 + debug: 4.4.0 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color - '@expressive-code/plugin-text-markers@0.40.2': + '@eslint/js@8.57.1': {} + + '@floating-ui/core@1.6.9': dependencies: - '@expressive-code/core': 0.40.2 + '@floating-ui/utils': 0.2.9 - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 - optional: true - - '@img/sharp-darwin-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm@1.0.5': - optional: true - - '@img/sharp-libvips-linux-s390x@1.0.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - optional: true - - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 - optional: true - - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 - optional: true - - '@img/sharp-linux-s390x@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 - optional: true - - '@img/sharp-linux-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - optional: true - - '@img/sharp-wasm32@0.33.5': + '@floating-ui/dom@1.6.13': dependencies: - '@emnapi/runtime': 1.3.1 + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 + + '@floating-ui/react-dom@2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/dom': 1.6.13 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@floating-ui/utils@0.2.9': {} + + '@formatjs/intl-localematcher@0.6.1': + dependencies: + tslib: 2.8.1 + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@img/sharp-darwin-arm64@0.34.1': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.1.0 optional: true - '@img/sharp-win32-ia32@0.33.5': + '@img/sharp-darwin-x64@0.34.1': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.1.0 optional: true - '@img/sharp-win32-x64@0.33.5': + '@img/sharp-libvips-darwin-arm64@1.1.0': optional: true - '@jridgewell/sourcemap-codec@1.5.0': {} + '@img/sharp-libvips-darwin-x64@1.1.0': + optional: true + + '@img/sharp-libvips-linux-arm64@1.1.0': + optional: true + + '@img/sharp-libvips-linux-arm@1.1.0': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.1.0': + optional: true + + '@img/sharp-libvips-linux-s390x@1.1.0': + optional: true + + '@img/sharp-libvips-linux-x64@1.1.0': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + optional: true + + '@img/sharp-linux-arm64@0.34.1': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.1.0 + optional: true + + '@img/sharp-linux-arm@0.34.1': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.1.0 + optional: true + + '@img/sharp-linux-s390x@0.34.1': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.1.0 + optional: true + + '@img/sharp-linux-x64@0.34.1': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.1.0 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.1': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.1': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + optional: true + + '@img/sharp-wasm32@0.34.1': + dependencies: + '@emnapi/runtime': 1.4.3 + optional: true + + '@img/sharp-win32-ia32@0.34.1': + optional: true + + '@img/sharp-win32-x64@0.34.1': + optional: true '@mdx-js/mdx@3.1.0(acorn@8.14.1)': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 @@ -2168,7 +3226,7 @@ snapshots: rehype-recma: 1.0.0 remark-mdx: 3.1.0 remark-parse: 11.0.0 - remark-rehype: 11.1.1 + remark-rehype: 11.1.2 source-map: 0.7.4 unified: 11.0.5 unist-util-position-from-estree: 2.0.0 @@ -2179,130 +3237,529 @@ snapshots: - acorn - supports-color - '@oslojs/encoding@1.1.0': {} - - '@pagefind/darwin-arm64@1.3.0': - optional: true - - '@pagefind/darwin-x64@1.3.0': - optional: true - - '@pagefind/default-ui@1.3.0': {} - - '@pagefind/linux-arm64@1.3.0': - optional: true - - '@pagefind/linux-x64@1.3.0': - optional: true - - '@pagefind/windows-x64@1.3.0': - optional: true - - '@rollup/pluginutils@5.1.4(rollup@4.35.0)': + '@napi-rs/wasm-runtime@0.2.9': dependencies: - '@types/estree': 1.0.6 - estree-walker: 2.0.2 - picomatch: 4.0.2 + '@emnapi/core': 1.4.3 + '@emnapi/runtime': 1.4.3 + '@tybys/wasm-util': 0.9.0 + optional: true + + '@next/env@15.3.0': {} + + '@next/eslint-plugin-next@15.3.0': + dependencies: + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@15.3.0': + optional: true + + '@next/swc-darwin-x64@15.3.0': + optional: true + + '@next/swc-linux-arm64-gnu@15.3.0': + optional: true + + '@next/swc-linux-arm64-musl@15.3.0': + optional: true + + '@next/swc-linux-x64-gnu@15.3.0': + optional: true + + '@next/swc-linux-x64-musl@15.3.0': + optional: true + + '@next/swc-win32-arm64-msvc@15.3.0': + optional: true + + '@next/swc-win32-x64-msvc@15.3.0': + 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.19.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@orama/orama@3.1.6': {} + + '@radix-ui/number@1.1.1': {} + + '@radix-ui/primitive@1.1.2': {} + + '@radix-ui/react-accordion@1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collapsible': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) optionalDependencies: - rollup: 4.35.0 + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) - '@rollup/rollup-android-arm-eabi@4.35.0': - optional: true - - '@rollup/rollup-android-arm64@4.35.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.35.0': - optional: true - - '@rollup/rollup-darwin-x64@4.35.0': - optional: true - - '@rollup/rollup-freebsd-arm64@4.35.0': - optional: true - - '@rollup/rollup-freebsd-x64@4.35.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.35.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.35.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.35.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.35.0': - optional: true - - '@rollup/rollup-linux-loongarch64-gnu@4.35.0': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.35.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.35.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.35.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.35.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.35.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.35.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.35.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.35.0': - optional: true - - '@shikijs/core@1.29.2': + '@radix-ui/react-arrow@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@shikijs/engine-javascript': 1.29.2 - '@shikijs/engine-oniguruma': 1.29.2 - '@shikijs/types': 1.29.2 + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-collapsible@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-collection@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.2)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-context@1.1.2(@types/react@19.1.2)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-dialog@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-portal': 1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.1.1(@types/react@19.1.2)(react@19.1.0) + aria-hidden: 1.2.4 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-direction@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-dismissable-layer@1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.2)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-focus-scope@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-id@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-navigation-menu@1.2.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-popover@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-popper': 1.2.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.1.1(@types/react@19.1.2)(react@19.1.0) + aria-hidden: 1.2.4 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-popper@1.2.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-arrow': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-portal@1.1.5(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-presence@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-primitive@2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-roving-focus@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-collection': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-scroll-area@1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-slot@1.2.0(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-tabs@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-use-controllable-state@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + + '@radix-ui/react-visually-hidden@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + + '@radix-ui/rect@1.1.1': {} + + '@rtsao/scc@1.1.0': {} + + '@rushstack/eslint-patch@1.11.0': {} + + '@shikijs/core@3.2.2': + dependencies: + '@shikijs/types': 3.2.2 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@1.29.2': + '@shikijs/engine-javascript@3.2.2': dependencies: - '@shikijs/types': 1.29.2 + '@shikijs/types': 3.2.2 '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 2.3.0 + oniguruma-to-es: 4.2.0 - '@shikijs/engine-oniguruma@1.29.2': + '@shikijs/engine-oniguruma@3.2.2': dependencies: - '@shikijs/types': 1.29.2 + '@shikijs/types': 3.2.2 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@1.29.2': + '@shikijs/langs@3.2.2': dependencies: - '@shikijs/types': 1.29.2 + '@shikijs/types': 3.2.2 - '@shikijs/themes@1.29.2': + '@shikijs/rehype@3.2.2': dependencies: - '@shikijs/types': 1.29.2 + '@shikijs/types': 3.2.2 + '@types/hast': 3.0.4 + hast-util-to-string: 3.0.1 + shiki: 3.2.2 + unified: 11.0.5 + unist-util-visit: 5.0.0 - '@shikijs/types@1.29.2': + '@shikijs/themes@3.2.2': + dependencies: + '@shikijs/types': 3.2.2 + + '@shikijs/transformers@3.2.2': + dependencies: + '@shikijs/core': 3.2.2 + '@shikijs/types': 3.2.2 + + '@shikijs/types@3.2.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 '@shikijs/vscode-textmate@10.0.2': {} - '@types/acorn@4.0.6': - dependencies: - '@types/estree': 1.0.6 + '@standard-schema/spec@1.0.0': {} - '@types/cookie@0.6.0': {} + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@tailwindcss/node@4.1.4': + dependencies: + enhanced-resolve: 5.18.1 + jiti: 2.4.2 + lightningcss: 1.29.2 + tailwindcss: 4.1.4 + + '@tailwindcss/oxide-android-arm64@4.1.4': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.4': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.4': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.4': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.4': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.4': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.4': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.4': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.4': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.4': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.4': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.4': + optional: true + + '@tailwindcss/oxide@4.1.4': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.4 + '@tailwindcss/oxide-darwin-arm64': 4.1.4 + '@tailwindcss/oxide-darwin-x64': 4.1.4 + '@tailwindcss/oxide-freebsd-x64': 4.1.4 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.4 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.4 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.4 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.4 + '@tailwindcss/oxide-linux-x64-musl': 4.1.4 + '@tailwindcss/oxide-wasm32-wasi': 4.1.4 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.4 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.4 + + '@tailwindcss/postcss@4.1.4': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.4 + '@tailwindcss/oxide': 4.1.4 + postcss: 8.5.3 + tailwindcss: 4.1.4 + + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true '@types/debug@4.1.12': dependencies: @@ -2310,15 +3767,15 @@ snapshots: '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 - '@types/estree@1.0.6': {} + '@types/estree@1.0.7': {} '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 - '@types/js-yaml@4.0.9': {} + '@types/json5@0.0.29': {} '@types/mdast@4.0.4': dependencies: @@ -2328,228 +3785,309 @@ snapshots: '@types/ms@2.1.0': {} - '@types/nlcst@2.0.3': + '@types/node@22.14.0': dependencies: - '@types/unist': 3.0.3 + undici-types: 6.21.0 - '@types/node@17.0.45': {} - - '@types/sax@1.2.7': + '@types/react-dom@19.1.2(@types/react@19.1.2)': dependencies: - '@types/node': 17.0.45 + '@types/react': 19.1.2 + + '@types/react@19.1.2': + dependencies: + csstype: 3.1.3 '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} + '@typescript-eslint/eslint-plugin@8.30.1(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.30.1(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.30.1 + '@typescript-eslint/type-utils': 8.30.1(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/utils': 8.30.1(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.30.1 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.30.1 + '@typescript-eslint/types': 8.30.1 + '@typescript-eslint/typescript-estree': 8.30.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.30.1 + debug: 4.4.0 + eslint: 8.57.1 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.30.1': + dependencies: + '@typescript-eslint/types': 8.30.1 + '@typescript-eslint/visitor-keys': 8.30.1 + + '@typescript-eslint/type-utils@8.30.1(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.30.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.30.1(eslint@8.57.1)(typescript@5.8.3) + debug: 4.4.0 + eslint: 8.57.1 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.30.1': {} + + '@typescript-eslint/typescript-estree@8.30.1(typescript@5.8.3)': + dependencies: + '@typescript-eslint/types': 8.30.1 + '@typescript-eslint/visitor-keys': 8.30.1 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.30.1(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.30.1 + '@typescript-eslint/types': 8.30.1 + '@typescript-eslint/typescript-estree': 8.30.1(typescript@5.8.3) + eslint: 8.57.1 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.30.1': + dependencies: + '@typescript-eslint/types': 8.30.1 + eslint-visitor-keys: 4.2.0 + '@ungap/structured-clone@1.3.0': {} + '@unrs/resolver-binding-darwin-arm64@1.5.0': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.5.0': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.5.0': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.5.0': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.5.0': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.5.0': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.5.0': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.5.0': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.5.0': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.5.0': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.5.0': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.5.0': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.5.0': + dependencies: + '@napi-rs/wasm-runtime': 0.2.9 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.5.0': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.5.0': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.5.0': + optional: true + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: acorn: 8.14.1 acorn@8.14.1: {} - ansi-align@3.0.1: + ajv@6.12.6: dependencies: - string-width: 4.2.3 + 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-regex@5.0.1: {} - ansi-regex@6.1.0: {} - - ansi-styles@6.2.1: {} - - anymatch@3.1.3: + ansi-styles@4.3.0: dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 + color-convert: 2.0.1 - arg@5.0.2: {} + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 argparse@2.0.1: {} + aria-hidden@1.2.4: + dependencies: + tslib: 2.8.1 + aria-query@5.3.2: {} - array-iterate@2.0.1: {} + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + 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.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + ast-types-flow@0.0.8: {} astring@1.9.0: {} - astro-expressive-code@0.40.2(astro@5.5.2(rollup@4.35.0)(typescript@5.8.2)): - dependencies: - astro: 5.5.2(rollup@4.35.0)(typescript@5.8.2) - rehype-expressive-code: 0.40.2 + async-function@1.0.0: {} - astro@5.5.2(rollup@4.35.0)(typescript@5.8.2): + available-typed-arrays@1.0.7: dependencies: - '@astrojs/compiler': 2.11.0 - '@astrojs/internal-helpers': 0.6.1 - '@astrojs/markdown-remark': 6.3.0 - '@astrojs/telemetry': 3.2.0 - '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.1.4(rollup@4.35.0) - '@types/cookie': 0.6.0 - acorn: 8.14.1 - aria-query: 5.3.2 - axobject-query: 4.1.0 - boxen: 8.0.1 - ci-info: 4.2.0 - clsx: 2.1.1 - common-ancestor-path: 1.0.1 - cookie: 0.7.2 - cssesc: 3.0.0 - debug: 4.4.0 - deterministic-object-hash: 2.0.2 - devalue: 5.1.1 - diff: 5.2.0 - dlv: 1.1.3 - dset: 3.1.4 - es-module-lexer: 1.6.0 - esbuild: 0.25.1 - estree-walker: 3.0.3 - flattie: 1.1.1 - github-slugger: 2.0.0 - html-escaper: 3.0.3 - http-cache-semantics: 4.1.1 - js-yaml: 4.1.0 - kleur: 4.1.5 - magic-string: 0.30.17 - magicast: 0.3.5 - mrmime: 2.0.1 - neotraverse: 0.6.18 - p-limit: 6.2.0 - p-queue: 8.1.0 - package-manager-detector: 1.0.0 - picomatch: 4.0.2 - prompts: 2.4.2 - rehype: 13.0.2 - semver: 7.7.1 - shiki: 1.29.2 - tinyexec: 0.3.2 - tinyglobby: 0.2.12 - tsconfck: 3.1.5(typescript@5.8.2) - ultrahtml: 1.5.3 - unist-util-visit: 5.0.0 - unstorage: 1.15.0 - vfile: 6.0.3 - vite: 6.2.2 - vitefu: 1.0.6(vite@6.2.2) - xxhash-wasm: 1.1.0 - yargs-parser: 21.1.1 - yocto-spinner: 0.2.1 - zod: 3.24.2 - zod-to-json-schema: 3.24.3(zod@3.24.2) - zod-to-ts: 1.2.0(typescript@5.8.2)(zod@3.24.2) - optionalDependencies: - sharp: 0.33.5 - transitivePeerDependencies: - - '@azure/app-configuration' - - '@azure/cosmos' - - '@azure/data-tables' - - '@azure/identity' - - '@azure/keyvault-secrets' - - '@azure/storage-blob' - - '@capacitor/preferences' - - '@deno/kv' - - '@netlify/blobs' - - '@planetscale/database' - - '@types/node' - - '@upstash/redis' - - '@vercel/blob' - - '@vercel/kv' - - aws4fetch - - db0 - - idb-keyval - - ioredis - - jiti - - less - - lightningcss - - rollup - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - typescript - - uploadthing - - yaml + possible-typed-array-names: 1.1.0 + + axe-core@4.10.3: {} axobject-query@4.1.0: {} - b4a@1.6.7: {} - bail@2.0.2: {} - bare-events@2.5.4: - optional: true + balanced-match@1.0.2: {} - bare-fs@4.0.1: + brace-expansion@1.1.11: dependencies: - bare-events: 2.5.4 - bare-path: 3.0.0 - bare-stream: 2.6.5(bare-events@2.5.4) - transitivePeerDependencies: - - bare-buffer - optional: true + balanced-match: 1.0.2 + concat-map: 0.0.1 - bare-os@3.6.0: - optional: true - - bare-path@3.0.0: + brace-expansion@2.0.1: dependencies: - bare-os: 3.6.0 - optional: true + balanced-match: 1.0.2 - bare-stream@2.6.5(bare-events@2.5.4): + braces@3.0.3: dependencies: - streamx: 2.22.0 - optionalDependencies: - bare-events: 2.5.4 - optional: true + fill-range: 7.1.1 - base-64@1.0.0: {} - - base64-js@1.5.1: {} - - bcp-47-match@2.0.3: {} - - bcp-47@2.1.0: + busboy@1.6.0: dependencies: - is-alphabetical: 2.0.1 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 + streamsearch: 1.1.0 - bl@4.1.0: + call-bind-apply-helpers@1.0.2: dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 + es-errors: 1.3.0 + function-bind: 1.1.2 - boolbase@1.0.0: {} - - boxen@8.0.1: + call-bind@1.0.8: dependencies: - ansi-align: 3.0.1 - camelcase: 8.0.0 - chalk: 5.4.1 - cli-boxes: 3.0.0 - string-width: 7.2.0 - type-fest: 4.37.0 - widest-line: 5.0.0 - wrap-ansi: 9.0.0 + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 - buffer@5.7.1: + call-bound@1.0.4: dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 - camelcase@8.0.0: {} + callsites@3.1.0: {} + + caniuse-lite@1.0.30001714: {} ccount@2.0.1: {} - chalk@5.4.1: {} + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 character-entities-html4@2.1.0: {} @@ -2563,11 +4101,11 @@ snapshots: dependencies: readdirp: 4.1.2 - chownr@1.1.4: {} + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 - ci-info@4.2.0: {} - - cli-boxes@3.0.0: {} + client-only@0.0.1: {} clsx@2.1.1: {} @@ -2583,28 +4121,54 @@ snapshots: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 + optional: true color@4.2.3: dependencies: color-convert: 2.0.1 color-string: 1.9.1 + optional: true comma-separated-tokens@2.0.3: {} - common-ancestor-path@1.0.1: {} + compute-scroll-into-view@3.1.1: {} - cookie-es@1.2.2: {} + concat-map@0.0.1: {} - cookie@0.7.2: {} - - crossws@0.3.4: + cross-spawn@7.0.6: dependencies: - uncrypto: 0.1.3 - - css-selector-parser@3.0.5: {} + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 cssesc@3.0.0: {} + csstype@3.1.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.0: dependencies: ms: 2.1.3 @@ -2613,51 +4177,150 @@ snapshots: dependencies: character-entities: 2.0.2 - decompress-response@6.0.0: + deep-is@0.1.4: {} + + define-data-property@1.1.4: dependencies: - mimic-response: 3.1.0 + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 - deep-extend@0.6.0: {} - - defu@6.1.4: {} + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 dequal@2.0.3: {} - destr@2.0.3: {} - detect-libc@2.0.3: {} - deterministic-object-hash@2.0.2: - dependencies: - base-64: 1.0.0 - - devalue@5.1.1: {} + detect-node-es@1.1.0: {} devlop@1.1.0: dependencies: dequal: 2.0.3 - diff@5.2.0: {} + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 - direction@2.0.1: {} + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 - dlv@1.1.3: {} - - dset@3.1.4: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 emoji-regex-xs@1.0.0: {} - emoji-regex@10.4.0: {} + emoji-regex@9.2.2: {} - emoji-regex@8.0.0: {} - - end-of-stream@1.4.4: + enhanced-resolve@5.18.1: dependencies: - once: 1.4.0 + graceful-fs: 4.2.11 + tapable: 2.2.1 - entities@4.5.0: {} + es-abstract@1.23.9: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + 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.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + 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.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + 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.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + 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.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 - es-module-lexer@1.6.0: {} + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + 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 + safe-array-concat: 1.1.3 + + es-object-atoms@1.1.1: + 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.2 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 esast-util-from-estree@2.0.0: dependencies: @@ -2673,39 +4336,239 @@ snapshots: esast-util-from-estree: 2.0.0 vfile-message: 4.0.2 - esbuild@0.25.1: + esbuild@0.25.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.1 - '@esbuild/android-arm': 0.25.1 - '@esbuild/android-arm64': 0.25.1 - '@esbuild/android-x64': 0.25.1 - '@esbuild/darwin-arm64': 0.25.1 - '@esbuild/darwin-x64': 0.25.1 - '@esbuild/freebsd-arm64': 0.25.1 - '@esbuild/freebsd-x64': 0.25.1 - '@esbuild/linux-arm': 0.25.1 - '@esbuild/linux-arm64': 0.25.1 - '@esbuild/linux-ia32': 0.25.1 - '@esbuild/linux-loong64': 0.25.1 - '@esbuild/linux-mips64el': 0.25.1 - '@esbuild/linux-ppc64': 0.25.1 - '@esbuild/linux-riscv64': 0.25.1 - '@esbuild/linux-s390x': 0.25.1 - '@esbuild/linux-x64': 0.25.1 - '@esbuild/netbsd-arm64': 0.25.1 - '@esbuild/netbsd-x64': 0.25.1 - '@esbuild/openbsd-arm64': 0.25.1 - '@esbuild/openbsd-x64': 0.25.1 - '@esbuild/sunos-x64': 0.25.1 - '@esbuild/win32-arm64': 0.25.1 - '@esbuild/win32-ia32': 0.25.1 - '@esbuild/win32-x64': 0.25.1 + '@esbuild/aix-ppc64': 0.25.2 + '@esbuild/android-arm': 0.25.2 + '@esbuild/android-arm64': 0.25.2 + '@esbuild/android-x64': 0.25.2 + '@esbuild/darwin-arm64': 0.25.2 + '@esbuild/darwin-x64': 0.25.2 + '@esbuild/freebsd-arm64': 0.25.2 + '@esbuild/freebsd-x64': 0.25.2 + '@esbuild/linux-arm': 0.25.2 + '@esbuild/linux-arm64': 0.25.2 + '@esbuild/linux-ia32': 0.25.2 + '@esbuild/linux-loong64': 0.25.2 + '@esbuild/linux-mips64el': 0.25.2 + '@esbuild/linux-ppc64': 0.25.2 + '@esbuild/linux-riscv64': 0.25.2 + '@esbuild/linux-s390x': 0.25.2 + '@esbuild/linux-x64': 0.25.2 + '@esbuild/netbsd-arm64': 0.25.2 + '@esbuild/netbsd-x64': 0.25.2 + '@esbuild/openbsd-arm64': 0.25.2 + '@esbuild/openbsd-x64': 0.25.2 + '@esbuild/sunos-x64': 0.25.2 + '@esbuild/win32-arm64': 0.25.2 + '@esbuild/win32-ia32': 0.25.2 + '@esbuild/win32-x64': 0.25.2 + + escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} + eslint-config-next@15.3.0(eslint@8.57.1)(typescript@5.8.3): + dependencies: + '@next/eslint-plugin-next': 15.3.0 + '@rushstack/eslint-patch': 1.11.0 + '@typescript-eslint/eslint-plugin': 8.30.1(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 8.30.1(eslint@8.57.1)(typescript@5.8.3) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) + eslint-plugin-react: 7.37.5(eslint@8.57.1) + eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint@8.57.1): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.0 + eslint: 8.57.1 + get-tsconfig: 4.10.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.12 + unrs-resolver: 1.5.0 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.30.1(eslint@8.57.1)(typescript@5.8.3) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + 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: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.30.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.30.1(eslint@8.57.1)(typescript@5.8.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.3 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.57.1 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-react-hooks@5.2.0(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-plugin-react@7.37.5(eslint@8.57.1): + dependencies: + array-includes: 3.1.8 + 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.2.1 + eslint: 8.57.1 + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + 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.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.6.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 3.4.3 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 estree-util-build-jsx@3.0.1: dependencies: @@ -2718,7 +4581,7 @@ snapshots: estree-util-scope@1.0.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 devlop: 1.1.0 estree-util-to-js@2.0.0: @@ -2727,165 +4590,278 @@ snapshots: astring: 1.9.0 source-map: 0.7.4 + estree-util-value-to-estree@3.3.3: + dependencies: + '@types/estree': 1.0.7 + estree-util-visit@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 '@types/unist': 3.0.3 - estree-walker@2.0.2: {} - estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 - eventemitter3@5.0.1: {} + esutils@2.0.3: {} - expand-template@2.0.3: {} - - expressive-code@0.40.2: + extend-shallow@2.0.1: dependencies: - '@expressive-code/core': 0.40.2 - '@expressive-code/plugin-frames': 0.40.2 - '@expressive-code/plugin-shiki': 0.40.2 - '@expressive-code/plugin-text-markers': 0.40.2 + is-extendable: 0.1.1 extend@3.0.2: {} - fast-fifo@1.3.2: {} + 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-glob@3.3.3: + 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.19.1: + dependencies: + reusify: 1.1.0 fdir@6.4.3(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 - flattie@1.1.1: {} + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 - fs-constants@1.0.0: {} + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 - fsevents@2.3.3: - optional: true + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 - get-east-asian-width@1.3.0: {} + flat-cache@3.2.0: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + rimraf: 3.0.2 - github-from-package@0.0.0: {} + flatted@3.3.3: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + framer-motion@12.9.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + motion-dom: 12.9.1 + motion-utils: 12.8.3 + tslib: 2.8.1 + optionalDependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + fs.realpath@1.0.0: {} + + fumadocs-core@15.2.7(@types/react@19.1.2)(next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@formatjs/intl-localematcher': 0.6.1 + '@orama/orama': 3.1.6 + '@shikijs/rehype': 3.2.2 + '@shikijs/transformers': 3.2.2 + github-slugger: 2.0.0 + hast-util-to-estree: 3.1.3 + hast-util-to-jsx-runtime: 2.3.6 + image-size: 2.0.2 + negotiator: 1.0.0 + react-remove-scroll: 2.6.3(@types/react@19.1.2)(react@19.1.0) + remark: 15.0.1 + remark-gfm: 4.0.1 + scroll-into-view-if-needed: 3.1.0 + shiki: 3.2.2 + unist-util-visit: 5.0.0 + optionalDependencies: + next: 15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + transitivePeerDependencies: + - '@types/react' + - supports-color + + fumadocs-mdx@11.6.0(acorn@8.14.1)(fumadocs-core@15.2.7(@types/react@19.1.2)(next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)): + dependencies: + '@mdx-js/mdx': 3.1.0(acorn@8.14.1) + '@standard-schema/spec': 1.0.0 + chokidar: 4.0.3 + cross-spawn: 7.0.6 + esbuild: 0.25.2 + estree-util-value-to-estree: 3.3.3 + fast-glob: 3.3.3 + fumadocs-core: 15.2.7(@types/react@19.1.2)(next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + gray-matter: 4.0.3 + lru-cache: 11.1.0 + next: 15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + picocolors: 1.1.1 + unist-util-visit: 5.0.0 + zod: 3.24.2 + transitivePeerDependencies: + - acorn + - supports-color + + fumadocs-ui@15.2.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.4): + dependencies: + '@radix-ui/react-accordion': 1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collapsible': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dialog': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-navigation-menu': 1.2.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popover': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-scroll-area': 1.2.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.0(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-tabs': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + class-variance-authority: 0.7.1 + fumadocs-core: 15.2.7(@types/react@19.1.2)(next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + lodash.merge: 4.6.2 + lucide-react: 0.487.0(react@19.1.0) + next: 15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next-themes: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + postcss-selector-parser: 7.1.0 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-medium-image-zoom: 5.2.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + tailwind-merge: 3.2.0 + optionalDependencies: + tailwindcss: 4.1.4 + transitivePeerDependencies: + - '@oramacloud/client' + - '@types/react' + - '@types/react-dom' + - algoliasearch + - supports-color + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + 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.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-nonce@1.0.1: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + 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.10.0: + dependencies: + resolve-pkg-maps: 1.0.0 github-slugger@2.0.0: {} - h3@1.15.1: + glob-parent@5.1.2: dependencies: - cookie-es: 1.2.2 - crossws: 0.3.4 - defu: 6.1.4 - destr: 2.0.3 - iron-webcrypto: 1.2.1 - node-mock-http: 1.0.0 - radix3: 1.1.2 - ufo: 1.5.4 - uncrypto: 0.1.3 + is-glob: 4.0.3 - hast-util-embedded@3.0.0: + glob-parent@6.0.2: dependencies: - '@types/hast': 3.0.4 - hast-util-is-element: 3.0.0 + is-glob: 4.0.3 - hast-util-format@1.1.0: + glob@7.2.3: dependencies: - '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-minify-whitespace: 1.0.1 - hast-util-phrasing: 3.0.1 - hast-util-whitespace: 3.0.0 - html-whitespace-sensitive-tag-names: 3.0.1 - unist-util-visit-parents: 6.0.1 + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 - hast-util-from-html@2.0.3: + globals@13.24.0: dependencies: - '@types/hast': 3.0.4 - devlop: 1.1.0 - hast-util-from-parse5: 8.0.3 - parse5: 7.2.1 - vfile: 6.0.3 - vfile-message: 4.0.2 + type-fest: 0.20.2 - hast-util-from-parse5@8.0.3: + globalthis@1.0.4: dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - devlop: 1.1.0 - hastscript: 9.0.1 - property-information: 7.0.0 - vfile: 6.0.3 - vfile-location: 5.0.3 - web-namespaces: 2.0.1 + define-properties: 1.2.1 + gopd: 1.2.0 - hast-util-has-property@3.0.0: - dependencies: - '@types/hast': 3.0.4 + gopd@1.2.0: {} - hast-util-is-body-ok-link@3.0.1: - dependencies: - '@types/hast': 3.0.4 + graceful-fs@4.2.11: {} - hast-util-is-element@3.0.0: - dependencies: - '@types/hast': 3.0.4 + graphemer@1.4.0: {} - hast-util-minify-whitespace@1.0.1: + gray-matter@4.0.3: dependencies: - '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-is-element: 3.0.0 - hast-util-whitespace: 3.0.0 - unist-util-is: 6.0.0 + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 - hast-util-parse-selector@4.0.0: - dependencies: - '@types/hast': 3.0.4 + has-bigints@1.1.0: {} - hast-util-phrasing@3.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-has-property: 3.0.0 - hast-util-is-body-ok-link: 3.0.1 - hast-util-is-element: 3.0.0 + has-flag@4.0.0: {} - hast-util-raw@9.1.0: + has-property-descriptors@1.0.2: dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - '@ungap/structured-clone': 1.3.0 - hast-util-from-parse5: 8.0.3 - hast-util-to-parse5: 8.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - parse5: 7.2.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - web-namespaces: 2.0.1 - zwitch: 2.0.4 + es-define-property: 1.0.1 - hast-util-select@6.0.4: + has-proto@1.2.0: dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - bcp-47-match: 2.0.3 - comma-separated-tokens: 2.0.3 - css-selector-parser: 3.0.5 - devlop: 1.1.0 - direction: 2.0.1 - hast-util-has-property: 3.0.0 - hast-util-to-string: 3.0.1 - hast-util-whitespace: 3.0.0 - nth-check: 2.1.1 - property-information: 7.0.0 - space-separated-tokens: 2.0.2 - unist-util-visit: 5.0.0 - zwitch: 2.0.4 + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 hast-util-to-estree@3.1.3: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -2920,7 +4896,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.6: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 @@ -2938,62 +4914,41 @@ snapshots: transitivePeerDependencies: - supports-color - hast-util-to-parse5@8.0.0: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - hast-util-to-string@3.0.1: dependencies: '@types/hast': 3.0.4 - hast-util-to-text@4.0.2: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - hast-util-is-element: 3.0.0 - unist-util-find-after: 5.0.0 - hast-util-whitespace@3.0.0: dependencies: '@types/hast': 3.0.4 - hastscript@9.0.1: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 4.0.0 - property-information: 7.0.0 - space-separated-tokens: 2.0.2 - - html-escaper@3.0.3: {} - html-void-elements@3.0.0: {} - html-whitespace-sensitive-tag-names@3.0.1: {} + ignore@5.3.2: {} - http-cache-semantics@4.1.1: {} + image-size@2.0.2: {} - i18next@23.16.8: + import-fresh@3.3.1: dependencies: - '@babel/runtime': 7.26.10 + parent-module: 1.0.1 + resolve-from: 4.0.0 - ieee754@1.2.1: {} + imurmurhash@0.1.4: {} - import-meta-resolve@4.1.0: {} + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 inherits@2.0.4: {} - ini@1.3.8: {} - inline-style-parser@0.2.4: {} - iron-webcrypto@1.2.1: {} + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 is-alphabetical@2.0.1: {} @@ -3002,73 +4957,260 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - is-arrayish@0.3.2: {} + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.3.2: + optional: true + + 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.7.1 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + 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-decimal@2.0.1: {} - is-docker@3.0.0: {} + is-extendable@0.1.1: {} - is-fullwidth-code-point@3.0.0: {} + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + 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-hexadecimal@2.0.1: {} - is-inside-container@1.0.0: + is-map@2.0.3: {} + + is-number-object@1.1.1: dependencies: - is-docker: 3.0.0 + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} is-plain-obj@4.1.0: {} - is-wsl@3.1.0: + is-regex@1.2.1: dependencies: - is-inside-container: 1.0.0 + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + 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.19 + + 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.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jiti@2.4.2: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 js-yaml@4.1.0: dependencies: argparse: 2.0.1 - kleur@3.0.3: {} + json-buffer@3.0.1: {} - kleur@4.1.5: {} + json-schema-traverse@0.4.1: {} - klona@2.0.6: {} + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + 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 + + kind-of@6.0.3: {} + + 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-darwin-arm64@1.29.2: + optional: true + + lightningcss-darwin-x64@1.29.2: + optional: true + + lightningcss-freebsd-x64@1.29.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.29.2: + optional: true + + lightningcss-linux-arm64-gnu@1.29.2: + optional: true + + lightningcss-linux-arm64-musl@1.29.2: + optional: true + + lightningcss-linux-x64-gnu@1.29.2: + optional: true + + lightningcss-linux-x64-musl@1.29.2: + optional: true + + lightningcss-win32-arm64-msvc@1.29.2: + optional: true + + lightningcss-win32-x64-msvc@1.29.2: + optional: true + + lightningcss@1.29.2: + dependencies: + detect-libc: 2.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.29.2 + lightningcss-darwin-x64: 1.29.2 + lightningcss-freebsd-x64: 1.29.2 + lightningcss-linux-arm-gnueabihf: 1.29.2 + lightningcss-linux-arm64-gnu: 1.29.2 + lightningcss-linux-arm64-musl: 1.29.2 + lightningcss-linux-x64-gnu: 1.29.2 + lightningcss-linux-x64-musl: 1.29.2 + lightningcss-win32-arm64-msvc: 1.29.2 + lightningcss-win32-x64-msvc: 1.29.2 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} longest-streak@3.1.0: {} - lru-cache@10.4.3: {} - - magic-string@0.30.17: + loose-envify@1.4.0: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + js-tokens: 4.0.0 - magicast@0.3.5: + lru-cache@11.1.0: {} + + lucide-react@0.487.0(react@19.1.0): dependencies: - '@babel/parser': 7.26.10 - '@babel/types': 7.26.10 - source-map-js: 1.2.1 + react: 19.1.0 + + lucide-react@0.488.0(react@19.1.0): + dependencies: + react: 19.1.0 markdown-extensions@2.0.0: {} markdown-table@3.0.4: {} - mdast-util-definitions@6.0.0: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - unist-util-visit: 5.0.0 - - mdast-util-directive@3.1.0: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 - stringify-entities: 4.0.4 - unist-util-visit-parents: 6.0.1 - transitivePeerDependencies: - - supports-color + math-intrinsics@1.1.0: {} mdast-util-find-and-replace@3.0.2: dependencies: @@ -3233,6 +5375,8 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + merge2@1.4.1: {} + micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.1.0 @@ -3252,16 +5396,6 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - micromark-extension-directive@3.0.2: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - parse-entities: 4.0.2 - micromark-extension-gfm-autolink-literal@2.1.0: dependencies: micromark-util-character: 2.1.1 @@ -3320,27 +5454,26 @@ snapshots: micromark-util-combine-extensions: 2.0.1 micromark-util-types: 2.0.2 - micromark-extension-mdx-expression@3.0.0: + micromark-extension-mdx-expression@3.0.1: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 devlop: 1.1.0 - micromark-factory-mdx-expression: 2.0.2 + micromark-factory-mdx-expression: 2.0.3 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.2 + micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - micromark-extension-mdx-jsx@3.0.1: + micromark-extension-mdx-jsx@3.0.2: dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.2 + micromark-factory-mdx-expression: 2.0.3 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.2 + micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 vfile-message: 4.0.2 @@ -3351,11 +5484,11 @@ snapshots: micromark-extension-mdxjs-esm@3.0.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.2 + micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 @@ -3365,8 +5498,8 @@ snapshots: dependencies: acorn: 8.14.1 acorn-jsx: 5.3.2(acorn@8.14.1) - micromark-extension-mdx-expression: 3.0.0 - micromark-extension-mdx-jsx: 3.0.1 + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 micromark-extension-mdxjs-esm: 3.0.0 micromark-util-combine-extensions: 2.0.1 @@ -3385,13 +5518,13 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - micromark-factory-mdx-expression@2.0.2: + micromark-factory-mdx-expression@2.0.3: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 devlop: 1.1.0 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.2 + micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 @@ -3449,10 +5582,9 @@ snapshots: micromark-util-encode@2.0.1: {} - micromark-util-events-to-acorn@2.0.2: + micromark-util-events-to-acorn@2.0.3: dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 @@ -3509,78 +5641,154 @@ snapshots: transitivePeerDependencies: - supports-color - mimic-response@3.1.0: {} + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 minimist@1.2.8: {} - mkdirp-classic@0.5.3: {} + motion-dom@12.9.1: + dependencies: + motion-utils: 12.8.3 - mrmime@2.0.1: {} + motion-utils@12.8.3: {} + + motion@12.9.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + framer-motion: 12.9.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + tslib: 2.8.1 + optionalDependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) ms@2.1.3: {} - nanoid@3.3.9: {} + nanoid@3.3.11: {} - napi-build-utils@2.0.0: {} + natural-compare@1.4.0: {} - neotraverse@0.6.18: {} + negotiator@1.0.0: {} - nlcst-to-string@4.0.0: + next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@types/nlcst': 2.0.3 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) - node-abi@3.74.0: + next@15.3.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - semver: 7.7.1 + '@next/env': 15.3.0 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 + busboy: 1.6.0 + caniuse-lite: 1.0.30001714 + postcss: 8.4.31 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + styled-jsx: 5.1.6(react@19.1.0) + optionalDependencies: + '@next/swc-darwin-arm64': 15.3.0 + '@next/swc-darwin-x64': 15.3.0 + '@next/swc-linux-arm64-gnu': 15.3.0 + '@next/swc-linux-arm64-musl': 15.3.0 + '@next/swc-linux-x64-gnu': 15.3.0 + '@next/swc-linux-x64-musl': 15.3.0 + '@next/swc-win32-arm64-msvc': 15.3.0 + '@next/swc-win32-x64-msvc': 15.3.0 + sharp: 0.34.1 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros - node-addon-api@6.1.0: {} + object-assign@4.1.1: {} - node-fetch-native@1.6.6: {} + object-inspect@1.13.4: {} - node-mock-http@1.0.0: {} + object-keys@1.1.1: {} - normalize-path@3.0.0: {} - - nth-check@2.1.1: + object.assign@4.1.7: dependencies: - boolbase: 1.0.0 + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 - ofetch@1.4.1: + object.entries@1.1.9: dependencies: - destr: 2.0.3 - node-fetch-native: 1.6.6 - ufo: 1.5.4 + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 once@1.4.0: dependencies: wrappy: 1.0.2 - oniguruma-to-es@2.3.0: + oniguruma-parser@0.11.2: {} + + oniguruma-to-es@4.2.0: dependencies: emoji-regex-xs: 1.0.0 - regex: 5.1.1 - regex-recursion: 5.1.1 + oniguruma-parser: 0.11.2 + regex: 6.0.1 + regex-recursion: 6.0.2 - p-limit@6.2.0: + optionator@0.9.4: dependencies: - yocto-queue: 1.2.0 + 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 - p-queue@8.1.0: + own-keys@1.0.1: dependencies: - eventemitter3: 5.0.1 - p-timeout: 6.1.4 + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 - p-timeout@6.1.4: {} + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 - package-manager-detector@1.0.0: {} + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 - pagefind@1.3.0: - optionalDependencies: - '@pagefind/darwin-arm64': 1.3.0 - '@pagefind/darwin-x64': 1.3.0 - '@pagefind/linux-arm64': 1.3.0 - '@pagefind/linux-x64': 1.3.0 - '@pagefind/windows-x64': 1.3.0 + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 parse-entities@4.0.2: dependencies: @@ -3592,18 +5800,13 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - parse-latin@7.0.0: - dependencies: - '@types/nlcst': 2.0.3 - '@types/unist': 3.0.3 - nlcst-to-string: 4.0.0 - unist-util-modify-children: 4.0.0 - unist-util-visit-children: 3.0.0 - vfile: 6.0.3 + path-exists@4.0.0: {} - parse5@7.2.1: - dependencies: - entities: 4.5.0 + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} picocolors@1.1.1: {} @@ -3611,73 +5814,85 @@ snapshots: picomatch@4.0.2: {} - postcss-nested@6.2.0(postcss@8.5.3): - dependencies: - postcss: 8.5.3 - postcss-selector-parser: 6.1.2 + possible-typed-array-names@1.1.0: {} - postcss-selector-parser@6.1.2: + postcss-selector-parser@7.1.0: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.3: + postcss@8.4.31: dependencies: - nanoid: 3.3.9 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 - prebuild-install@7.1.3: + postcss@8.5.3: dependencies: - detect-libc: 2.0.3 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 2.0.0 - node-abi: 3.74.0 - pump: 3.0.2 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.2 - tunnel-agent: 0.6.0 + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 - prismjs@1.30.0: {} + prelude-ls@1.2.1: {} - prompts@2.4.2: + prop-types@15.8.1: dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - - property-information@6.5.0: {} + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 property-information@7.0.0: {} - pump@3.0.2: - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 + punycode@2.3.1: {} - radix3@1.1.2: {} + queue-microtask@1.2.3: {} - rc@1.2.8: + react-dom@19.1.0(react@19.1.0): dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 + react: 19.1.0 + scheduler: 0.26.0 - readable-stream@3.6.2: + react-is@16.13.1: {} + + react-medium-image-zoom@5.2.14(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + react-remove-scroll-bar@2.3.8(@types/react@19.1.2)(react@19.1.0): + dependencies: + react: 19.1.0 + react-style-singleton: 2.2.3(@types/react@19.1.2)(react@19.1.0) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.2 + + react-remove-scroll@2.6.3(@types/react@19.1.2)(react@19.1.0): + dependencies: + react: 19.1.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.2)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.2)(react@19.1.0) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.1.2)(react@19.1.0) + use-sidecar: 1.1.3(@types/react@19.1.2)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + + react-style-singleton@2.2.3(@types/react@19.1.2)(react@19.1.0): + dependencies: + get-nonce: 1.0.1 + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.2 + + react@19.1.0: {} readdirp@4.1.2: {} recma-build-jsx@1.0.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 estree-util-build-jsx: 3.0.1 vfile: 6.0.3 @@ -3693,82 +5908,56 @@ snapshots: recma-parse@1.0.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 esast-util-from-js: 2.0.1 unified: 11.0.5 vfile: 6.0.3 recma-stringify@1.0.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 estree-util-to-js: 2.0.0 unified: 11.0.5 vfile: 6.0.3 - regenerator-runtime@0.14.1: {} - - regex-recursion@5.1.1: + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regex-recursion@6.0.2: dependencies: - regex: 5.1.1 regex-utilities: 2.3.0 regex-utilities@2.3.0: {} - regex@5.1.1: + regex@6.0.1: dependencies: regex-utilities: 2.3.0 - rehype-expressive-code@0.40.2: + regexp.prototype.flags@1.5.4: dependencies: - expressive-code: 0.40.2 - - rehype-format@5.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-format: 1.1.0 - - rehype-parse@9.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-from-html: 2.0.3 - unified: 11.0.5 - - rehype-raw@7.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-raw: 9.1.0 - vfile: 6.0.3 + call-bind: 1.0.8 + 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 rehype-recma@1.0.0: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 '@types/hast': 3.0.4 hast-util-to-estree: 3.1.3 transitivePeerDependencies: - supports-color - rehype-stringify@10.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - unified: 11.0.5 - - rehype@13.0.2: - dependencies: - '@types/hast': 3.0.4 - rehype-parse: 9.0.1 - rehype-stringify: 10.0.1 - unified: 11.0.5 - - remark-directive@3.0.1: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-directive: 3.1.0 - micromark-extension-directive: 3.0.2 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - remark-gfm@4.0.1: dependencies: '@types/mdast': 4.0.4 @@ -3796,7 +5985,7 @@ snapshots: transitivePeerDependencies: - supports-color - remark-rehype@11.1.1: + remark-rehype@11.1.2: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 @@ -3804,148 +5993,180 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 - remark-smartypants@3.0.2: - dependencies: - retext: 9.0.0 - retext-smartypants: 6.2.0 - unified: 11.0.5 - unist-util-visit: 5.0.0 - remark-stringify@11.0.0: dependencies: '@types/mdast': 4.0.4 mdast-util-to-markdown: 2.1.2 unified: 11.0.5 - retext-latin@4.0.0: + remark@15.0.1: dependencies: - '@types/nlcst': 2.0.3 - parse-latin: 7.0.0 + '@types/mdast': 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 unified: 11.0.5 + transitivePeerDependencies: + - supports-color - retext-smartypants@6.2.0: + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve@1.22.10: dependencies: - '@types/nlcst': 2.0.3 - nlcst-to-string: 4.0.0 - unist-util-visit: 5.0.0 + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 - retext-stringify@4.0.0: + resolve@2.0.0-next.5: dependencies: - '@types/nlcst': 2.0.3 - nlcst-to-string: 4.0.0 - unified: 11.0.5 + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 - retext@9.0.0: + reusify@1.1.0: {} + + rimraf@3.0.2: dependencies: - '@types/nlcst': 2.0.3 - retext-latin: 4.0.0 - retext-stringify: 4.0.0 - unified: 11.0.5 + glob: 7.2.3 - rollup@4.35.0: + run-parallel@1.2.0: dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.35.0 - '@rollup/rollup-android-arm64': 4.35.0 - '@rollup/rollup-darwin-arm64': 4.35.0 - '@rollup/rollup-darwin-x64': 4.35.0 - '@rollup/rollup-freebsd-arm64': 4.35.0 - '@rollup/rollup-freebsd-x64': 4.35.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.35.0 - '@rollup/rollup-linux-arm-musleabihf': 4.35.0 - '@rollup/rollup-linux-arm64-gnu': 4.35.0 - '@rollup/rollup-linux-arm64-musl': 4.35.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.35.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.35.0 - '@rollup/rollup-linux-riscv64-gnu': 4.35.0 - '@rollup/rollup-linux-s390x-gnu': 4.35.0 - '@rollup/rollup-linux-x64-gnu': 4.35.0 - '@rollup/rollup-linux-x64-musl': 4.35.0 - '@rollup/rollup-win32-arm64-msvc': 4.35.0 - '@rollup/rollup-win32-ia32-msvc': 4.35.0 - '@rollup/rollup-win32-x64-msvc': 4.35.0 - fsevents: 2.3.3 + queue-microtask: 1.2.3 - safe-buffer@5.2.1: {} + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 - sax@1.4.1: {} + 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.26.0: {} + + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + + section-matter@1.0.0: + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + + semver@6.3.1: {} semver@7.7.1: {} - sharp@0.32.6: + set-function-length@1.2.2: dependencies: - color: 4.2.3 - detect-libc: 2.0.3 - node-addon-api: 6.1.0 - prebuild-install: 7.1.3 - semver: 7.7.1 - simple-get: 4.0.1 - tar-fs: 3.0.8 - tunnel-agent: 0.6.0 - transitivePeerDependencies: - - bare-buffer + 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 - sharp@0.33.5: + 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.1 + + sharp@0.34.1: dependencies: color: 4.2.3 detect-libc: 2.0.3 semver: 7.7.1 optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 + '@img/sharp-darwin-arm64': 0.34.1 + '@img/sharp-darwin-x64': 0.34.1 + '@img/sharp-libvips-darwin-arm64': 1.1.0 + '@img/sharp-libvips-darwin-x64': 1.1.0 + '@img/sharp-libvips-linux-arm': 1.1.0 + '@img/sharp-libvips-linux-arm64': 1.1.0 + '@img/sharp-libvips-linux-ppc64': 1.1.0 + '@img/sharp-libvips-linux-s390x': 1.1.0 + '@img/sharp-libvips-linux-x64': 1.1.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + '@img/sharp-linux-arm': 0.34.1 + '@img/sharp-linux-arm64': 0.34.1 + '@img/sharp-linux-s390x': 0.34.1 + '@img/sharp-linux-x64': 0.34.1 + '@img/sharp-linuxmusl-arm64': 0.34.1 + '@img/sharp-linuxmusl-x64': 0.34.1 + '@img/sharp-wasm32': 0.34.1 + '@img/sharp-win32-ia32': 0.34.1 + '@img/sharp-win32-x64': 0.34.1 optional: true - shiki@1.29.2: + shebang-command@2.0.0: dependencies: - '@shikijs/core': 1.29.2 - '@shikijs/engine-javascript': 1.29.2 - '@shikijs/engine-oniguruma': 1.29.2 - '@shikijs/langs': 1.29.2 - '@shikijs/themes': 1.29.2 - '@shikijs/types': 1.29.2 + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shiki@3.2.2: + dependencies: + '@shikijs/core': 3.2.2 + '@shikijs/engine-javascript': 3.2.2 + '@shikijs/engine-oniguruma': 3.2.2 + '@shikijs/langs': 3.2.2 + '@shikijs/themes': 3.2.2 + '@shikijs/types': 3.2.2 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - simple-concat@1.0.1: {} - - simple-get@4.0.1: + side-channel-list@1.0.0: dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 + 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.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 - - sisteransi@1.0.5: {} - - sitemap@8.0.0: - dependencies: - '@types/node': 17.0.45 - '@types/sax': 1.2.7 - arg: 5.0.2 - sax: 1.4.1 - - smol-toml@1.3.1: {} + optional: true source-map-js@1.2.1: {} @@ -3953,30 +6174,61 @@ snapshots: space-separated-tokens@2.0.2: {} - stream-replace-string@2.0.0: {} + sprintf-js@1.0.3: {} - streamx@2.22.0: - dependencies: - fast-fifo: 1.3.2 - text-decoder: 1.2.3 - optionalDependencies: - bare-events: 2.5.4 + stable-hash@0.0.5: {} - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 + streamsearch@1.1.0: {} - string-width@7.2.0: + string.prototype.includes@2.0.1: dependencies: - emoji-regex: 10.4.0 - get-east-asian-width: 1.3.0 - strip-ansi: 7.1.0 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 - string_decoder@1.3.0: + string.prototype.matchall@4.0.12: dependencies: - safe-buffer: 5.2.1 + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + 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.0 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.9 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 stringify-entities@4.0.4: dependencies: @@ -3987,11 +6239,11 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.1.0 + strip-bom-string@1.0.0: {} - strip-json-comments@2.0.1: {} + strip-bom@3.0.0: {} + + strip-json-comments@3.1.1: {} style-to-js@1.1.16: dependencies: @@ -4001,72 +6253,102 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - tar-fs@2.1.2: + styled-jsx@5.1.6(react@19.1.0): dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.2 - tar-stream: 2.2.0 + client-only: 0.0.1 + react: 19.1.0 - tar-fs@3.0.8: + supports-color@7.2.0: dependencies: - pump: 3.0.2 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 4.0.1 - bare-path: 3.0.0 - transitivePeerDependencies: - - bare-buffer + has-flag: 4.0.0 - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 + supports-preserve-symlinks-flag@1.0.0: {} - tar-stream@3.1.7: - dependencies: - b4a: 1.6.7 - fast-fifo: 1.3.2 - streamx: 2.22.0 + tailwind-merge@3.2.0: {} - text-decoder@1.2.3: - dependencies: - b4a: 1.6.7 + tailwindcss@4.1.4: {} - tinyexec@0.3.2: {} + tapable@2.2.1: {} + + text-table@0.2.0: {} tinyglobby@0.2.12: dependencies: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + trim-lines@3.0.1: {} trough@2.2.0: {} - tsconfck@3.1.5(typescript@5.8.2): - optionalDependencies: - typescript: 5.8.2 - - tslib@2.8.1: - optional: true - - tunnel-agent@0.6.0: + ts-api-utils@2.1.0(typescript@5.8.3): dependencies: - safe-buffer: 5.2.1 + typescript: 5.8.3 - type-fest@4.37.0: {} + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 - typescript@5.8.2: {} + tslib@2.8.1: {} - ufo@1.5.4: {} + tw-animate-css@1.2.8: {} - ultrahtml@1.5.3: {} + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 - uncrypto@0.1.3: {} + type-fest@0.20.2: {} + + 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.8 + 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.8 + 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.7: + dependencies: + call-bind: 1.0.8 + 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@5.8.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@6.21.0: {} unified@11.0.5: dependencies: @@ -4078,20 +6360,10 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 - unist-util-find-after@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-modify-children@4.0.0: - dependencies: - '@types/unist': 3.0.3 - array-iterate: 2.0.1 - unist-util-position-from-estree@2.0.0: dependencies: '@types/unist': 3.0.3 @@ -4100,19 +6372,10 @@ snapshots: dependencies: '@types/unist': 3.0.3 - unist-util-remove-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-visit: 5.0.0 - unist-util-stringify-position@4.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-visit-children@3.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-visit-parents@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -4124,24 +6387,46 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - unstorage@1.15.0: + unrs-resolver@1.5.0: + optionalDependencies: + '@unrs/resolver-binding-darwin-arm64': 1.5.0 + '@unrs/resolver-binding-darwin-x64': 1.5.0 + '@unrs/resolver-binding-freebsd-x64': 1.5.0 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.5.0 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.5.0 + '@unrs/resolver-binding-linux-arm64-gnu': 1.5.0 + '@unrs/resolver-binding-linux-arm64-musl': 1.5.0 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.5.0 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.5.0 + '@unrs/resolver-binding-linux-s390x-gnu': 1.5.0 + '@unrs/resolver-binding-linux-x64-gnu': 1.5.0 + '@unrs/resolver-binding-linux-x64-musl': 1.5.0 + '@unrs/resolver-binding-wasm32-wasi': 1.5.0 + '@unrs/resolver-binding-win32-arm64-msvc': 1.5.0 + '@unrs/resolver-binding-win32-ia32-msvc': 1.5.0 + '@unrs/resolver-binding-win32-x64-msvc': 1.5.0 + + uri-js@4.4.1: dependencies: - anymatch: 3.1.3 - chokidar: 4.0.3 - destr: 2.0.3 - h3: 1.15.1 - lru-cache: 10.4.3 - node-fetch-native: 1.6.6 - ofetch: 1.4.1 - ufo: 1.5.4 + punycode: 2.3.1 + + use-callback-ref@1.3.3(@types/react@19.1.2)(react@19.1.0): + dependencies: + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.2 + + use-sidecar@1.1.3(@types/react@19.1.2)(react@19.1.0): + dependencies: + detect-node-es: 1.1.0 + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.2 util-deprecate@1.0.2: {} - vfile-location@5.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile: 6.0.3 - vfile-message@4.0.2: dependencies: '@types/unist': 3.0.3 @@ -4152,54 +6437,56 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite@6.2.2: + which-boxed-primitive@1.1.1: dependencies: - esbuild: 0.25.1 - postcss: 8.5.3 - rollup: 4.35.0 - optionalDependencies: - fsevents: 2.3.3 + 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 - vitefu@1.0.6(vite@6.2.2): - optionalDependencies: - vite: 6.2.2 - - web-namespaces@2.0.1: {} - - which-pm-runs@1.1.0: {} - - widest-line@5.0.0: + which-builtin-type@1.2.1: dependencies: - string-width: 7.2.0 + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + 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.0 + 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.19 - wrap-ansi@9.0.0: + which-collection@1.0.2: dependencies: - ansi-styles: 6.2.1 - string-width: 7.2.0 - strip-ansi: 7.1.0 + 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.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + 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: {} wrappy@1.0.2: {} - xxhash-wasm@1.1.0: {} - - yargs-parser@21.1.1: {} - - yocto-queue@1.2.0: {} - - yocto-spinner@0.2.1: - dependencies: - yoctocolors: 2.1.1 - - yoctocolors@2.1.1: {} - - zod-to-json-schema@3.24.3(zod@3.24.2): - dependencies: - zod: 3.24.2 - - zod-to-ts@1.2.0(typescript@5.8.2)(zod@3.24.2): - dependencies: - typescript: 5.8.2 - zod: 3.24.2 + yocto-queue@0.1.0: {} zod@3.24.2: {} diff --git a/apps/docs/postcss.config.mjs b/apps/docs/postcss.config.mjs new file mode 100644 index 0000000..a34a3d5 --- /dev/null +++ b/apps/docs/postcss.config.mjs @@ -0,0 +1,5 @@ +export default { + plugins: { + '@tailwindcss/postcss': {}, + }, +}; diff --git a/apps/docs/public/api-docs/scalar.png b/apps/docs/public/assets/v1/api-docs/scalar.png similarity index 100% rename from apps/docs/public/api-docs/scalar.png rename to apps/docs/public/assets/v1/api-docs/scalar.png diff --git a/apps/docs/public/api-docs/swagger.png b/apps/docs/public/assets/v1/api-docs/swagger.png similarity index 100% rename from apps/docs/public/api-docs/swagger.png rename to apps/docs/public/assets/v1/api-docs/swagger.png diff --git a/apps/docs/public/developers/issues-tab.png b/apps/docs/public/assets/v1/developers/issues-tab.png similarity index 100% rename from apps/docs/public/developers/issues-tab.png rename to apps/docs/public/assets/v1/developers/issues-tab.png diff --git a/apps/docs/public/developers/new-issue-btn.png b/apps/docs/public/assets/v1/developers/new-issue-btn.png similarity index 100% rename from apps/docs/public/developers/new-issue-btn.png rename to apps/docs/public/assets/v1/developers/new-issue-btn.png diff --git a/apps/docs/public/developers/new-issue-form.png b/apps/docs/public/assets/v1/developers/new-issue-form.png similarity index 100% rename from apps/docs/public/developers/new-issue-form.png rename to apps/docs/public/assets/v1/developers/new-issue-form.png diff --git a/apps/docs/public/general/architecture.png b/apps/docs/public/assets/v1/general/architecture.png similarity index 100% rename from apps/docs/public/general/architecture.png rename to apps/docs/public/assets/v1/general/architecture.png diff --git a/apps/docs/public/general/banner.png b/apps/docs/public/assets/v1/general/banner.png similarity index 100% rename from apps/docs/public/general/banner.png rename to apps/docs/public/assets/v1/general/banner.png diff --git a/apps/docs/public/general/lp.png b/apps/docs/public/assets/v1/general/lp.png similarity index 100% rename from apps/docs/public/general/lp.png rename to apps/docs/public/assets/v1/general/lp.png diff --git a/apps/docs/public/main/files/actions-dropdown.png b/apps/docs/public/assets/v1/main/files/actions-dropdown.png similarity index 100% rename from apps/docs/public/main/files/actions-dropdown.png rename to apps/docs/public/assets/v1/main/files/actions-dropdown.png diff --git a/apps/docs/public/main/files/edit-modal.png b/apps/docs/public/assets/v1/main/files/edit-modal.png similarity index 100% rename from apps/docs/public/main/files/edit-modal.png rename to apps/docs/public/assets/v1/main/files/edit-modal.png diff --git a/apps/docs/public/main/files/my-files-card.png b/apps/docs/public/assets/v1/main/files/my-files-card.png similarity index 100% rename from apps/docs/public/main/files/my-files-card.png rename to apps/docs/public/assets/v1/main/files/my-files-card.png diff --git a/apps/docs/public/main/files/my-files-page.png b/apps/docs/public/assets/v1/main/files/my-files-page.png similarity index 100% rename from apps/docs/public/main/files/my-files-page.png rename to apps/docs/public/assets/v1/main/files/my-files-page.png diff --git a/apps/docs/public/main/language/language-selector.png b/apps/docs/public/assets/v1/main/language/language-selector.png similarity index 100% rename from apps/docs/public/main/language/language-selector.png rename to apps/docs/public/assets/v1/main/language/language-selector.png diff --git a/apps/docs/public/main/shares/actions-column.png b/apps/docs/public/assets/v1/main/shares/actions-column.png similarity index 100% rename from apps/docs/public/main/shares/actions-column.png rename to apps/docs/public/assets/v1/main/shares/actions-column.png diff --git a/apps/docs/public/main/shares/copy-link-modal.png b/apps/docs/public/assets/v1/main/shares/copy-link-modal.png similarity index 100% rename from apps/docs/public/main/shares/copy-link-modal.png rename to apps/docs/public/assets/v1/main/shares/copy-link-modal.png diff --git a/apps/docs/public/main/shares/create-first-share.png b/apps/docs/public/assets/v1/main/shares/create-first-share.png similarity index 100% rename from apps/docs/public/main/shares/create-first-share.png rename to apps/docs/public/assets/v1/main/shares/create-first-share.png diff --git a/apps/docs/public/main/shares/create-share-modal.png b/apps/docs/public/assets/v1/main/shares/create-share-modal.png similarity index 100% rename from apps/docs/public/main/shares/create-share-modal.png rename to apps/docs/public/assets/v1/main/shares/create-share-modal.png diff --git a/apps/docs/public/main/shares/delete-share-modal.png b/apps/docs/public/assets/v1/main/shares/delete-share-modal.png similarity index 100% rename from apps/docs/public/main/shares/delete-share-modal.png rename to apps/docs/public/assets/v1/main/shares/delete-share-modal.png diff --git a/apps/docs/public/main/shares/dropdown-with-copy.png b/apps/docs/public/assets/v1/main/shares/dropdown-with-copy.png similarity index 100% rename from apps/docs/public/main/shares/dropdown-with-copy.png rename to apps/docs/public/assets/v1/main/shares/dropdown-with-copy.png diff --git a/apps/docs/public/main/shares/edit-share-modal.png b/apps/docs/public/assets/v1/main/shares/edit-share-modal.png similarity index 100% rename from apps/docs/public/main/shares/edit-share-modal.png rename to apps/docs/public/assets/v1/main/shares/edit-share-modal.png diff --git a/apps/docs/public/main/shares/generate-share-link-modal.png b/apps/docs/public/assets/v1/main/shares/generate-share-link-modal.png similarity index 100% rename from apps/docs/public/main/shares/generate-share-link-modal.png rename to apps/docs/public/assets/v1/main/shares/generate-share-link-modal.png diff --git a/apps/docs/public/main/shares/manage-files-modal.png b/apps/docs/public/assets/v1/main/shares/manage-files-modal.png similarity index 100% rename from apps/docs/public/main/shares/manage-files-modal.png rename to apps/docs/public/assets/v1/main/shares/manage-files-modal.png diff --git a/apps/docs/public/main/shares/manage-recipients-modal.png b/apps/docs/public/assets/v1/main/shares/manage-recipients-modal.png similarity index 100% rename from apps/docs/public/main/shares/manage-recipients-modal.png rename to apps/docs/public/assets/v1/main/shares/manage-recipients-modal.png diff --git a/apps/docs/public/main/shares/my-shares-card.png b/apps/docs/public/assets/v1/main/shares/my-shares-card.png similarity index 100% rename from apps/docs/public/main/shares/my-shares-card.png rename to apps/docs/public/assets/v1/main/shares/my-shares-card.png diff --git a/apps/docs/public/main/shares/my-shares-page.png b/apps/docs/public/assets/v1/main/shares/my-shares-page.png similarity index 100% rename from apps/docs/public/main/shares/my-shares-page.png rename to apps/docs/public/assets/v1/main/shares/my-shares-page.png diff --git a/apps/docs/public/main/shares/new-share-btn.png b/apps/docs/public/assets/v1/main/shares/new-share-btn.png similarity index 100% rename from apps/docs/public/main/shares/new-share-btn.png rename to apps/docs/public/assets/v1/main/shares/new-share-btn.png diff --git a/apps/docs/public/main/shares/recent-shares-filled.png b/apps/docs/public/assets/v1/main/shares/recent-shares-filled.png similarity index 100% rename from apps/docs/public/main/shares/recent-shares-filled.png rename to apps/docs/public/assets/v1/main/shares/recent-shares-filled.png diff --git a/apps/docs/public/main/shares/share-details-modal.png b/apps/docs/public/assets/v1/main/shares/share-details-modal.png similarity index 100% rename from apps/docs/public/main/shares/share-details-modal.png rename to apps/docs/public/assets/v1/main/shares/share-details-modal.png diff --git a/apps/docs/public/main/shares/share-screen.png b/apps/docs/public/assets/v1/main/shares/share-screen.png similarity index 100% rename from apps/docs/public/main/shares/share-screen.png rename to apps/docs/public/assets/v1/main/shares/share-screen.png diff --git a/apps/docs/public/main/shares/share-section.png b/apps/docs/public/assets/v1/main/shares/share-section.png similarity index 100% rename from apps/docs/public/main/shares/share-section.png rename to apps/docs/public/assets/v1/main/shares/share-section.png diff --git a/apps/docs/public/main/shares/shares-table.png b/apps/docs/public/assets/v1/main/shares/shares-table.png similarity index 100% rename from apps/docs/public/main/shares/shares-table.png rename to apps/docs/public/assets/v1/main/shares/shares-table.png diff --git a/apps/docs/public/main/shares/view-all-button.png b/apps/docs/public/assets/v1/main/shares/view-all-button.png similarity index 100% rename from apps/docs/public/main/shares/view-all-button.png rename to apps/docs/public/assets/v1/main/shares/view-all-button.png diff --git a/apps/docs/public/main/smtp/closed-card.png b/apps/docs/public/assets/v1/main/smtp/closed-card.png similarity index 100% rename from apps/docs/public/main/smtp/closed-card.png rename to apps/docs/public/assets/v1/main/smtp/closed-card.png diff --git a/apps/docs/public/main/smtp/dropdown-menu.png b/apps/docs/public/assets/v1/main/smtp/dropdown-menu.png similarity index 100% rename from apps/docs/public/main/smtp/dropdown-menu.png rename to apps/docs/public/assets/v1/main/smtp/dropdown-menu.png diff --git a/apps/docs/public/main/smtp/opened-card.png b/apps/docs/public/assets/v1/main/smtp/opened-card.png similarity index 100% rename from apps/docs/public/main/smtp/opened-card.png rename to apps/docs/public/assets/v1/main/smtp/opened-card.png diff --git a/apps/docs/public/main/smtp/smtp-enabled.png b/apps/docs/public/assets/v1/main/smtp/smtp-enabled.png similarity index 100% rename from apps/docs/public/main/smtp/smtp-enabled.png rename to apps/docs/public/assets/v1/main/smtp/smtp-enabled.png diff --git a/apps/docs/public/main/upload/new-upload-button.png b/apps/docs/public/assets/v1/main/upload/new-upload-button.png similarity index 100% rename from apps/docs/public/main/upload/new-upload-button.png rename to apps/docs/public/assets/v1/main/upload/new-upload-button.png diff --git a/apps/docs/public/main/upload/preview-example.png b/apps/docs/public/assets/v1/main/upload/preview-example.png similarity index 100% rename from apps/docs/public/main/upload/preview-example.png rename to apps/docs/public/assets/v1/main/upload/preview-example.png diff --git a/apps/docs/public/main/upload/recent-uploads-filled.png b/apps/docs/public/assets/v1/main/upload/recent-uploads-filled.png similarity index 100% rename from apps/docs/public/main/upload/recent-uploads-filled.png rename to apps/docs/public/assets/v1/main/upload/recent-uploads-filled.png diff --git a/apps/docs/public/main/upload/recent-uploads.png b/apps/docs/public/assets/v1/main/upload/recent-uploads.png similarity index 100% rename from apps/docs/public/main/upload/recent-uploads.png rename to apps/docs/public/assets/v1/main/upload/recent-uploads.png diff --git a/apps/docs/public/main/upload/upload-cancel-buttons.png b/apps/docs/public/assets/v1/main/upload/upload-cancel-buttons.png similarity index 100% rename from apps/docs/public/main/upload/upload-cancel-buttons.png rename to apps/docs/public/assets/v1/main/upload/upload-cancel-buttons.png diff --git a/apps/docs/public/main/upload/upload-file-button.png b/apps/docs/public/assets/v1/main/upload/upload-file-button.png similarity index 100% rename from apps/docs/public/main/upload/upload-file-button.png rename to apps/docs/public/assets/v1/main/upload/upload-file-button.png diff --git a/apps/docs/public/main/upload/view-all-button.png b/apps/docs/public/assets/v1/main/upload/view-all-button.png similarity index 100% rename from apps/docs/public/main/upload/view-all-button.png rename to apps/docs/public/assets/v1/main/upload/view-all-button.png diff --git a/apps/docs/public/main/users/add-user-actions-dropdown.png b/apps/docs/public/assets/v1/main/users/add-user-actions-dropdown.png similarity index 100% rename from apps/docs/public/main/users/add-user-actions-dropdown.png rename to apps/docs/public/assets/v1/main/users/add-user-actions-dropdown.png diff --git a/apps/docs/public/main/users/add-user-modal.png b/apps/docs/public/assets/v1/main/users/add-user-modal.png similarity index 100% rename from apps/docs/public/main/users/add-user-modal.png rename to apps/docs/public/assets/v1/main/users/add-user-modal.png diff --git a/apps/docs/public/main/users/add-users-btn.png b/apps/docs/public/assets/v1/main/users/add-users-btn.png similarity index 100% rename from apps/docs/public/main/users/add-users-btn.png rename to apps/docs/public/assets/v1/main/users/add-users-btn.png diff --git a/apps/docs/public/main/users/edit-user-modal.png b/apps/docs/public/assets/v1/main/users/edit-user-modal.png similarity index 100% rename from apps/docs/public/main/users/edit-user-modal.png rename to apps/docs/public/assets/v1/main/users/edit-user-modal.png diff --git a/apps/docs/public/main/users/new-user-table.png b/apps/docs/public/assets/v1/main/users/new-user-table.png similarity index 100% rename from apps/docs/public/main/users/new-user-table.png rename to apps/docs/public/assets/v1/main/users/new-user-table.png diff --git a/apps/docs/public/main/users/users-management.png b/apps/docs/public/assets/v1/main/users/users-management.png similarity index 100% rename from apps/docs/public/main/users/users-management.png rename to apps/docs/public/assets/v1/main/users/users-management.png diff --git a/apps/docs/public/sponsor/sponsor-btn.png b/apps/docs/public/assets/v1/sponsor/sponsor-btn.png similarity index 100% rename from apps/docs/public/sponsor/sponsor-btn.png rename to apps/docs/public/assets/v1/sponsor/sponsor-btn.png diff --git a/apps/docs/public/sponsor/sponsor-page.png b/apps/docs/public/assets/v1/sponsor/sponsor-page.png similarity index 100% rename from apps/docs/public/sponsor/sponsor-page.png rename to apps/docs/public/assets/v1/sponsor/sponsor-page.png diff --git a/apps/docs/public/sponsor/star-btn.png b/apps/docs/public/assets/v1/sponsor/star-btn.png similarity index 100% rename from apps/docs/public/sponsor/star-btn.png rename to apps/docs/public/assets/v1/sponsor/star-btn.png diff --git a/apps/docs/public/sponsor/starred-button.png b/apps/docs/public/assets/v1/sponsor/starred-button.png similarity index 100% rename from apps/docs/public/sponsor/starred-button.png rename to apps/docs/public/assets/v1/sponsor/starred-button.png diff --git a/apps/docs/public/ui/dashboard.png b/apps/docs/public/assets/v1/ui/dashboard.png similarity index 100% rename from apps/docs/public/ui/dashboard.png rename to apps/docs/public/assets/v1/ui/dashboard.png diff --git a/apps/docs/public/ui/login.png b/apps/docs/public/assets/v1/ui/login.png similarity index 100% rename from apps/docs/public/ui/login.png rename to apps/docs/public/assets/v1/ui/login.png diff --git a/apps/docs/public/ui/menu.png b/apps/docs/public/assets/v1/ui/menu.png similarity index 100% rename from apps/docs/public/ui/menu.png rename to apps/docs/public/assets/v1/ui/menu.png diff --git a/apps/docs/public/ui/profile.png b/apps/docs/public/assets/v1/ui/profile.png similarity index 100% rename from apps/docs/public/ui/profile.png rename to apps/docs/public/assets/v1/ui/profile.png diff --git a/apps/docs/public/ui/profile_picture.png b/apps/docs/public/assets/v1/ui/profile_picture.png similarity index 100% rename from apps/docs/public/ui/profile_picture.png rename to apps/docs/public/assets/v1/ui/profile_picture.png diff --git a/apps/docs/public/assets/v2/api-docs/scalar.png b/apps/docs/public/assets/v2/api-docs/scalar.png new file mode 100644 index 0000000..7d1313a Binary files /dev/null and b/apps/docs/public/assets/v2/api-docs/scalar.png differ diff --git a/apps/docs/public/assets/v2/api-docs/swagger.png b/apps/docs/public/assets/v2/api-docs/swagger.png new file mode 100644 index 0000000..b2374db Binary files /dev/null and b/apps/docs/public/assets/v2/api-docs/swagger.png differ diff --git a/apps/docs/public/assets/v2/general/architecture.png b/apps/docs/public/assets/v2/general/architecture.png new file mode 100644 index 0000000..c379fff Binary files /dev/null and b/apps/docs/public/assets/v2/general/architecture.png differ diff --git a/apps/docs/public/assets/v2/general/banner.png b/apps/docs/public/assets/v2/general/banner.png new file mode 100644 index 0000000..a127d23 Binary files /dev/null and b/apps/docs/public/assets/v2/general/banner.png differ diff --git a/apps/docs/public/favicon.ico b/apps/docs/public/favicon.ico new file mode 100644 index 0000000..1ac2996 Binary files /dev/null and b/apps/docs/public/favicon.ico differ diff --git a/apps/docs/public/favicon.svg b/apps/docs/public/favicon.svg deleted file mode 100644 index ee4fd80..0000000 --- a/apps/docs/public/favicon.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/apps/docs/source.config.ts b/apps/docs/source.config.ts new file mode 100644 index 0000000..3f2bbfd --- /dev/null +++ b/apps/docs/source.config.ts @@ -0,0 +1,12 @@ +import { defineDocs, defineConfig } from 'fumadocs-mdx/config'; + +// Options: https://fumadocs.vercel.app/docs/mdx/collections#define-docs +export const docs = defineDocs({ + dir: 'content/docs', +}); + +export default defineConfig({ + mdxOptions: { + // MDX options + }, +}); diff --git a/apps/docs/src/app/(home)/layout.tsx b/apps/docs/src/app/(home)/layout.tsx new file mode 100644 index 0000000..b6c789f --- /dev/null +++ b/apps/docs/src/app/(home)/layout.tsx @@ -0,0 +1,13 @@ +import type { ReactNode } from "react"; +import { HomeLayout } from "fumadocs-ui/layouts/home"; +import { baseOptions } from "@/app/layout.config"; +import { Particles } from "@/components/magicui/particles"; + +export default function Layout({ children }: { children: ReactNode }) { + return ( + + + {children} + + ); +} diff --git a/apps/docs/src/app/(home)/page.tsx b/apps/docs/src/app/(home)/page.tsx new file mode 100644 index 0000000..0b38afc --- /dev/null +++ b/apps/docs/src/app/(home)/page.tsx @@ -0,0 +1,370 @@ +import { + type LucideIcon, + MousePointer, + UploadIcon, + Share2Icon, + GithubIcon, + BookOpenText, +} from "lucide-react"; +import { + BatteryChargingIcon, + KeyboardIcon, + LayoutIcon, + PersonStandingIcon, + RocketIcon, + SearchIcon, + TimerIcon, +} from "lucide-react"; + +import Link from "next/link"; +import type { ReactNode } from "react"; +import { ThreeDMarquee } from "@/components/ui/3d-marquee"; +import { AnimatedGridPattern } from "@/components/magicui/animated-grid-pattern"; +import { TypingAnimation } from "@/components/magicui/typing-animation"; +import { TextHoverEffect } from "@/components/ui/text-hover-effect"; +import { PulsatingButton } from "@/components/magicui/pulsating-button"; +import { RippleButton } from "@/components/magicui/ripple-button"; +import { WordRotate } from "@/components/magicui/word-rotate"; + +const images = [ + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546004/Palmr./dash_wt_kqtzxi.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546004/Palmr./login_xtlnif.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./poase_wt_plhgwc.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./profile_wt_fnj3rz.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./settigngs_open_hjkomr.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./Screenshot_j0csjm.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546004/Palmr./dash_cndhwr.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./profile_mizwvg.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./profile_wt_fnj3rz.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./poase_wt_plhgwc.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546004/Palmr./dash_wt_kqtzxi.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546004/Palmr./dash_cndhwr.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546004/Palmr./login_xtlnif.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./poase_wt_plhgwc.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./settigngs_open_hjkomr.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./Screenshot_j0csjm.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546004/Palmr./dash_cndhwr.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546004/Palmr./login_xtlnif.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./profile_mizwvg.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546004/Palmr./dash_wt_kqtzxi.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./profile_wt_fnj3rz.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./profile_mizwvg.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546004/Palmr./dash_wt_kqtzxi.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546004/Palmr./login_xtlnif.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./poase_wt_plhgwc.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./settigngs_open_hjkomr.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./Screenshot_j0csjm.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546004/Palmr./dash_cndhwr.png", + "https://res.cloudinary.com/technical-intelligence/image/upload/v1745546005/Palmr./profile_mizwvg.png", +]; + +const docsLink = "/docs/2.0.0-beta"; + +export default function HomePage() { + return ( + <> +
+
+ + + + + + + + +
+
+ + + ); +} + +function Hero() { + return ( +
+

๐ŸŒด Palmr.

+

+ Modern & efficient file sharing +

+

+ Palmr is a fast and secure platform for sharing files, built with + performance and privacy in mind. +

+
+ +
+
+ +
+ + Documentation +
+
+ + + + + GitHub + + +
+
+ ); +} + +function LogoShowcase() { + return ( +
+ +
+ ); +} + +function Feedback() { + return ( +
+

+ A modern way to share files + +

+
+ ); +} + +export function Introduction() { + return ( +
+
+
+
+ +
+

Upload.

+
+

+ Send your files quickly and safely. +

+
+
+
+
+ +
+

Share.

+
+

Easily share with anyone.

+
+
+ ); +} + +function Architecture() { + return ( +
+
+

+ Carefully Built +

+

+ A complete solution for file sharing. +

+

+ From the upload to the link generation, everything is designed to be + fast, reliable, and privacy-friendly. +
+
+ Every feature was crafted to deliver the best possible experience. +

+
+
+ ); +} + +function FileSection() { + return ( +
+

+ File Sharing + + Free & Open Source + +

+ +
+ ); +} + +function Highlights() { + const features = [ + { + icon: TimerIcon, + title: "Fast & Efficient", + text: "Optimized upload and download speeds.", + }, + { + icon: LayoutIcon, + title: "Intuitive UI", + text: "Clean, modern, and easy to use.", + }, + { + icon: RocketIcon, + title: "Modern Stack", + text: "Powered by Next.js, Fastify, MinIO, Postgres and the latest tech.", + }, + { + icon: SearchIcon, + title: "Smart Search", + text: "Find shared files quickly.", + }, + { + icon: KeyboardIcon, + title: "Open API", + text: "REST API endpoinds available for any integrations.", + }, + { + icon: PersonStandingIcon, + title: "Customizable", + text: "Full control over all the system and configurations.", + }, + ]; + + return ( +
+
+

+ Highlights +

+ +
+ {features.map(({ icon, title, text }, i) => ( + + {text} + + ))} +
+ ); +} + +function Highlight({ + icon: Icon, + heading, + children, +}: { + icon: LucideIcon; + heading: ReactNode; + children: ReactNode; +}) { + return ( +
+
+ +

{heading}

+
+ {children} +
+ ); +} + +function End() { + return ( +
+
+

+ Start Using Now. ๐ŸŒด +

+
    + + Get up and running in minutes. + + + Take full control of your file sharing infrastructure. + +
+
+ +
+ + Documentation +
+
+ + + + GitHub + + +
+
+
+ ); +} + +function ListItem({ + icon: Icon, + title, + children, +}: { + icon: LucideIcon; + title: string; + children: ReactNode; +}) { + return ( +
  • + + + {title} + + + {children} + +
  • + ); +} + +function FullWidthFooter() { + return ( +
    +
    + Powered by + + Kyantech Solutions ยฉ + +
    +
    + ); +} diff --git a/apps/docs/src/app/api/search/route.ts b/apps/docs/src/app/api/search/route.ts new file mode 100644 index 0000000..278a9da --- /dev/null +++ b/apps/docs/src/app/api/search/route.ts @@ -0,0 +1,16 @@ +import { source } from '@/lib/source'; +import { createFromSource } from 'fumadocs-core/search/server'; + +export const { GET } = createFromSource(source, (page) => { + // Log the page URL for debugging + console.log('Page URL:', page.url); + + return { + title: page.data.title, + description: page.data.description, + url: page.url, + id: page.url, + structuredData: page.data.structuredData, + tag: page.url.startsWith('/docs/2.0.0-beta') ? 'v2.0.0-beta' : 'v1.1.7-beta' + }; +}); diff --git a/apps/docs/src/app/docs/[[...slug]]/page.tsx b/apps/docs/src/app/docs/[[...slug]]/page.tsx new file mode 100644 index 0000000..23c004a --- /dev/null +++ b/apps/docs/src/app/docs/[[...slug]]/page.tsx @@ -0,0 +1,62 @@ +import { source } from "@/lib/source"; +import { + DocsPage, + DocsBody, + DocsDescription, + DocsTitle, +} from "fumadocs-ui/page"; +import { notFound } from "next/navigation"; +import { createRelativeLink } from "fumadocs-ui/mdx"; +import { getMDXComponents } from "@/mdx-components"; +import { Footer } from "../components/footer"; +import { Sponsor } from "../components/sponsor"; + +export default async function Page(props: { + params: Promise<{ slug?: string[] }>; +}) { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + const MDXContent = page.data.body; + + return ( + }} + tableOfContent={{ + style: "clerk", + footer: + }} + > + {page.data.title} +
    + {page.data.description} + + + +
    + ); +} + +export async function generateStaticParams() { + return source.generateParams(); +} + +export async function generateMetadata(props: { + params: Promise<{ slug?: string[] }>; +}) { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + return { + title: page.data.title + " | ๐ŸŒด Palmr. Docs", + description: page.data.description, + }; +} diff --git a/apps/docs/src/app/docs/components/footer.tsx b/apps/docs/src/app/docs/components/footer.tsx new file mode 100644 index 0000000..0042738 --- /dev/null +++ b/apps/docs/src/app/docs/components/footer.tsx @@ -0,0 +1,19 @@ +import Link from 'fumadocs-core/link'; + +export function Footer() { + return ( +
    +
    + Powered by + + Kyantech Solutions ยฉ + +
    +
    + ); +} \ No newline at end of file diff --git a/apps/docs/src/app/docs/components/sponsor.tsx b/apps/docs/src/app/docs/components/sponsor.tsx new file mode 100644 index 0000000..a1dce57 --- /dev/null +++ b/apps/docs/src/app/docs/components/sponsor.tsx @@ -0,0 +1,17 @@ +import { Coffee } from "lucide-react"; + +export function Sponsor() { + return ( + + ); +} diff --git a/apps/docs/src/app/docs/layout.tsx b/apps/docs/src/app/docs/layout.tsx new file mode 100644 index 0000000..668b556 --- /dev/null +++ b/apps/docs/src/app/docs/layout.tsx @@ -0,0 +1,12 @@ +import { DocsLayout } from 'fumadocs-ui/layouts/docs'; +import type { ReactNode } from 'react'; +import { baseOptions } from '@/app/layout.config'; +import { source } from '@/lib/source'; + +export default function Layout({ children }: { children: ReactNode }) { + return ( + + {children} + + ); +} diff --git a/apps/docs/src/app/global.css b/apps/docs/src/app/global.css new file mode 100644 index 0000000..5efd5c6 --- /dev/null +++ b/apps/docs/src/app/global.css @@ -0,0 +1,196 @@ +@import "tailwindcss"; +@import "fumadocs-ui/css/neutral.css"; +@import "fumadocs-ui/css/preset.css"; +@import "tw-animate-css"; + +@custom-variant dark (&:is(.dark *)); +/* @import 'fumadocs-ui/css/black.css'; */ + +@source '../../node_modules/fumadocs-ui/dist/**/*.js'; + +code { + color: #eb5757; +} + +h4 { + margin-bottom: 1rem; + margin-top: 3rem; + font-size: 1.1rem; +} + +.prose h3 { + font-size: 1.25rem; +} + +@theme inline { + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); + --animate-ripple: ripple var(--duration,2s) ease calc(var(--i, 0)*.2s) infinite; + @keyframes ripple { + 0%, 100% { + transform: translate(-50%, -50%) scale(1); + } + 50% { + transform: translate(-50%, -50%) scale(0.9); + } + } + --animate-pulse: pulse var(--duration) ease-out infinite +; + @keyframes pulse { + 0%, 100% { + boxShadow: 0 0 0 0 var(--pulse-color); + } + 50% { + boxShadow: 0 0 0 8px var(--pulse-color); + } + } + --animate-rippling: rippling var(--duration) ease-out; + @keyframes rippling { + 0% { + opacity: 1; + } + 100% { + transform: scale(2); + opacity: 0; + } + }} + +:root { + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.205 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.205 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.922 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.556 0 0); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.556 0 0); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} + +@theme inline { + --animate-pulse: pulse var(--duration) ease-out infinite; + + @keyframes pulse { + 0%, + 100% { + box-shadow: 0 0 0 0 var(--pulse-color); + } + 50% { + box-shadow: 0 0 0 8px var(--pulse-color); + } + } +} + + +@theme inline { + --animate-rippling: rippling var(--duration) ease-out; + + @keyframes rippling { + 0% { + opacity: 1; + } + 100% { + transform: scale(2); + opacity: 0; + } + } +} \ No newline at end of file diff --git a/apps/docs/src/app/layout.config.tsx b/apps/docs/src/app/layout.config.tsx new file mode 100644 index 0000000..2544361 --- /dev/null +++ b/apps/docs/src/app/layout.config.tsx @@ -0,0 +1,25 @@ +import type { BaseLayoutProps } from "fumadocs-ui/layouts/shared"; +import { Github } from "lucide-react"; + +export const baseOptions: BaseLayoutProps = { + nav: { + title: "๐ŸŒด Palmr.", + }, + links: [ + { + text: "Docs", + url: "/docs/2.0.0-beta", + active: "nested-url", + }, + { + text: "Github", + url: "https://github.com/kyantech/Palmr", + active: "nested-url", + icon: ( + <> + + + ), + } + ], +}; diff --git a/apps/docs/src/app/layout.tsx b/apps/docs/src/app/layout.tsx new file mode 100644 index 0000000..9e17541 --- /dev/null +++ b/apps/docs/src/app/layout.tsx @@ -0,0 +1,51 @@ +import { Banner } from "fumadocs-ui/components/banner"; +import "./global.css"; +import { RootProvider } from "fumadocs-ui/provider"; +import { Inter } from "next/font/google"; +import type { ReactNode } from "react"; +import Link from "fumadocs-core/link"; + +const inter = Inter({ + subsets: ["latin"], +}); + +export const metadata = { + title: "๐ŸŒด Palmr. | Official Website", + description: "Palmr. is a fast, simple and powerful document sharing platform.", +}; + +export default function Layout({ children }: { children: ReactNode }) { + return ( + + + + + {children} + + + + ); +} diff --git a/apps/docs/src/components/magicui/animated-grid-pattern.tsx b/apps/docs/src/components/magicui/animated-grid-pattern.tsx new file mode 100644 index 0000000..14cf70d --- /dev/null +++ b/apps/docs/src/components/magicui/animated-grid-pattern.tsx @@ -0,0 +1,154 @@ +"use client"; + +import { motion } from "motion/react"; +import { + ComponentPropsWithoutRef, + useEffect, + useId, + useRef, + useState, +} from "react"; + +import { cn } from "@/lib/utils"; + +export interface AnimatedGridPatternProps + extends ComponentPropsWithoutRef<"svg"> { + width?: number; + height?: number; + x?: number; + y?: number; + strokeDasharray?: any; + numSquares?: number; + maxOpacity?: number; + duration?: number; + repeatDelay?: number; +} + +export function AnimatedGridPattern({ + width = 40, + height = 40, + x = -1, + y = -1, + strokeDasharray = 0, + numSquares = 50, + className, + maxOpacity = 0.5, + duration = 4, + repeatDelay = 0.5, + ...props +}: AnimatedGridPatternProps) { + const id = useId(); + const containerRef = useRef(null); + const [dimensions, setDimensions] = useState({ width: 0, height: 0 }); + const [squares, setSquares] = useState(() => generateSquares(numSquares)); + + function getPos() { + return [ + Math.floor((Math.random() * dimensions.width) / width), + Math.floor((Math.random() * dimensions.height) / height), + ]; + } + + // Adjust the generateSquares function to return objects with an id, x, and y + function generateSquares(count: number) { + return Array.from({ length: count }, (_, i) => ({ + id: i, + pos: getPos(), + })); + } + + // Function to update a single square's position + const updateSquarePosition = (id: number) => { + setSquares((currentSquares) => + currentSquares.map((sq) => + sq.id === id + ? { + ...sq, + pos: getPos(), + } + : sq, + ), + ); + }; + + // Update squares to animate in + useEffect(() => { + if (dimensions.width && dimensions.height) { + setSquares(generateSquares(numSquares)); + } + }, [dimensions, numSquares]); + + // Resize observer to update container dimensions + useEffect(() => { + const resizeObserver = new ResizeObserver((entries) => { + for (let entry of entries) { + setDimensions({ + width: entry.contentRect.width, + height: entry.contentRect.height, + }); + } + }); + + if (containerRef.current) { + resizeObserver.observe(containerRef.current); + } + + return () => { + if (containerRef.current) { + resizeObserver.unobserve(containerRef.current); + } + }; + }, [containerRef]); + + return ( + + ); +} diff --git a/apps/docs/src/components/magicui/particles.tsx b/apps/docs/src/components/magicui/particles.tsx new file mode 100644 index 0000000..ffba741 --- /dev/null +++ b/apps/docs/src/components/magicui/particles.tsx @@ -0,0 +1,313 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import React, { + ComponentPropsWithoutRef, + useEffect, + useRef, + useState, +} from "react"; + +interface MousePosition { + x: number; + y: number; +} + +function MousePosition(): MousePosition { + const [mousePosition, setMousePosition] = useState({ + x: 0, + y: 0, + }); + + useEffect(() => { + const handleMouseMove = (event: MouseEvent) => { + setMousePosition({ x: event.clientX, y: event.clientY }); + }; + + window.addEventListener("mousemove", handleMouseMove); + + return () => { + window.removeEventListener("mousemove", handleMouseMove); + }; + }, []); + + return mousePosition; +} + +interface ParticlesProps extends ComponentPropsWithoutRef<"div"> { + className?: string; + quantity?: number; + staticity?: number; + ease?: number; + size?: number; + refresh?: boolean; + color?: string; + vx?: number; + vy?: number; +} + +function hexToRgb(hex: string): number[] { + hex = hex.replace("#", ""); + + if (hex.length === 3) { + hex = hex + .split("") + .map((char) => char + char) + .join(""); + } + + const hexInt = parseInt(hex, 16); + const red = (hexInt >> 16) & 255; + const green = (hexInt >> 8) & 255; + const blue = hexInt & 255; + return [red, green, blue]; +} + +type Circle = { + x: number; + y: number; + translateX: number; + translateY: number; + size: number; + alpha: number; + targetAlpha: number; + dx: number; + dy: number; + magnetism: number; +}; + +export const Particles: React.FC = ({ + className = "", + quantity = 100, + staticity = 50, + ease = 50, + size = 0.4, + refresh = false, + color = "#ffffff", + vx = 0, + vy = 0, + ...props +}) => { + const canvasRef = useRef(null); + const canvasContainerRef = useRef(null); + const context = useRef(null); + const circles = useRef([]); + const mousePosition = MousePosition(); + const mouse = useRef<{ x: number; y: number }>({ x: 0, y: 0 }); + const canvasSize = useRef<{ w: number; h: number }>({ w: 0, h: 0 }); + const dpr = typeof window !== "undefined" ? window.devicePixelRatio : 1; + const rafID = useRef(null); + const resizeTimeout = useRef(null); + + useEffect(() => { + if (canvasRef.current) { + context.current = canvasRef.current.getContext("2d"); + } + initCanvas(); + animate(); + + const handleResize = () => { + if (resizeTimeout.current) { + clearTimeout(resizeTimeout.current); + } + resizeTimeout.current = setTimeout(() => { + initCanvas(); + }, 200); + }; + + window.addEventListener("resize", handleResize); + + return () => { + if (rafID.current != null) { + window.cancelAnimationFrame(rafID.current); + } + if (resizeTimeout.current) { + clearTimeout(resizeTimeout.current); + } + window.removeEventListener("resize", handleResize); + }; + }, [color]); + + useEffect(() => { + onMouseMove(); + }, [mousePosition.x, mousePosition.y]); + + useEffect(() => { + initCanvas(); + }, [refresh]); + + const initCanvas = () => { + resizeCanvas(); + drawParticles(); + }; + + const onMouseMove = () => { + if (canvasRef.current) { + const rect = canvasRef.current.getBoundingClientRect(); + const { w, h } = canvasSize.current; + const x = mousePosition.x - rect.left - w / 2; + const y = mousePosition.y - rect.top - h / 2; + const inside = x < w / 2 && x > -w / 2 && y < h / 2 && y > -h / 2; + if (inside) { + mouse.current.x = x; + mouse.current.y = y; + } + } + }; + + const resizeCanvas = () => { + if (canvasContainerRef.current && canvasRef.current && context.current) { + canvasSize.current.w = canvasContainerRef.current.offsetWidth; + canvasSize.current.h = canvasContainerRef.current.offsetHeight; + + canvasRef.current.width = canvasSize.current.w * dpr; + canvasRef.current.height = canvasSize.current.h * dpr; + canvasRef.current.style.width = `${canvasSize.current.w}px`; + canvasRef.current.style.height = `${canvasSize.current.h}px`; + context.current.scale(dpr, dpr); + + // Clear existing particles and create new ones with exact quantity + circles.current = []; + for (let i = 0; i < quantity; i++) { + const circle = circleParams(); + drawCircle(circle); + } + } + }; + + const circleParams = (): Circle => { + const x = Math.floor(Math.random() * canvasSize.current.w); + const y = Math.floor(Math.random() * canvasSize.current.h); + const translateX = 0; + const translateY = 0; + const pSize = Math.floor(Math.random() * 2) + size; + const alpha = 0; + const targetAlpha = parseFloat((Math.random() * 0.6 + 0.1).toFixed(1)); + const dx = (Math.random() - 0.5) * 0.1; + const dy = (Math.random() - 0.5) * 0.1; + const magnetism = 0.1 + Math.random() * 4; + return { + x, + y, + translateX, + translateY, + size: pSize, + alpha, + targetAlpha, + dx, + dy, + magnetism, + }; + }; + + const rgb = hexToRgb(color); + + const drawCircle = (circle: Circle, update = false) => { + if (context.current) { + const { x, y, translateX, translateY, size, alpha } = circle; + context.current.translate(translateX, translateY); + context.current.beginPath(); + context.current.arc(x, y, size, 0, 2 * Math.PI); + context.current.fillStyle = `rgba(${rgb.join(", ")}, ${alpha})`; + context.current.fill(); + context.current.setTransform(dpr, 0, 0, dpr, 0, 0); + + if (!update) { + circles.current.push(circle); + } + } + }; + + const clearContext = () => { + if (context.current) { + context.current.clearRect( + 0, + 0, + canvasSize.current.w, + canvasSize.current.h, + ); + } + }; + + const drawParticles = () => { + clearContext(); + const particleCount = quantity; + for (let i = 0; i < particleCount; i++) { + const circle = circleParams(); + drawCircle(circle); + } + }; + + const remapValue = ( + value: number, + start1: number, + end1: number, + start2: number, + end2: number, + ): number => { + const remapped = + ((value - start1) * (end2 - start2)) / (end1 - start1) + start2; + return remapped > 0 ? remapped : 0; + }; + + const animate = () => { + clearContext(); + circles.current.forEach((circle: Circle, i: number) => { + // Handle the alpha value + const edge = [ + circle.x + circle.translateX - circle.size, // distance from left edge + canvasSize.current.w - circle.x - circle.translateX - circle.size, // distance from right edge + circle.y + circle.translateY - circle.size, // distance from top edge + canvasSize.current.h - circle.y - circle.translateY - circle.size, // distance from bottom edge + ]; + const closestEdge = edge.reduce((a, b) => Math.min(a, b)); + const remapClosestEdge = parseFloat( + remapValue(closestEdge, 0, 20, 0, 1).toFixed(2), + ); + if (remapClosestEdge > 1) { + circle.alpha += 0.02; + if (circle.alpha > circle.targetAlpha) { + circle.alpha = circle.targetAlpha; + } + } else { + circle.alpha = circle.targetAlpha * remapClosestEdge; + } + circle.x += circle.dx + vx; + circle.y += circle.dy + vy; + circle.translateX += + (mouse.current.x / (staticity / circle.magnetism) - circle.translateX) / + ease; + circle.translateY += + (mouse.current.y / (staticity / circle.magnetism) - circle.translateY) / + ease; + + drawCircle(circle, true); + + // circle gets out of the canvas + if ( + circle.x < -circle.size || + circle.x > canvasSize.current.w + circle.size || + circle.y < -circle.size || + circle.y > canvasSize.current.h + circle.size + ) { + // remove the circle from the array + circles.current.splice(i, 1); + // create a new circle + const newCircle = circleParams(); + drawCircle(newCircle); + } + }); + rafID.current = window.requestAnimationFrame(animate); + }; + + return ( + + ); +}; diff --git a/apps/docs/src/components/magicui/pulsating-button.tsx b/apps/docs/src/components/magicui/pulsating-button.tsx new file mode 100644 index 0000000..78d36ad --- /dev/null +++ b/apps/docs/src/components/magicui/pulsating-button.tsx @@ -0,0 +1,46 @@ +import React from "react"; +import { cn } from "@/lib/utils"; + +interface PulsatingButtonProps + extends React.ButtonHTMLAttributes { + pulseColor?: string; + duration?: string; +} + +export const PulsatingButton = React.forwardRef< + HTMLButtonElement, + PulsatingButtonProps +>( + ( + { + className, + children, + pulseColor = "#808080", + duration = "1.5s", + ...props + }, + ref, + ) => { + return ( + + ); + }, +); + +PulsatingButton.displayName = "PulsatingButton"; diff --git a/apps/docs/src/components/magicui/ripple-button.tsx b/apps/docs/src/components/magicui/ripple-button.tsx new file mode 100644 index 0000000..458551d --- /dev/null +++ b/apps/docs/src/components/magicui/ripple-button.tsx @@ -0,0 +1,91 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import React, { MouseEvent, useEffect, useState } from "react"; + +interface RippleButtonProps + extends React.ButtonHTMLAttributes { + rippleColor?: string; + duration?: string; +} + +export const RippleButton = React.forwardRef< + HTMLButtonElement, + RippleButtonProps +>( + ( + { + className, + children, + rippleColor = "#ffffff", + duration = "600ms", + onClick, + ...props + }, + ref, + ) => { + const [buttonRipples, setButtonRipples] = useState< + Array<{ x: number; y: number; size: number; key: number }> + >([]); + + const handleClick = (event: MouseEvent) => { + createRipple(event); + onClick?.(event); + }; + + const createRipple = (event: MouseEvent) => { + const button = event.currentTarget; + const rect = button.getBoundingClientRect(); + const size = Math.max(rect.width, rect.height); + const x = event.clientX - rect.left - size / 2; + const y = event.clientY - rect.top - size / 2; + + const newRipple = { x, y, size, key: Date.now() }; + setButtonRipples((prevRipples) => [...prevRipples, newRipple]); + }; + + useEffect(() => { + if (buttonRipples.length > 0) { + const lastRipple = buttonRipples[buttonRipples.length - 1]; + const timeout = setTimeout(() => { + setButtonRipples((prevRipples) => + prevRipples.filter((ripple) => ripple.key !== lastRipple.key), + ); + }, parseInt(duration)); + return () => clearTimeout(timeout); + } + }, [buttonRipples, duration]); + + return ( + + ); + }, +); + +RippleButton.displayName = "RippleButton"; diff --git a/apps/docs/src/components/magicui/typing-animation.tsx b/apps/docs/src/components/magicui/typing-animation.tsx new file mode 100644 index 0000000..62ce90a --- /dev/null +++ b/apps/docs/src/components/magicui/typing-animation.tsx @@ -0,0 +1,90 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import { motion, MotionProps } from "motion/react"; +import { useEffect, useRef, useState } from "react"; + +interface TypingAnimationProps extends MotionProps { + children: string; + className?: string; + duration?: number; + delay?: number; + as?: React.ElementType; + startOnView?: boolean; +} + +export function TypingAnimation({ + children, + className, + duration = 100, + delay = 0, + as: Component = "div", + startOnView = false, + ...props +}: TypingAnimationProps) { + const MotionComponent = motion.create(Component, { + forwardMotionProps: true, + }); + + const [displayedText, setDisplayedText] = useState(""); + const [started, setStarted] = useState(false); + const elementRef = useRef(null); + + useEffect(() => { + if (!startOnView) { + const startTimeout = setTimeout(() => { + setStarted(true); + }, delay); + return () => clearTimeout(startTimeout); + } + + const observer = new IntersectionObserver( + ([entry]) => { + if (entry.isIntersecting) { + setTimeout(() => { + setStarted(true); + }, delay); + observer.disconnect(); + } + }, + { threshold: 0.1 }, + ); + + if (elementRef.current) { + observer.observe(elementRef.current); + } + + return () => observer.disconnect(); + }, [delay, startOnView]); + + useEffect(() => { + if (!started) return; + + let i = 0; + const typingEffect = setInterval(() => { + if (i < children.length) { + setDisplayedText(children.substring(0, i + 1)); + i++; + } else { + clearInterval(typingEffect); + } + }, duration); + + return () => { + clearInterval(typingEffect); + }; + }, [children, duration, started]); + + return ( + + {displayedText} + + ); +} diff --git a/apps/docs/src/components/magicui/word-rotate.tsx b/apps/docs/src/components/magicui/word-rotate.tsx new file mode 100644 index 0000000..17be594 --- /dev/null +++ b/apps/docs/src/components/magicui/word-rotate.tsx @@ -0,0 +1,50 @@ +"use client"; + +import { AnimatePresence, motion, MotionProps } from "motion/react"; +import { useEffect, useState } from "react"; + +import { cn } from "@/lib/utils"; + +interface WordRotateProps { + words: string[]; + duration?: number; + motionProps?: MotionProps; + className?: string; +} + +export function WordRotate({ + words, + duration = 2500, + motionProps = { + initial: { opacity: 0, y: -50 }, + animate: { opacity: 1, y: 0 }, + exit: { opacity: 0, y: 50 }, + transition: { duration: 0.25, ease: "easeOut" }, + }, + className, +}: WordRotateProps) { + const [index, setIndex] = useState(0); + + useEffect(() => { + const interval = setInterval(() => { + setIndex((prevIndex) => (prevIndex + 1) % words.length); + }, duration); + + // Clean up interval on unmount + return () => clearInterval(interval); + }, [words, duration]); + + return ( +
    + + + {words[index]} + + +
    + ); +} diff --git a/apps/docs/src/components/ui/3d-marquee.tsx b/apps/docs/src/components/ui/3d-marquee.tsx new file mode 100644 index 0000000..2913aee --- /dev/null +++ b/apps/docs/src/components/ui/3d-marquee.tsx @@ -0,0 +1,142 @@ +"use client"; + +import { motion } from "motion/react"; +import { cn } from "@/lib/utils"; +export const ThreeDMarquee = ({ + images, + className, +}: { + images: string[]; + className?: string; +}) => { + // Split the images array into 4 equal parts + const chunkSize = Math.ceil(images.length / 4); + const chunks = Array.from({ length: 4 }, (_, colIndex) => { + const start = colIndex * chunkSize; + return images.slice(start, start + chunkSize); + }); + return ( +
    +
    +
    +
    + {chunks.map((subarray, colIndex) => ( + + + {subarray.map((image, imageIndex) => ( +
    + + +
    + ))} +
    + ))} +
    +
    +
    +
    + ); +}; + +const GridLineHorizontal = ({ + className, + offset, +}: { + className?: string; + offset?: string; +}) => { + return ( +
    + ); +}; + +const GridLineVertical = ({ + className, + offset, +}: { + className?: string; + offset?: string; +}) => { + return ( +
    + ); +}; diff --git a/apps/docs/src/components/ui/text-hover-effect.tsx b/apps/docs/src/components/ui/text-hover-effect.tsx new file mode 100644 index 0000000..632de03 --- /dev/null +++ b/apps/docs/src/components/ui/text-hover-effect.tsx @@ -0,0 +1,134 @@ +"use client"; +import React, { useRef, useEffect, useState } from "react"; +import { motion } from "motion/react"; + +export const TextHoverEffect = ({ + text, + duration, +}: { + text: string; + duration?: number; + automatic?: boolean; +}) => { + const svgRef = useRef(null); + const [cursor, setCursor] = useState({ x: 0, y: 0 }); + const [hovered, setHovered] = useState(false); + const [maskPosition, setMaskPosition] = useState({ cx: "50%", cy: "50%" }); + + useEffect(() => { + if (svgRef.current && cursor.x !== null && cursor.y !== null) { + const svgRect = svgRef.current.getBoundingClientRect(); + const cxPercentage = ((cursor.x - svgRect.left) / svgRect.width) * 100; + const cyPercentage = ((cursor.y - svgRect.top) / svgRect.height) * 100; + setMaskPosition({ + cx: `${cxPercentage}%`, + cy: `${cyPercentage}%`, + }); + } + }, [cursor]); + + return ( + setHovered(true)} + onMouseLeave={() => setHovered(false)} + onMouseMove={(e) => setCursor({ x: e.clientX, y: e.clientY })} + className="select-none" + > + + + {hovered && ( + <> + + + + + + + )} + + + + + + + + + + + + {text} + + + {text} + + + {text} + + + ); +}; diff --git a/apps/docs/src/content.config.ts b/apps/docs/src/content.config.ts deleted file mode 100644 index d9ee8c9..0000000 --- a/apps/docs/src/content.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { defineCollection } from 'astro:content'; -import { docsLoader } from '@astrojs/starlight/loaders'; -import { docsSchema } from '@astrojs/starlight/schema'; - -export const collections = { - docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }), -}; diff --git a/apps/docs/src/lib/source.ts b/apps/docs/src/lib/source.ts new file mode 100644 index 0000000..dedc4be --- /dev/null +++ b/apps/docs/src/lib/source.ts @@ -0,0 +1,9 @@ +import { docs } from '@/.source'; +import { loader } from 'fumadocs-core/source'; + +// See https://fumadocs.vercel.app/docs/headless/source-api for more info +export const source = loader({ + // it assigns a URL to your pages + baseUrl: '/docs', + source: docs.toFumadocsSource(), +}); diff --git a/apps/docs/src/lib/utils.ts b/apps/docs/src/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/apps/docs/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/apps/docs/src/mdx-components.tsx b/apps/docs/src/mdx-components.tsx new file mode 100644 index 0000000..d3fbb13 --- /dev/null +++ b/apps/docs/src/mdx-components.tsx @@ -0,0 +1,10 @@ +import defaultMdxComponents from 'fumadocs-ui/mdx'; +import type { MDXComponents } from 'mdx/types'; + +// use this function to get MDX components, you will need it for rendering MDX +export function getMDXComponents(components?: MDXComponents): MDXComponents { + return { + ...defaultMdxComponents, + ...components, + }; +} diff --git a/apps/docs/src/styles/custom.css b/apps/docs/src/styles/custom.css deleted file mode 100644 index f4dc98f..0000000 --- a/apps/docs/src/styles/custom.css +++ /dev/null @@ -1,162 +0,0 @@ -/* Tema escuro (padrรฃo) */ -[data-theme='dark'] { - --sl-color-accent-low: #022c1f; - --sl-color-accent: #16a34a; - --sl-color-accent-high: #dcfce7; - --sl-color-bg: #0a0a0a; - --sl-color-bg-sidebar: #0a0a0a; - --sl-color-bg-nav: #0f0f0f; - --sl-color-bg-inline-code: #022c1f; - --sl-color-bg-nav-hover: #022c1f; - --sl-color-text: #ffffff; - --sl-color-text-accent: var(--sl-color-accent); - --sl-color-text-invert: var(--sl-color-black); - --sl-color-hairline: #1a1a1a; - --sl-color-border: #262626; - --sl-color-selection-text: #ffffff; - --sl-color-selection-bg: #16a34a; - --sl-color-code-text: #86efac; - --sl-color-code-bg: #052e16; - --sl-color-code-border: #064e3b; -} - -/* Tema claro */ -[data-theme='light'] { - --sl-color-accent-low: #f0fdf4 !important; - --sl-color-accent: #16a34a !important; - --sl-color-accent-high: #052e16 !important; - --sl-color-bg: #ffffff !important; - --sl-color-bg-sidebar: #f8f9fa !important; - --sl-color-bg-nav: #ffffff !important; - --sl-color-bg-inline-code: #f0fdf4 !important; - --sl-color-bg-nav-hover: #f0fdf4 !important; - --sl-color-text: #111827 !important; - --sl-color-text-accent: #16a34a !important; - --sl-color-text-invert: #ffffff !important; - --sl-color-hairline: #e5e7eb !important; - --sl-color-border: #d1d5db !important; - --sl-color-selection-text: #ffffff !important; - --sl-color-selection-bg: #16a34a !important; - --sl-color-code-text: #16a34a !important; - --sl-color-code-bg: #f0fdf4 !important; - --sl-color-code-border: #dcfce7 !important; -} - -/* Estilo para links gerais */ -a { - color: var(--sl-color-accent) !important; -} - -a:hover { - color: #15803d !important; -} - -/* Estilo para botรตes */ -.button, button[type="button"], button[type="submit"] { - background-color: var(--sl-color-accent) !important; - color: var(--sl-color-text-invert) !important; - border-color: var(--sl-color-accent) !important; -} - -.button:hover, button[type="button"]:hover, button[type="submit"]:hover { - background-color: #15803d !important; - border-color: #15803d !important; -} - -/* Estilos especรญficos para a sidebar */ -.sidebar-content a { - color: var(--sl-color-text) !important; -} - -.sidebar-content a:hover { - color: var(--sl-color-accent) !important; -} - -.sidebar-content [aria-current="page"] { - color: var(--sl-color-text-invert) !important; - background-color: var(--sl-color-accent) !important; -} - -/* Ajuste para o tรญtulo da seรงรฃo na sidebar */ -.sidebar-content .nav-group-title { - color: var(--sl-color-text) !important; - opacity: 0.7; -} - -/* Seleรงรฃo de texto */ -::selection { - background-color: var(--sl-color-selection-bg) !important; - color: var(--sl-color-selection-text) !important; -} - -/* Blocos de cรณdigo */ -code, pre { - color: var(--sl-color-code-text) !important; - background-color: var(--sl-color-code-bg) !important; - border-color: var(--sl-color-code-border) !important; -} - -/* Links de paginaรงรฃo e navegaรงรฃo */ -.pagination-links a, .nav-link, .breadcrumb { - color: var(--sl-color-text) !important; -} - -.pagination-links a:hover, .nav-link:hover { - color: var(--sl-color-accent) !important; -} - -/* Cabeรงalhos e elementos de destaque */ -h1, h2, h3, h4, h5, h6, p, li, td, th, label, span { - color: var(--sl-color-text) !important; -} - -/* Elementos de entrada e pesquisa */ -input, .search-input { - background-color: var(--sl-color-bg) !important; - border-color: var(--sl-color-border) !important; - color: var(--sl-color-text) !important; -} - -/* Barra de rolagem personalizada */ -::-webkit-scrollbar-thumb { - background-color: var(--sl-color-border) !important; -} - -::-webkit-scrollbar-track { - background-color: var(--sl-color-bg) !important; -} - -/* Elementos de navegaรงรฃo e menu */ -nav, .nav-wrapper, .menu-item { - color: var(--sl-color-text) !important; -} - -/* Elementos de destaque e badges */ -.badge, .tag, .pill { - background-color: var(--sl-color-accent) !important; - color: var(--sl-color-text-invert) !important; -} - -/* Elementos de tabela */ -table { - border-color: var(--sl-color-border) !important; -} - -/* Elementos de formulรกrio */ -select, textarea { - background-color: var(--sl-color-bg) !important; - border-color: var(--sl-color-border) !important; - color: var(--sl-color-text) !important; -} - -/* Elementos de alerta e notificaรงรฃo */ -.alert, .notification { - border-color: var(--sl-color-border) !important; - background-color: var(--sl-color-bg) !important; -} - -/* Right sidebar */ -.right-sidebar { - color: var(--sl-color-text) !important; - border-color: var(--sl-color-border) !important; -} \ No newline at end of file diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json index 8bf91d3..504b291 100644 --- a/apps/docs/tsconfig.json +++ b/apps/docs/tsconfig.json @@ -1,5 +1,45 @@ { - "extends": "astro/tsconfigs/strict", - "include": [".astro/types.d.ts", "**/*"], - "exclude": ["dist"] -} + "compilerOptions": { + "baseUrl": ".", + "target": "ESNext", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "paths": { + "@/.source": [ + "./.source/index.ts" + ], + "@/*": [ + "./src/*" + ] + }, + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/apps/server/.env.example b/apps/server/.env.example index b7c85d7..5dc3ee0 100644 --- a/apps/server/.env.example +++ b/apps/server/.env.example @@ -8,6 +8,6 @@ MINIO_ROOT_USER="palmr" MINIO_ROOT_PASSWORD="palmr123" MINIO_REGION="sa-east-1" MINIO_BUCKET_NAME="files" - PORT=3333 -BASE_URL=http://localhost:3333 +SERVER_IP="localhost" + diff --git a/apps/server/prisma/seed.ts b/apps/server/prisma/seed.ts index 74e5f15..47193da 100644 --- a/apps/server/prisma/seed.ts +++ b/apps/server/prisma/seed.ts @@ -1,5 +1,4 @@ import { prisma } from "../src/shared/prisma"; -import {env} from "../src/env" import bcrypt from "bcryptjs"; import crypto from "node:crypto"; diff --git a/apps/server/src/config/minio.config.local.ts b/apps/server/src/config/minio.config.local.ts index 29f26e4..e54d0a8 100644 --- a/apps/server/src/config/minio.config.local.ts +++ b/apps/server/src/config/minio.config.local.ts @@ -2,7 +2,7 @@ import { env } from "../env"; import { Client } from "minio"; export const minioLocalClient = new Client({ - endPoint: env.MINIO_ENDPOINT === "minio" ? "localhost" : env.MINIO_ENDPOINT, + endPoint: env.MINIO_ENDPOINT === "minio" ? env.SERVER_IP : env.MINIO_ENDPOINT, port: Number(env.MINIO_PORT), useSSL: env.MINIO_USE_SSL === "true", accessKey: env.MINIO_ROOT_USER, diff --git a/apps/server/src/env.ts b/apps/server/src/env.ts index 4149b36..b554749 100644 --- a/apps/server/src/env.ts +++ b/apps/server/src/env.ts @@ -9,10 +9,9 @@ const envSchema = z.object({ MINIO_ROOT_USER: z.string().min(1), MINIO_REGION: z.string().min(1), MINIO_BUCKET_NAME: z.string().min(1), - BASE_URL: z.string().min(1), - PORT: z.string().min(1), DATABASE_URL: z.string().min(1), + SERVER_IP: z.string().min(1), }); export const env = envSchema.parse(process.env); diff --git a/apps/web/.env b/apps/web/.env deleted file mode 100644 index 3d5084c..0000000 --- a/apps/web/.env +++ /dev/null @@ -1 +0,0 @@ -VITE_API_URL=http://localhost:3333 \ No newline at end of file diff --git a/apps/web/.env.example b/apps/web/.env.example deleted file mode 100644 index b111bff..0000000 --- a/apps/web/.env.example +++ /dev/null @@ -1 +0,0 @@ -# VITE_API_URL=http://localhost:3333 \ No newline at end of file diff --git a/apps/web/.eslintignore b/apps/web/.eslintignore deleted file mode 100644 index af6ab76..0000000 --- a/apps/web/.eslintignore +++ /dev/null @@ -1,20 +0,0 @@ -.now/* -*.css -.changeset -dist -esm/* -public/* -tests/* -scripts/* -*.config.js -.DS_Store -node_modules -coverage -.next -build -!.commitlintrc.cjs -!.lintstagedrc.cjs -!jest.config.js -!plopfile.js -!react-shim.js -!tsup.config.ts \ No newline at end of file diff --git a/apps/web/.eslintrc.json b/apps/web/.eslintrc.json deleted file mode 100644 index ad5fa64..0000000 --- a/apps/web/.eslintrc.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/eslintrc.json", - "env": { - "browser": false, - "es2021": true, - "node": true - }, - "extends": [ - "plugin:react/recommended", - "plugin:prettier/recommended", - "plugin:react-hooks/recommended", - "plugin:jsx-a11y/recommended" - ], - "plugins": [ - "react", - "unused-imports", - "import", - "@typescript-eslint", - "jsx-a11y", - "prettier" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 12, - "sourceType": "module" - }, - "settings": { - "react": { - "version": "detect" - } - }, - "rules": { - "no-console": "off", - "react/prop-types": "off", - "react/jsx-uses-react": "off", - "react/react-in-jsx-scope": "off", - "react-hooks/exhaustive-deps": "off", - "jsx-a11y/click-events-have-key-events": "off", - "jsx-a11y/interactive-supports-focus": "off", - "jsx-a11y/no-static-element-interactions": "off", - "prettier/prettier": "warn", - "no-unused-vars": "off", - "unused-imports/no-unused-vars": "off", - "unused-imports/no-unused-imports": "warn", - "@typescript-eslint/no-unused-vars": [ - "warn", - { - "args": "after-used", - "ignoreRestSiblings": false, - "argsIgnorePattern": "^_.*?$" - } - ], - "import/order": [ - "off", - { - "groups": [ - "type", - "builtin", - "object", - "external", - "internal", - "parent", - "sibling", - "index" - ], - "pathGroups": [ - { - "pattern": "~/**", - "group": "external", - "position": "after" - } - ], - "newlines-between": "always" - } - ], - "react/self-closing-comp": "warn", - "react/jsx-sort-props": [ - "warn", - { - "callbacksLast": true, - "shorthandFirst": true, - "noSortAlphabetically": false, - "reservedFirst": true - } - ], - "padding-line-between-statements": [ - "warn", - { - "blankLine": "always", - "prev": "*", - "next": "return" - }, - { - "blankLine": "always", - "prev": [ - "const", - "let", - "var" - ], - "next": "*" - }, - { - "blankLine": "any", - "prev": [ - "const", - "let", - "var" - ], - "next": [ - "const", - "let", - "var" - ] - } - ] - } -} \ No newline at end of file diff --git a/apps/web/.gitignore b/apps/web/.gitignore index a547bf3..5ef6a52 100644 --- a/apps/web/.gitignore +++ b/apps/web/.gitignore @@ -1,24 +1,41 @@ -# Logs -logs -*.log +# 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* -lerna-debug.log* +.pnpm-debug.log* -node_modules -dist -dist-ssr -*.local +# env files (can opt-in for committing if needed) +.env* -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/web/.npmrc b/apps/web/.npmrc deleted file mode 100644 index f819c90..0000000 --- a/apps/web/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -public-hoist-pattern[]=*@heroui/* -package-lock=true \ No newline at end of file diff --git a/apps/web/.prettierignore b/apps/web/.prettierignore new file mode 100644 index 0000000..b2dae58 --- /dev/null +++ b/apps/web/.prettierignore @@ -0,0 +1,4 @@ +/node_modules +/.next +/out +/build \ No newline at end of file diff --git a/apps/web/.prettierrc.json b/apps/web/.prettierrc.json index af95e92..0833f31 100644 --- a/apps/web/.prettierrc.json +++ b/apps/web/.prettierrc.json @@ -1,5 +1,14 @@ { - "plugins": ["@trivago/prettier-plugin-sort-imports"], + "importOrder": [ + "^(react/(.*)$)|^(react$)", + "^(next/(.*)$)|^(next$)", + "", + "", + "^@/(.*)$", + "^[./]" + ], + "importOrderParserPlugins": ["typescript", "jsx", "decorators-legacy"], + "plugins": ["@ianvs/prettier-plugin-sort-imports", "prettier-plugin-sort-json"], "printWidth": 120, "singleQuote": false, "tabWidth": 2, diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index 5f295b0..bb3f6f9 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -1,20 +1,46 @@ -FROM node:18-alpine AS builder +# Use the official Node.js image as the base image -WORKDIR /app/web +FROM node:18-alpine AS base -RUN npm install -g pnpm +# Install dependencies only when needed +FROM base AS deps +RUN apk add --no-cache libc6-compat +WORKDIR /app -COPY package.json . -COPY pnpm-lock.yaml . - -RUN pnpm install +# Install dependencies based on the preferred package manager +COPY package.json pnpm-lock.yaml ./ +RUN corepack enable pnpm && pnpm install --frozen-lockfile +# Rebuild the source code only when needed +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules COPY . . -RUN pnpm build +ENV NEXT_TELEMETRY_DISABLED=1 +ENV NODE_ENV=production -EXPOSE 4173 +RUN corepack enable pnpm && pnpm run build -ENV VITE_ROUTER_MODE=history +# Production image, copy all the files and run next +FROM base AS runner +WORKDIR /app -CMD ["pnpm", "preview", "--host"] +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 + +RUN addgroup --system --gid 1001 nodejs +RUN 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 5487 + +ENV PORT=5487 +ENV HOSTNAME="0.0.0.0" + +CMD ["node", "server.js"] \ No newline at end of file diff --git a/apps/web/README.md b/apps/web/README.md deleted file mode 100644 index c1bf328..0000000 --- a/apps/web/README.md +++ /dev/null @@ -1 +0,0 @@ -# ๐ŸŒด Palmr diff --git a/apps/web/components.json b/apps/web/components.json new file mode 100644 index 0000000..4fbe5b8 --- /dev/null +++ b/apps/web/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide", + "rsc": true, + "style": "new-york", + "tailwind": { + "config": "", + "css": "src/app/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "tsx": true +} diff --git a/apps/web/docker-compose.yml b/apps/web/docker-compose.yml new file mode 100644 index 0000000..ccaaa0d --- /dev/null +++ b/apps/web/docker-compose.yml @@ -0,0 +1,17 @@ +services: + web: + build: + context: . + dockerfile: Dockerfile + ports: + - "6644:3000" + environment: + - NODE_ENV=production + - NEXT_TELEMETRY_DISABLED=1 + - API_BASE_URL=http://host.docker.internal:3333 + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000"] + interval: 30s + timeout: 10s + retries: 3 diff --git a/apps/web/eslint.config.mjs b/apps/web/eslint.config.mjs new file mode 100644 index 0000000..c08b069 --- /dev/null +++ b/apps/web/eslint.config.mjs @@ -0,0 +1,66 @@ +/* eslint-disable import/no-anonymous-default-export */ +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { FlatCompat } from "@eslint/eslintrc"; +import js from "@eslint/js"; +import typescriptEslintEslintPlugin from "@typescript-eslint/eslint-plugin"; +import tsParser from "@typescript-eslint/parser"; +import prettier from "eslint-plugin-prettier"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}); + +export default [ + ...compat.extends("next", "next/core-web-vitals", "prettier"), + { + plugins: { + prettier, + }, + rules: { + "prettier/prettier": "error", + camelcase: "off", + "import/prefer-default-export": "off", + "react/jsx-filename-extension": "off", + "react/jsx-props-no-spreading": "off", + "react/no-unused-prop-types": "off", + "react/require-default-props": "off", + "react/no-unescaped-entities": "off", + "import/extensions": [ + "error", + "ignorePackages", + { + ts: "never", + tsx: "never", + js: "never", + jsx: "never", + }, + ], + }, + }, + ...compat.extends("plugin:@typescript-eslint/recommended", "prettier").map((config) => ({ + ...config, + files: ["**/*.+(ts|tsx)"], + })), + { + files: ["**/*.+(ts|tsx)"], + plugins: { + "@typescript-eslint": typescriptEslintEslintPlugin, + }, + languageOptions: { + parser: tsParser, + }, + rules: { + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "no-use-before-define": [0], + "@typescript-eslint/no-use-before-define": [1], + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-var-requires": "off", + }, + }, +]; diff --git a/apps/web/index.html b/apps/web/index.html deleted file mode 100644 index 4d88819..0000000 --- a/apps/web/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Palmr. - - - - - - - - - -
    - - - diff --git a/apps/web/src/locales/ar-SA.json b/apps/web/messages/ar-SA.json similarity index 97% rename from apps/web/src/locales/ar-SA.json rename to apps/web/messages/ar-SA.json index c6aac47..f087921 100644 --- a/apps/web/src/locales/ar-SA.json +++ b/apps/web/messages/ar-SA.json @@ -1,58 +1,4 @@ { - "login": { - "welcome": "ู…ุฑุญุจุง", - "signInToContinue": "ู‚ู… ุจุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„ ู„ู„ู…ุชุงุจุนุฉ", - "emailLabel": "ุงู„ุจุฑูŠุฏ ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ", - "emailPlaceholder": "ุฃุฏุฎู„ ุจุฑูŠุฏูƒ ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ", - "passwordLabel": "ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", - "passwordPlaceholder": "ุฃุฏุฎู„ ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", - "signIn": "ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„", - "signingIn": "ุฌุงุฑูŠ ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„...", - "forgotPassword": "ู†ุณูŠุช ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑุŸ", - "pageTitle": "ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„" - }, - "errors": { - "invalidCredentials": "ุจุฑูŠุฏ ุฅู„ูƒุชุฑูˆู†ูŠ ุฃูˆ ูƒู„ู…ุฉ ู…ุฑูˆุฑ ุบูŠุฑ ุตุญูŠุญุฉ", - "userNotFound": "ุงู„ู…ุณุชุฎุฏู… ุบูŠุฑ ู…ูˆุฌูˆุฏ", - "accountLocked": "ุชู… ู‚ูู„ ุงู„ุญุณุงุจ. ูŠุฑุฌู‰ ุงู„ู…ุญุงูˆู„ุฉ ู„ุงุญู‚ู‹ุง", - "unexpectedError": "ุญุฏุซ ุฎุทุฃ ุบูŠุฑ ู…ุชูˆู‚ุน. ูŠุฑุฌู‰ ุงู„ู…ุญุงูˆู„ุฉ ู…ุฑุฉ ุฃุฎุฑู‰" - }, - "validation": { - "invalidEmail": "ุนู†ูˆุงู† ุจุฑูŠุฏ ุฅู„ูƒุชุฑูˆู†ูŠ ุบูŠุฑ ุตุงู„ุญ", - "passwordMinLength": "ูŠุฌุจ ุฃู† ุชุญุชูˆูŠ ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ ุนู„ู‰ 6 ุฃุญุฑู ุนู„ู‰ ุงู„ุฃู‚ู„", - "firstNameRequired": "ุงู„ุงุณู… ุงู„ุฃูˆู„ ู…ุทู„ูˆุจ", - "lastNameRequired": "ุงุณู… ุงู„ุนุงุฆู„ุฉ ู…ุทู„ูˆุจ", - "usernameLength": "ูŠุฌุจ ุฃู† ูŠุญุชูˆูŠ ุงุณู… ุงู„ู…ุณุชุฎุฏู… ุนู„ู‰ 3 ุฃุญุฑู ุนู„ู‰ ุงู„ุฃู‚ู„", - "usernameSpaces": "ู„ุง ูŠู…ูƒู† ุฃู† ูŠุญุชูˆูŠ ุงุณู… ุงู„ู…ุณุชุฎุฏู… ุนู„ู‰ ูุฑุงุบุงุช", - "passwordLength": "ูŠุฌุจ ุฃู† ุชุญุชูˆูŠ ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ ุนู„ู‰ 8 ุฃุญุฑู ุนู„ู‰ ุงู„ุฃู‚ู„", - "passwordsMatch": "ูƒู„ู…ุชุง ุงู„ู…ุฑูˆุฑ ุบูŠุฑ ู…ุชุทุงุจู‚ุชูŠู†" - }, - "fileSelector": { - "availableFiles": "ุงู„ู…ู„ูุงุช ุงู„ู…ุชุงุญุฉ ({{count}})", - "shareFiles": "ู…ุดุงุฑูƒุฉ ุงู„ู…ู„ูุงุช ({{count}})", - "searchPlaceholder": "ุงุจุญุซ ุนู† ุงู„ู…ู„ูุงุช...", - "noMatchingFiles": "ู„ุง ุชูˆุฌุฏ ู…ู„ูุงุช ู…ุทุงุจู‚ุฉ", - "noAvailableFiles": "ู„ุง ุชูˆุฌุฏ ู…ู„ูุงุช ู…ุชุงุญุฉ", - "noFilesInShare": "ู„ุง ุชูˆุฌุฏ ู…ู„ูุงุช ู„ู„ู…ุดุงุฑูƒุฉ", - "saveChanges": "ุงุญูุธ ุงู„ุชุบูŠูŠุฑุงุช" - }, - "recipientSelector": { - "emailPlaceholder": "ุฃุฏุฎู„ ุจุฑูŠุฏ ุงู„ู…ุณุชู„ู… ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ", - "add": "ุฃุถู", - "recipients": "ุงู„ู…ุณุชู„ู…ูˆู† ({{count}})", - "notifyAll": "ุฃุจู„ุบ ุงู„ุฌู…ูŠุน", - "noRecipients": "ู„ู… ูŠุชู… ุฅุถุงูุฉ ุฃูŠ ู…ุณุชู„ู…ูŠู† ุจุนุฏ", - "addSuccess": "ุชู… ุฅุถุงูุฉ ุงู„ู…ุณุชู„ู… ุจู†ุฌุงุญ", - "addError": "ูุดู„ ููŠ ุฅุถุงูุฉ ุงู„ู…ุณุชู„ู…", - "removeSuccess": "ุชู… ุฅุฒุงู„ุฉ ุงู„ู…ุณุชู„ู… ุจู†ุฌุงุญ", - "removeError": "ูุดู„ ููŠ ุฅุฒุงู„ุฉ ุงู„ู…ุณุชู„ู…", - "sendingNotifications": "ุฌุงุฑูŠ ุฅุฑุณุงู„ ุงู„ุฅุดุนุงุฑุงุช...", - "notifySuccess": "ุชู… ุฅุนู„ุงู… ุงู„ู…ุณุชู„ู…ูŠู† ุจู†ุฌุงุญ", - "notifyError": "ูุดู„ ููŠ ุฅุนู„ุงู… ุงู„ู…ุณุชู„ู…ูŠู†" - }, - "navigation": { - "dashboard": "ู„ูˆุญุฉ ุงู„ุชุญูƒู…" - }, "common": { "loading": "ุฌุงุฑูŠ ุงู„ุชุญู…ูŠู„ุŒ ูŠุฑุฌู‰ ุงู„ุงู†ุชุธุงุฑ...", "cancel": "ุฅู„ุบุงุก", @@ -78,6 +24,22 @@ "success": "ุชู… ุฅู†ุดุงุก ุงู„ู…ุดุงุฑูƒุฉ ุจู†ุฌุงุญ", "error": "ูุดู„ ููŠ ุฅู†ุดุงุก ุงู„ู…ุดุงุฑูƒุฉ" }, + "dashboard": { + "loadError": "ูุดู„ ููŠ ุชุญู…ูŠู„ ุจูŠุงู†ุงุช ู„ูˆุญุฉ ุงู„ุชุญูƒู…", + "linkCopied": "ุชู… ู†ุณุฎ ุงู„ุฑุงุจุท ุฅู„ู‰ ุงู„ุญุงูุธุฉ", + "pageTitle": "ู„ูˆุญุฉ ุงู„ุชุญูƒู…", + "breadcrumb": "ู„ูˆุญุฉ ุงู„ุชุญูƒู…" + }, + "emptyState": { + "noFiles": "ู„ู… ูŠุชู… ุฑูุน ุฃูŠ ู…ู„ูุงุช ุจุนุฏ", + "uploadFile": "ุฑูุน ู…ู„ู" + }, + "errors": { + "invalidCredentials": "ุจุฑูŠุฏ ุฅู„ูƒุชุฑูˆู†ูŠ ุฃูˆ ูƒู„ู…ุฉ ู…ุฑูˆุฑ ุบูŠุฑ ุตุญูŠุญุฉ", + "userNotFound": "ุงู„ู…ุณุชุฎุฏู… ุบูŠุฑ ู…ูˆุฌูˆุฏ", + "accountLocked": "ุชู… ู‚ูู„ ุงู„ุญุณุงุจ. ูŠุฑุฌู‰ ุงู„ู…ุญุงูˆู„ุฉ ู„ุงุญู‚ู‹ุง", + "unexpectedError": "ุญุฏุซ ุฎุทุฃ ุบูŠุฑ ู…ุชูˆู‚ุน. ูŠุฑุฌู‰ ุงู„ู…ุญุงูˆู„ุฉ ู…ุฑุฉ ุฃุฎุฑู‰" + }, "fileActions": { "editFile": "ุชุนุฏูŠู„ ุงู„ู…ู„ู", "nameLabel": "ุงู„ุงุณู…", @@ -86,9 +48,16 @@ "descriptionLabel": "ุงู„ูˆุตู", "descriptionPlaceholder": "ุฃุฏุฎู„ ูˆุตู ุงู„ู…ู„ู", "deleteFile": "ุญุฐู ุงู„ู…ู„ู", - "deleteConfirmation": "ู‡ู„ ุฃู†ุช ู…ุชุฃูƒุฏ ุฃู†ูƒ ุชุฑูŠุฏ ุญุฐู \"{{fileName}}\"ุŸ", + "deleteConfirmation": "ู‡ู„ ุฃู†ุช ู…ุชุฃูƒุฏ ุฃู†ูƒ ุชุฑูŠุฏ ุญุฐู ุŸ", "deleteWarning": "ู‡ุฐุง ุงู„ุฅุฌุฑุงุก ู„ุง ูŠู…ูƒู† ุงู„ุชุฑุงุฌุน ุนู†ู‡." }, + "fileManager": { + "downloadError": "ูุดู„ ููŠ ุชู†ุฒูŠู„ ุงู„ู…ู„ู", + "updateSuccess": "ุชู… ุชุญุฏูŠุซ ุงู„ู…ู„ู ุจู†ุฌุงุญ", + "updateError": "ูุดู„ ููŠ ุชุญุฏูŠุซ ุงู„ู…ู„ู", + "deleteSuccess": "ุชู… ุญุฐู ุงู„ู…ู„ู ุจู†ุฌุงุญ", + "deleteError": "ูุดู„ ููŠ ุญุฐู ุงู„ู…ู„ู" + }, "filePreview": { "loading": "ุฌุงุฑูŠ ุชุญู…ูŠู„ ุงู„ู…ุนุงูŠู†ุฉ...", "notAvailable": "ุงู„ู…ุนุงูŠู†ุฉ ุบูŠุฑ ู…ุชูˆูุฑุฉ", @@ -98,68 +67,21 @@ "loadError": "ูุดู„ ููŠ ุชุญู…ูŠู„ ุงู„ู…ุนุงูŠู†ุฉ", "downloadError": "ูุดู„ ููŠ ุชู†ุฒูŠู„ ุงู„ู…ู„ู" }, - "generateShareLink": { - "generateTitle": "ุฅู†ุดุงุก ุฑุงุจุท ุงู„ู…ุดุงุฑูƒุฉ", - "updateTitle": "ุชุญุฏูŠุซ ุฑุงุจุท ุงู„ู…ุดุงุฑูƒุฉ", - "generateDescription": "ุฃู†ุดุฆ ุฑุงุจุทุงู‹ ู„ู…ุดุงุฑูƒุฉ ู…ู„ูุงุชูƒ", - "updateDescription": "ู‚ู… ุจุชุญุฏูŠุซ ุงู„ู„ู‚ุจ ู„ู‡ุฐุง ุงู„ุฑุงุจุท", - "aliasPlaceholder": "ุฃุฏุฎู„ ู„ู‚ุจู‹ุง", - "linkReady": "ุฑุงุจุท ุงู„ู…ุดุงุฑูƒุฉ ุฌุงู‡ุฒ:", - "generateButton": "ุฅู†ุดุงุก ุงู„ุฑุงุจุท", - "updateButton": "ุชุญุฏูŠุซ ุงู„ุฑุงุจุท", - "copyButton": "ู†ุณุฎ ุงู„ุฑุงุจุท", - "success": "ุชู… ุฅู†ุดุงุก ุงู„ุฑุงุจุท ุจู†ุฌุงุญ", - "error": "ูุดู„ ููŠ ุฅู†ุดุงุก ุงู„ุฑุงุจุท", - "copied": "ุชู… ู†ุณุฎ ุงู„ุฑุงุจุท ุฅู„ู‰ ุงู„ุญุงูุธุฉ" + "fileSelector": { + "availableFiles": "ุงู„ู…ู„ูุงุช ุงู„ู…ุชุงุญุฉ ({{count}})", + "shareFiles": "ู…ุดุงุฑูƒุฉ ุงู„ู…ู„ูุงุช ({{count}})", + "searchPlaceholder": "ุงุจุญุซ ุนู† ุงู„ู…ู„ูุงุช...", + "noMatchingFiles": "ู„ุง ุชูˆุฌุฏ ู…ู„ูุงุช ู…ุทุงุจู‚ุฉ", + "noAvailableFiles": "ู„ุง ุชูˆุฌุฏ ู…ู„ูุงุช ู…ุชุงุญุฉ", + "noFilesInShare": "ู„ุง ุชูˆุฌุฏ ู…ู„ูุงุช ู„ู„ู…ุดุงุฑูƒุฉ", + "saveChanges": "ุงุญูุธ ุงู„ุชุบูŠูŠุฑุงุช" }, - "shareActions": { - "deleteTitle": "ุญุฐู ุงู„ู…ุดุงุฑูƒุฉ", - "deleteConfirmation": "ู‡ู„ ุฃู†ุช ู…ุชุฃูƒุฏ ู…ู† ุฑุบุจุชูƒ ููŠ ุญุฐู ู‡ุฐู‡ ุงู„ู…ุดุงุฑูƒุฉุŸ ู‡ุฐุง ุงู„ุฅุฌุฑุงุก ู„ุง ูŠู…ูƒู† ุงู„ุชุฑุงุฌุน ุนู†ู‡.", - "editTitle": "ุชุนุฏูŠู„ ุงู„ู…ุดุงุฑูƒุฉ", - "nameLabel": "ุงุณู… ุงู„ู…ุดุงุฑูƒุฉ", - "expirationLabel": "ุชุงุฑูŠุฎ ุงู„ุงู†ุชู‡ุงุก", - "expirationPlaceholder": "MM/DD/YYYY HH:MM", - "maxViewsLabel": "ุฃู‚ุตู‰ ุนุฏุฏ ู„ู„ู…ุดุงู‡ุฏุงุช", - "maxViewsPlaceholder": "ุงุชุฑูƒู‡ ูุงุฑุบุงู‹ ู„ู„ู…ุญุฏูˆุฏูŠุฉ ุบูŠุฑ ุงู„ู…ุญุฏูˆุฏุฉ", - "passwordProtection": "ู…ุญู…ูŠ ุจูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", - "passwordLabel": "ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", - "passwordPlaceholder": "ุฃุฏุฎู„ ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", - "newPasswordLabel": "ูƒู„ู…ุฉ ู…ุฑูˆุฑ ุฌุฏูŠุฏุฉ (ุงุชุฑูƒู‡ ูุงุฑุบุงู‹ ู„ู„ุงุญุชูุงุธ ุจุงู„ุญุงู„ูŠ)", - "newPasswordPlaceholder": "ุฃุฏุฎู„ ูƒู„ู…ุฉ ู…ุฑูˆุฑ ุฌุฏูŠุฏุฉ", - "manageFilesTitle": "ุฅุฏุงุฑุฉ ุงู„ู…ู„ูุงุช", - "manageRecipientsTitle": "ุฅุฏุงุฑุฉ ุงู„ู…ุณุชู„ู…ูŠู†", - "editSuccess": "ุชู… ุชุญุฏูŠุซ ุงู„ู…ุดุงุฑูƒุฉ ุจู†ุฌุงุญ", - "editError": "ูุดู„ ููŠ ุชุญุฏูŠุซ ุงู„ู…ุดุงุฑูƒุฉ" - }, - "shareDetails": { - "title": "ุชูุงุตูŠู„ ุงู„ู…ุดุงุฑูƒุฉ", - "subtitle": "ู…ุนู„ูˆู…ุงุช ู…ูุตู„ุฉ ุนู† ู‡ุฐู‡ ุงู„ู…ุดุงุฑูƒุฉ", - "basicInfo": "ุงู„ู…ุนู„ูˆู…ุงุช ุงู„ุฃุณุงุณูŠุฉ", - "name": "ุงู„ุงุณู…", - "untitled": "ุจุฏูˆู† ุนู†ูˆุงู†", - "views": "ุงู„ู…ุดุงู‡ุฏุงุช", - "dates": "ุงู„ุชูˆุงุฑูŠุฎ", - "created": "ุชู… ุงู„ุฅู†ุดุงุก", - "expires": "ุชู†ุชู‡ูŠ", - "never": "ุฃุจุฏู‹ุง", - "security": "ุงู„ุฃู…ุงู†", - "passwordProtected": "ู…ุญู…ูŠ ุจูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", - "publicAccess": "ุงู„ูˆุตูˆู„ ุงู„ุนุงู…", - "maxViews": "ุฃู‚ุตู‰ ุนุฏุฏ ู„ู„ู…ุดุงู‡ุฏุงุช: {{count}}", - "files": "ุงู„ู…ู„ูุงุช ({{count}})", - "recipients": "ุงู„ู…ุณุชู„ู…ูˆู† ({{count}})", - "notAvailable": "ุบูŠุฑ ู…ุชูˆูุฑ", - "invalidDate": "ุชุงุฑูŠุฎ ุบูŠุฑ ุตุงู„ุญ", - "loadError": "ูุดู„ ููŠ ุชุญู…ูŠู„ ุชูุงุตูŠู„ ุงู„ู…ุดุงุฑูƒุฉ" - }, - "uploadFile": { - "title": "ุฑูุน ุงู„ู…ู„ู", - "selectFile": "ุงุถุบุท ู„ุงุฎุชูŠุงุฑ ู…ู„ู", - "preview": "ุงู„ู…ุนุงูŠู†ุฉ", - "uploadProgress": "ุชู‚ุฏู… ุงู„ุฑูุน", - "upload": "ุฑูุน", - "success": "ุชู… ุฑูุน ุงู„ู…ู„ู ุจู†ุฌุงุญ", - "error": "ูุดู„ ููŠ ุฑูุน ุงู„ู…ู„ู" + "files": { + "title": "ูƒู„ ุงู„ู…ู„ูุงุช", + "uploadFile": "ุฑูุน ู…ู„ู", + "loadError": "ูุดู„ ููŠ ุชุญู…ูŠู„ ุงู„ู…ู„ูุงุช", + "pageTitle": "ู…ู„ูุงุชูŠ", + "breadcrumb": "ู…ู„ูุงุชูŠ" }, "filesTable": { "ariaLabel": "ุฌุฏูˆู„ ุงู„ู…ู„ูุงุช", @@ -179,119 +101,10 @@ "delete": "ุญุฐู" } }, - "sharesTable": { - "ariaLabel": "ุฌุฏูˆู„ ุงู„ู…ุดุงุฑูƒุงุช", - "never": "ุฃุจุฏู‹ุง", - "columns": { - "name": "ุงู„ุงุณู…", - "createdAt": "ุชุงุฑูŠุฎ ุงู„ุฅู†ุดุงุก", - "expiresAt": "ุชุงุฑูŠุฎ ุงู„ุงู†ุชู‡ุงุก", - "status": "ุงู„ุญุงู„ุฉ", - "security": "ุงู„ุฃู…ุงู†", - "files": "ุงู„ู…ู„ูุงุช", - "recipients": "ุงู„ู…ุณุชู„ู…ูˆู†", - "actions": "ุงู„ุฅุฌุฑุงุกุงุช" - }, - "status": { - "neverExpires": "ู„ุง ุชู†ุชู‡ูŠ", - "active": "ู†ุดุทุฉ", - "expired": "ู…ู†ุชู‡ูŠุฉ" - }, - "security": { - "protected": "ู…ุญู…ูŠ", - "public": "ุนุงู…" - }, - "filesCount": "{{count}} ู…ู„ู", - "recipientsCount": "{{count}} ู…ุณุชู„ู…", - "actions": { - "menu": "ู‚ุงุฆู…ุฉ ุฅุฌุฑุงุกุงุช ุงู„ู…ุดุงุฑูƒุฉ", - "edit": "ุชุนุฏูŠู„", - "manageFiles": "ุฅุฏุงุฑุฉ ุงู„ู…ู„ูุงุช", - "manageRecipients": "ุฅุฏุงุฑุฉ ุงู„ู…ุณุชู„ู…ูŠู†", - "viewDetails": "ุนุฑุถ ุงู„ุชูุงุตูŠู„", - "generateLink": "ุฅู†ุดุงุก ุงู„ุฑุงุจุท", - "editLink": "ุชุนุฏูŠู„ ุงู„ุฑุงุจุท", - "copyLink": "ู†ุณุฎ ุงู„ุฑุงุจุท", - "notifyRecipients": "ุฅุนู„ุงู… ุงู„ู…ุณุชู„ู…ูŠู†", - "delete": "ุญุฐู" - } - }, "footer": { "poweredBy": "ู…ุฏุนูˆู… ู…ู†", "kyanHomepage": "ุงู„ุตูุญุฉ ุงู„ุฑุฆูŠุณูŠุฉ ู„ู€ Kyantech" }, - "fileManager": { - "downloadError": "ูุดู„ ููŠ ุชู†ุฒูŠู„ ุงู„ู…ู„ู", - "updateSuccess": "ุชู… ุชุญุฏูŠุซ ุงู„ู…ู„ู ุจู†ุฌุงุญ", - "updateError": "ูุดู„ ููŠ ุชุญุฏูŠุซ ุงู„ู…ู„ู", - "deleteSuccess": "ุชู… ุญุฐู ุงู„ู…ู„ู ุจู†ุฌุงุญ", - "deleteError": "ูุดู„ ููŠ ุญุฐู ุงู„ู…ู„ู" - }, - "shareManager": { - "deleteSuccess": "ุชู… ุญุฐู ุงู„ู…ุดุงุฑูƒุฉ ุจู†ุฌุงุญ", - "deleteError": "ูุดู„ ููŠ ุญุฐู ุงู„ู…ุดุงุฑูƒุฉ", - "updateSuccess": "ุชู… ุชุญุฏูŠุซ ุงู„ู…ุดุงุฑูƒุฉ ุจู†ุฌุงุญ", - "updateError": "ูุดู„ ููŠ ุชุญุฏูŠุซ ุงู„ู…ุดุงุฑูƒุฉ", - "filesUpdateSuccess": "ุชู… ุชุญุฏูŠุซ ุงู„ู…ู„ูุงุช ุจู†ุฌุงุญ", - "filesUpdateError": "ูุดู„ ููŠ ุชุญุฏูŠุซ ุงู„ู…ู„ูุงุช", - "recipientsUpdateSuccess": "ุชู… ุชุญุฏูŠุซ ุงู„ู…ุณุชู„ู…ูŠู† ุจู†ุฌุงุญ", - "recipientsUpdateError": "ูุดู„ ููŠ ุชุญุฏูŠุซ ุงู„ู…ุณุชู„ู…ูŠู†", - "linkGenerateSuccess": "ุชู… ุฅู†ุดุงุก ุฑุงุจุท ุงู„ู…ุดุงุฑูƒุฉ ุจู†ุฌุงุญ", - "linkGenerateError": "ูุดู„ ููŠ ุฅู†ุดุงุก ุฑุงุจุท ุงู„ู…ุดุงุฑูƒุฉ", - "notifyLoading": "ุฌุงุฑูŠ ุฅุฑุณุงู„ ุงู„ุฅุดุนุงุฑุงุช...", - "notifySuccess": "ุชู… ุฅุนู„ุงู… ุงู„ู…ุณุชู„ู…ูŠู† ุจู†ุฌุงุญ", - "notifyError": "ูุดู„ ููŠ ุฅุนู„ุงู… ุงู„ู…ุณุชู„ู…ูŠู†" - }, - "quickAccess": { - "files": { - "title": "ู…ู„ูุงุชูŠ", - "description": "ุงู„ูˆุตูˆู„ ุฅู„ู‰ ุงู„ู…ู„ูุงุช ุงู„ู…ุฑููˆุนุฉ ูˆุฅุฏุงุฑุชู‡ุง" - }, - "shares": { - "title": "ู…ุดุงุฑูƒุงุชูŠ", - "description": "ุนุฑุถ ูˆุฅุฏุงุฑุฉ ุงู„ู…ู„ูุงุช ุงู„ู…ุดุชุฑูƒุฉ" - } - }, - "recentFiles": { - "title": "ุงู„ุฑูุน ุงู„ุฃุฎูŠุฑ", - "viewAll": "ุนุฑุถ ุงู„ูƒู„", - "uploadFile": "ุฑูุน ู…ู„ู", - "noFiles": "ู„ู… ูŠุชู… ุฑูุน ุฃูŠ ู…ู„ูุงุช ุจุนุฏ" - }, - "recentShares": { - "title": "ุงู„ู…ุดุงุฑูƒุงุช ุงู„ุฃุฎูŠุฑุฉ", - "viewAll": "ุนุฑุถ ุงู„ูƒู„", - "createShare": "ุฅู†ุดุงุก ู…ุดุงุฑูƒุฉ", - "noShares": "ู„ู… ูŠุชู… ุฅู†ุดุงุก ุฃูŠ ู…ุดุงุฑูƒุงุช ุจุนุฏ", - "createFirst": "ุฃู†ุดุฆ ู…ุดุงุฑูƒุชูƒ ุงู„ุฃูˆู„ู‰" - }, - "storageUsage": { - "title": "ุงุณุชุฎุฏุงู… ุงู„ุชุฎุฒูŠู†", - "ariaLabel": "ุดุฑูŠุท ุชู‚ุฏู… ุงุณุชุฎุฏุงู… ุงู„ุชุฎุฒูŠู†", - "used": "ุงู„ู…ุณุชุฎุฏู…ุฉ: {{size}}", - "available": "ุงู„ู…ุชุงุญุฉ: {{size}}" - }, - "dashboard": { - "loadError": "ูุดู„ ููŠ ุชุญู…ูŠู„ ุจูŠุงู†ุงุช ู„ูˆุญุฉ ุงู„ุชุญูƒู…", - "linkCopied": "ุชู… ู†ุณุฎ ุงู„ุฑุงุจุท ุฅู„ู‰ ุงู„ุญุงูุธุฉ", - "pageTitle": "ู„ูˆุญุฉ ุงู„ุชุญูƒู…", - "breadcrumb": "ู„ูˆุญุฉ ุงู„ุชุญูƒู…" - }, - "emptyState": { - "noFiles": "ู„ู… ูŠุชู… ุฑูุน ุฃูŠ ู…ู„ูุงุช ุจุนุฏ", - "uploadFile": "ุฑูุน ู…ู„ู" - }, - "files": { - "title": "ูƒู„ ุงู„ู…ู„ูุงุช", - "uploadFile": "ุฑูุน ู…ู„ู", - "loadError": "ูุดู„ ููŠ ุชุญู…ูŠู„ ุงู„ู…ู„ูุงุช", - "pageTitle": "ู…ู„ูุงุชูŠ", - "breadcrumb": "ู…ู„ูุงุชูŠ" - }, - "searchBar": { - "placeholder": "ุงุจุญุซ ุนู† ุงู„ู…ู„ูุงุช...", - "results": "ุชู… ุงู„ุนุซูˆุฑ ุนู„ู‰ {{filtered}} ู…ู† {{total}} ู…ู„ู" - }, "forgotPassword": { "emailLabel": "ุงู„ุจุฑูŠุฏ ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ", "emailPlaceholder": "ุฃุฏุฎู„ ุจุฑูŠุฏูƒ ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ", @@ -303,6 +116,20 @@ "resetInstructions": "ุชู… ุฅุฑุณุงู„ ุชุนู„ูŠู…ุงุช ุฅุนุงุฏุฉ ุงู„ุชุนูŠูŠู† ุฅู„ู‰ ุจุฑูŠุฏูƒ ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ", "pageTitle": "ู†ุณูŠุช ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ" }, + "generateShareLink": { + "generateTitle": "ุฅู†ุดุงุก ุฑุงุจุท ุงู„ู…ุดุงุฑูƒุฉ", + "updateTitle": "ุชุญุฏูŠุซ ุฑุงุจุท ุงู„ู…ุดุงุฑูƒุฉ", + "generateDescription": "ุฃู†ุดุฆ ุฑุงุจุทุงู‹ ู„ู…ุดุงุฑูƒุฉ ู…ู„ูุงุชูƒ", + "updateDescription": "ู‚ู… ุจุชุญุฏูŠุซ ุงู„ู„ู‚ุจ ู„ู‡ุฐุง ุงู„ุฑุงุจุท", + "aliasPlaceholder": "ุฃุฏุฎู„ ู„ู‚ุจู‹ุง", + "linkReady": "ุฑุงุจุท ุงู„ู…ุดุงุฑูƒุฉ ุฌุงู‡ุฒ:", + "generateButton": "ุฅู†ุดุงุก ุงู„ุฑุงุจุท", + "updateButton": "ุชุญุฏูŠุซ ุงู„ุฑุงุจุท", + "copyButton": "ู†ุณุฎ ุงู„ุฑุงุจุท", + "success": "ุชู… ุฅู†ุดุงุก ุงู„ุฑุงุจุท ุจู†ุฌุงุญ", + "error": "ูุดู„ ููŠ ุฅู†ุดุงุก ุงู„ุฑุงุจุท", + "copied": "ุชู… ู†ุณุฎ ุงู„ุฑุงุจุท ุฅู„ู‰ ุงู„ุญุงูุธุฉ" + }, "home": { "description": "ุงู„ุจุฏูŠู„ ู…ูุชูˆุญ ุงู„ู…ุตุฏุฑ ู„ู€ WeTransfer. ุดุงุฑูƒ ู…ู„ูุงุชูƒ ุจุฃู…ุงู†ุŒ ุฏูˆู† ุชุชุจุน ุฃูˆ ู‚ูŠูˆุฏ.", "documentation": "ุงู„ุชูˆุซูŠู‚", @@ -314,6 +141,46 @@ }, "pageTitle": "ุงู„ุตูุญุฉ ุงู„ุฑุฆูŠุณูŠุฉ" }, + "login": { + "welcome": "ู…ุฑุญุจุง ุจูƒ", + "signInToContinue": "ู‚ู… ุจุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„ ู„ู„ู…ุชุงุจุนุฉ", + "emailLabel": "ุงู„ุจุฑูŠุฏ ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ", + "emailPlaceholder": "ุฃุฏุฎู„ ุจุฑูŠุฏูƒ ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ", + "passwordLabel": "ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", + "passwordPlaceholder": "ุฃุฏุฎู„ ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", + "signIn": "ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„", + "signingIn": "ุฌุงุฑูŠ ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„...", + "forgotPassword": "ู†ุณูŠุช ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑุŸ", + "pageTitle": "ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„" + }, + "logo": { + "labels": { + "appLogo": "ุดุนุงุฑ ุงู„ุชุทุจูŠู‚" + }, + "buttons": { + "upload": "ุฑูุน ุงู„ุดุนุงุฑ", + "remove": "ุญุฐู ุงู„ุดุนุงุฑ" + }, + "messages": { + "uploadSuccess": "ุชู… ุฑูุน ุงู„ุดุนุงุฑ ุจู†ุฌุงุญ", + "removeSuccess": "ุชู… ุญุฐู ุงู„ุดุนุงุฑ ุจู†ุฌุงุญ" + }, + "errors": { + "uploadFailed": "ูุดู„ ููŠ ุฑูุน ุงู„ุดุนุงุฑ", + "removeFailed": "ูุดู„ ููŠ ุญุฐู ุงู„ุดุนุงุฑ" + } + }, + "navbar": { + "logoAlt": "ุดุนุงุฑ ุงู„ุชุทุจูŠู‚", + "profileMenu": "ู‚ุงุฆู…ุฉ ุงู„ู…ู„ู ุงู„ุดุฎุตูŠ", + "profile": "ุงู„ู…ู„ู ุงู„ุดุฎุตูŠ", + "settings": "ุงู„ุฅุนุฏุงุฏุงุช", + "usersManagement": "ุฅุฏุงุฑุฉ ุงู„ู…ุณุชุฎุฏู…ูŠู†", + "logout": "ุชุณุฌูŠู„ ุงู„ุฎุฑูˆุฌ" + }, + "navigation": { + "dashboard": "ู„ูˆุญุฉ ุงู„ุชุญูƒู…" + }, "profile": { "password": { "title": "ุชุบูŠูŠุฑ ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", @@ -356,6 +223,43 @@ }, "pageTitle": "ุงู„ู…ู„ู ุงู„ุดุฎุตูŠ" }, + "quickAccess": { + "files": { + "title": "ู…ู„ูุงุชูŠ", + "description": "ุงู„ูˆุตูˆู„ ุฅู„ู‰ ุงู„ู…ู„ูุงุช ุงู„ู…ุฑููˆุนุฉ ูˆุฅุฏุงุฑุชู‡ุง" + }, + "shares": { + "title": "ู…ุดุงุฑูƒุงุชูŠ", + "description": "ุนุฑุถ ูˆุฅุฏุงุฑุฉ ุงู„ู…ู„ูุงุช ุงู„ู…ุดุชุฑูƒุฉ" + } + }, + "recentFiles": { + "title": "ุงู„ุฑูุน ุงู„ุฃุฎูŠุฑ", + "viewAll": "ุนุฑุถ ุงู„ูƒู„", + "uploadFile": "ุฑูุน ู…ู„ู", + "noFiles": "ู„ู… ูŠุชู… ุฑูุน ุฃูŠ ู…ู„ูุงุช ุจุนุฏ" + }, + "recentShares": { + "title": "ุงู„ู…ุดุงุฑูƒุงุช ุงู„ุฃุฎูŠุฑุฉ", + "viewAll": "ุนุฑุถ ุงู„ูƒู„", + "createShare": "ุฅู†ุดุงุก ู…ุดุงุฑูƒุฉ", + "noShares": "ู„ู… ูŠุชู… ุฅู†ุดุงุก ุฃูŠ ู…ุดุงุฑูƒุงุช ุจุนุฏ", + "createFirst": "ุฃู†ุดุฆ ู…ุดุงุฑูƒุชูƒ ุงู„ุฃูˆู„ู‰" + }, + "recipientSelector": { + "emailPlaceholder": "ุฃุฏุฎู„ ุจุฑูŠุฏ ุงู„ู…ุณุชู„ู… ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ", + "add": "ุฃุถู", + "recipients": "ุงู„ู…ุณุชู„ู…ูˆู† ({{count}})", + "notifyAll": "ุฃุจู„ุบ ุงู„ุฌู…ูŠุน", + "noRecipients": "ู„ู… ูŠุชู… ุฅุถุงูุฉ ุฃูŠ ู…ุณุชู„ู…ูŠู† ุจุนุฏ", + "addSuccess": "ุชู… ุฅุถุงูุฉ ุงู„ู…ุณุชู„ู… ุจู†ุฌุงุญ", + "addError": "ูุดู„ ููŠ ุฅุถุงูุฉ ุงู„ู…ุณุชู„ู…", + "removeSuccess": "ุชู… ุฅุฒุงู„ุฉ ุงู„ู…ุณุชู„ู… ุจู†ุฌุงุญ", + "removeError": "ูุดู„ ููŠ ุฅุฒุงู„ุฉ ุงู„ู…ุณุชู„ู…", + "sendingNotifications": "ุฌุงุฑูŠ ุฅุฑุณุงู„ ุงู„ุฅุดุนุงุฑุงุช...", + "notifySuccess": "ุชู… ุฅุนู„ุงู… ุงู„ู…ุณุชู„ู…ูŠู† ุจู†ุฌุงุญ", + "notifyError": "ูุดู„ ููŠ ุฅุนู„ุงู… ุงู„ู…ุณุชู„ู…ูŠู†" + }, "resetPassword": { "pageTitle": "ุฅุนุงุฏุฉ ุชุนูŠูŠู† ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", "header": { @@ -379,6 +283,10 @@ "invalidToken": "ุฑู…ุฒ ุฅุนุงุฏุฉ ุงู„ุชุนูŠูŠู† ุบูŠุฑ ุตุงู„ุญ ุฃูˆ ู…ูู‚ูˆุฏ" } }, + "searchBar": { + "placeholder": "ุงุจุญุซ ุนู† ุงู„ู…ู„ูุงุช...", + "results": "ุชู… ุงู„ุนุซูˆุฑ ุนู„ู‰ {{filtered}} ู…ู† {{total}} ู…ู„ู" + }, "settings": { "groups": { "defaultDescription": "ุฎูŠุงุฑุงุช ุงู„ุชูƒูˆูŠู†", @@ -513,6 +421,61 @@ }, "pageTitle": "ุงู„ู…ุดุงุฑูƒุฉ" }, + "shareActions": { + "deleteTitle": "ุญุฐู ุงู„ู…ุดุงุฑูƒุฉ", + "deleteConfirmation": "ู‡ู„ ุฃู†ุช ู…ุชุฃูƒุฏ ู…ู† ุฑุบุจุชูƒ ููŠ ุญุฐู ู‡ุฐู‡ ุงู„ู…ุดุงุฑูƒุฉุŸ ู‡ุฐุง ุงู„ุฅุฌุฑุงุก ู„ุง ูŠู…ูƒู† ุงู„ุชุฑุงุฌุน ุนู†ู‡.", + "editTitle": "ุชุนุฏูŠู„ ุงู„ู…ุดุงุฑูƒุฉ", + "nameLabel": "ุงุณู… ุงู„ู…ุดุงุฑูƒุฉ", + "expirationLabel": "ุชุงุฑูŠุฎ ุงู„ุงู†ุชู‡ุงุก", + "expirationPlaceholder": "MM/DD/YYYY HH:MM", + "maxViewsLabel": "ุฃู‚ุตู‰ ุนุฏุฏ ู„ู„ู…ุดุงู‡ุฏุงุช", + "maxViewsPlaceholder": "ุงุชุฑูƒู‡ ูุงุฑุบุงู‹ ู„ู„ู…ุญุฏูˆุฏูŠุฉ ุบูŠุฑ ุงู„ู…ุญุฏูˆุฏุฉ", + "passwordProtection": "ู…ุญู…ูŠ ุจูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", + "passwordLabel": "ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", + "passwordPlaceholder": "ุฃุฏุฎู„ ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", + "newPasswordLabel": "ูƒู„ู…ุฉ ู…ุฑูˆุฑ ุฌุฏูŠุฏุฉ (ุงุชุฑูƒู‡ ูุงุฑุบุงู‹ ู„ู„ุงุญุชูุงุธ ุจุงู„ุญุงู„ูŠ)", + "newPasswordPlaceholder": "ุฃุฏุฎู„ ูƒู„ู…ุฉ ู…ุฑูˆุฑ ุฌุฏูŠุฏุฉ", + "manageFilesTitle": "ุฅุฏุงุฑุฉ ุงู„ู…ู„ูุงุช", + "manageRecipientsTitle": "ุฅุฏุงุฑุฉ ุงู„ู…ุณุชู„ู…ูŠู†", + "editSuccess": "ุชู… ุชุญุฏูŠุซ ุงู„ู…ุดุงุฑูƒุฉ ุจู†ุฌุงุญ", + "editError": "ูุดู„ ููŠ ุชุญุฏูŠุซ ุงู„ู…ุดุงุฑูƒุฉ" + }, + "shareDetails": { + "title": "ุชูุงุตูŠู„ ุงู„ู…ุดุงุฑูƒุฉ", + "subtitle": "ู…ุนู„ูˆู…ุงุช ู…ูุตู„ุฉ ุนู† ู‡ุฐู‡ ุงู„ู…ุดุงุฑูƒุฉ", + "basicInfo": "ุงู„ู…ุนู„ูˆู…ุงุช ุงู„ุฃุณุงุณูŠุฉ", + "name": "ุงู„ุงุณู…", + "untitled": "ุจุฏูˆู† ุนู†ูˆุงู†", + "views": "ุงู„ู…ุดุงู‡ุฏุงุช", + "dates": "ุงู„ุชูˆุงุฑูŠุฎ", + "created": "ุชู… ุงู„ุฅู†ุดุงุก", + "expires": "ุชู†ุชู‡ูŠ", + "never": "ุฃุจุฏู‹ุง", + "security": "ุงู„ุฃู…ุงู†", + "passwordProtected": "ู…ุญู…ูŠ ุจูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ", + "publicAccess": "ุงู„ูˆุตูˆู„ ุงู„ุนุงู…", + "maxViews": "ุฃู‚ุตู‰ ุนุฏุฏ ู„ู„ู…ุดุงู‡ุฏุงุช:", + "files": "ุงู„ู…ู„ูุงุช", + "recipients": "ุงู„ู…ุณุชู„ู…ูˆู†", + "notAvailable": "ุบูŠุฑ ู…ุชูˆูุฑ", + "invalidDate": "ุชุงุฑูŠุฎ ุบูŠุฑ ุตุงู„ุญ", + "loadError": "ูุดู„ ููŠ ุชุญู…ูŠู„ ุชูุงุตูŠู„ ุงู„ู…ุดุงุฑูƒุฉ" + }, + "shareManager": { + "deleteSuccess": "ุชู… ุญุฐู ุงู„ู…ุดุงุฑูƒุฉ ุจู†ุฌุงุญ", + "deleteError": "ูุดู„ ููŠ ุญุฐู ุงู„ู…ุดุงุฑูƒุฉ", + "updateSuccess": "ุชู… ุชุญุฏูŠุซ ุงู„ู…ุดุงุฑูƒุฉ ุจู†ุฌุงุญ", + "updateError": "ูุดู„ ููŠ ุชุญุฏูŠุซ ุงู„ู…ุดุงุฑูƒุฉ", + "filesUpdateSuccess": "ุชู… ุชุญุฏูŠุซ ุงู„ู…ู„ูุงุช ุจู†ุฌุงุญ", + "filesUpdateError": "ูุดู„ ููŠ ุชุญุฏูŠุซ ุงู„ู…ู„ูุงุช", + "recipientsUpdateSuccess": "ุชู… ุชุญุฏูŠุซ ุงู„ู…ุณุชู„ู…ูŠู† ุจู†ุฌุงุญ", + "recipientsUpdateError": "ูุดู„ ููŠ ุชุญุฏูŠุซ ุงู„ู…ุณุชู„ู…ูŠู†", + "linkGenerateSuccess": "ุชู… ุฅู†ุดุงุก ุฑุงุจุท ุงู„ู…ุดุงุฑูƒุฉ ุจู†ุฌุงุญ", + "linkGenerateError": "ูุดู„ ููŠ ุฅู†ุดุงุก ุฑุงุจุท ุงู„ู…ุดุงุฑูƒุฉ", + "notifyLoading": "ุฌุงุฑูŠ ุฅุฑุณุงู„ ุงู„ุฅุดุนุงุฑุงุช...", + "notifySuccess": "ุชู… ุฅุนู„ุงู… ุงู„ู…ุณุชู„ู…ูŠู† ุจู†ุฌุงุญ", + "notifyError": "ูุดู„ ููŠ ุฅุนู„ุงู… ุงู„ู…ุณุชู„ู…ูŠู†" + }, "shares": { "errors": { "loadFailed": "ูุดู„ ููŠ ุชุญู…ูŠู„ ุงู„ู…ุดุงุฑูƒุงุช", @@ -539,6 +502,64 @@ }, "pageTitle": "ุงู„ู…ุดุงุฑูƒุงุช" }, + "sharesTable": { + "ariaLabel": "ุฌุฏูˆู„ ุงู„ู…ุดุงุฑูƒุงุช", + "never": "ุฃุจุฏู‹ุง", + "columns": { + "name": "ุงู„ุงุณู…", + "createdAt": "ุชุงุฑูŠุฎ ุงู„ุฅู†ุดุงุก", + "expiresAt": "ุชุงุฑูŠุฎ ุงู„ุงู†ุชู‡ุงุก", + "status": "ุงู„ุญุงู„ุฉ", + "security": "ุงู„ุฃู…ุงู†", + "files": "ุงู„ู…ู„ูุงุช", + "recipients": "ุงู„ู…ุณุชู„ู…ูˆู†", + "actions": "ุงู„ุฅุฌุฑุงุกุงุช" + }, + "status": { + "neverExpires": "ู„ุง ุชู†ุชู‡ูŠ", + "active": "ู†ุดุทุฉ", + "expired": "ู…ู†ุชู‡ูŠุฉ" + }, + "security": { + "protected": "ู…ุญู…ูŠ", + "public": "ุนุงู…" + }, + "filesCount": "ู…ู„ู", + "recipientsCount": "ู…ุณุชู„ู…", + "actions": { + "menu": "ู‚ุงุฆู…ุฉ ุฅุฌุฑุงุกุงุช ุงู„ู…ุดุงุฑูƒุฉ", + "edit": "ุชุนุฏูŠู„", + "manageFiles": "ุฅุฏุงุฑุฉ ุงู„ู…ู„ูุงุช", + "manageRecipients": "ุฅุฏุงุฑุฉ ุงู„ู…ุณุชู„ู…ูŠู†", + "viewDetails": "ุนุฑุถ ุงู„ุชูุงุตูŠู„", + "generateLink": "ุฅู†ุดุงุก ุงู„ุฑุงุจุท", + "editLink": "ุชุนุฏูŠู„ ุงู„ุฑุงุจุท", + "copyLink": "ู†ุณุฎ ุงู„ุฑุงุจุท", + "notifyRecipients": "ุฅุนู„ุงู… ุงู„ู…ุณุชู„ู…ูŠู†", + "delete": "ุญุฐู" + } + }, + "storageUsage": { + "title": "ุงุณุชุฎุฏุงู… ุงู„ุชุฎุฒูŠู†", + "ariaLabel": "ุดุฑูŠุท ุชู‚ุฏู… ุงุณุชุฎุฏุงู… ุงู„ุชุฎุฒูŠู†", + "used": "ุงู„ู…ุณุชุฎุฏู…ุฉ", + "available": "ุงู„ู…ุชุงุญุฉ" + }, + "theme": { + "toggle": "ุชุจุฏูŠู„ ุงู„ุณู…ุฉ", + "light": "ูุงุชุญ", + "dark": "ุฏุงูƒู†", + "system": "ุงู„ู†ุธุงู…" + }, + "uploadFile": { + "title": "ุฑูุน ุงู„ู…ู„ู", + "selectFile": "ุงุถุบุท ู„ุงุฎุชูŠุงุฑ ู…ู„ู", + "preview": "ุงู„ู…ุนุงูŠู†ุฉ", + "uploadProgress": "ุชู‚ุฏู… ุงู„ุฑูุน", + "upload": "ุฑูุน", + "success": "ุชู… ุฑูุน ุงู„ู…ู„ู ุจู†ุฌุงุญ", + "error": "ูุดู„ ููŠ ุฑูุน ุงู„ู…ู„ู" + }, "users": { "modes": { "create": "ุฅู†ุดุงุก", @@ -608,29 +629,16 @@ "userr": "ู…ุณุชุฎุฏู…" } }, - "logo": { - "labels": { - "appLogo": "ุดุนุงุฑ ุงู„ุชุทุจูŠู‚" - }, - "buttons": { - "upload": "ุฑูุน ุงู„ุดุนุงุฑ", - "remove": "ุญุฐู ุงู„ุดุนุงุฑ" - }, - "messages": { - "uploadSuccess": "ุชู… ุฑูุน ุงู„ุดุนุงุฑ ุจู†ุฌุงุญ", - "removeSuccess": "ุชู… ุญุฐู ุงู„ุดุนุงุฑ ุจู†ุฌุงุญ" - }, - "errors": { - "uploadFailed": "ูุดู„ ููŠ ุฑูุน ุงู„ุดุนุงุฑ", - "removeFailed": "ูุดู„ ููŠ ุญุฐู ุงู„ุดุนุงุฑ" - } - }, - "navbar": { - "logoAlt": "ุดุนุงุฑ ุงู„ุชุทุจูŠู‚", - "profileMenu": "ู‚ุงุฆู…ุฉ ุงู„ู…ู„ู ุงู„ุดุฎุตูŠ", - "profile": "ุงู„ู…ู„ู ุงู„ุดุฎุตูŠ", - "settings": "ุงู„ุฅุนุฏุงุฏุงุช", - "usersManagement": "ุฅุฏุงุฑุฉ ุงู„ู…ุณุชุฎุฏู…ูŠู†", - "logout": "ุชุณุฌูŠู„ ุงู„ุฎุฑูˆุฌ" + "validation": { + "invalidEmail": "ุนู†ูˆุงู† ุจุฑูŠุฏ ุฅู„ูƒุชุฑูˆู†ูŠ ุบูŠุฑ ุตุงู„ุญ", + "passwordMinLength": "ูŠุฌุจ ุฃู† ุชุญุชูˆูŠ ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ ุนู„ู‰ 6 ุฃุญุฑู ุนู„ู‰ ุงู„ุฃู‚ู„", + "firstNameRequired": "ุงู„ุงุณู… ุงู„ุฃูˆู„ ู…ุทู„ูˆุจ", + "lastNameRequired": "ุงุณู… ุงู„ุนุงุฆู„ุฉ ู…ุทู„ูˆุจ", + "usernameLength": "ูŠุฌุจ ุฃู† ูŠุญุชูˆูŠ ุงุณู… ุงู„ู…ุณุชุฎุฏู… ุนู„ู‰ 3 ุฃุญุฑู ุนู„ู‰ ุงู„ุฃู‚ู„", + "usernameSpaces": "ู„ุง ูŠู…ูƒู† ุฃู† ูŠุญุชูˆูŠ ุงุณู… ุงู„ู…ุณุชุฎุฏู… ุนู„ู‰ ูุฑุงุบุงุช", + "passwordLength": "ูŠุฌุจ ุฃู† ุชุญุชูˆูŠ ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ ุนู„ู‰ 8 ุฃุญุฑู ุนู„ู‰ ุงู„ุฃู‚ู„", + "passwordsMatch": "ูƒู„ู…ุชุง ุงู„ู…ุฑูˆุฑ ุบูŠุฑ ู…ุชุทุงุจู‚ุชูŠู†", + "emailRequired": "ุงู„ุจุฑูŠุฏ ุงู„ุฅู„ูƒุชุฑูˆู†ูŠ ู…ุทู„ูˆุจ", + "passwordRequired": "ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ ู…ุทู„ูˆุจุฉ" } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/de-DE.json b/apps/web/messages/de-DE.json similarity index 97% rename from apps/web/src/locales/de-DE.json rename to apps/web/messages/de-DE.json index ff13ed3..e01517c 100644 --- a/apps/web/src/locales/de-DE.json +++ b/apps/web/messages/de-DE.json @@ -1,58 +1,4 @@ { - "login": { - "welcome": "Willkommen", - "signInToContinue": "Melden Sie sich an, um fortzufahren", - "emailLabel": "E-Mail-Adresse", - "emailPlaceholder": "Geben Sie Ihre E-Mail-Adresse ein", - "passwordLabel": "Passwort", - "passwordPlaceholder": "Geben Sie Ihr Passwort ein", - "signIn": "Anmelden", - "signingIn": "Melde an...", - "forgotPassword": "Passwort vergessen?", - "pageTitle": "Anmeldung" - }, - "errors": { - "invalidCredentials": "Ungรผltige E-Mail oder Passwort", - "userNotFound": "Benutzer nicht gefunden", - "accountLocked": "Konto gesperrt. Bitte versuchen Sie es spรคter erneut", - "unexpectedError": "Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es erneut" - }, - "validation": { - "invalidEmail": "Ungรผltige E-Mail-Adresse", - "passwordMinLength": "Das Passwort muss mindestens 6 Zeichen lang sein", - "firstNameRequired": "Vorname ist erforderlich", - "lastNameRequired": "Nachname ist erforderlich", - "usernameLength": "Der Benutzername muss mindestens 3 Zeichen lang sein", - "usernameSpaces": "Der Benutzername darf keine Leerzeichen enthalten", - "passwordLength": "Das Passwort muss mindestens 8 Zeichen lang sein", - "passwordsMatch": "Die Passwรถrter stimmen nicht รผberein" - }, - "fileSelector": { - "availableFiles": "Verfรผgbare Dateien ({{count}})", - "shareFiles": "Dateien teilen ({{count}})", - "searchPlaceholder": "Dateien suchen...", - "noMatchingFiles": "Keine รผbereinstimmenden Dateien", - "noAvailableFiles": "Keine Dateien verfรผgbar", - "noFilesInShare": "Keine Dateien in der Freigabe", - "saveChanges": "ร„nderungen speichern" - }, - "recipientSelector": { - "emailPlaceholder": "Empfรคnger-E-Mail eingeben", - "add": "Hinzufรผgen", - "recipients": "Empfรคnger ({{count}})", - "notifyAll": "Alle benachrichtigen", - "noRecipients": "Noch keine Empfรคnger hinzugefรผgt", - "addSuccess": "Empfรคnger erfolgreich hinzugefรผgt", - "addError": "Fehler beim Hinzufรผgen des Empfรคngers", - "removeSuccess": "Empfรคnger erfolgreich entfernt", - "removeError": "Fehler beim Entfernen des Empfรคngers", - "sendingNotifications": "Benachrichtigungen werden gesendet...", - "notifySuccess": "Empfรคnger erfolgreich benachrichtigt", - "notifyError": "Fehler beim Benachrichtigen der Empfรคnger" - }, - "navigation": { - "dashboard": "รœbersicht" - }, "common": { "loading": "Lรคdt, bitte warten...", "cancel": "Abbrechen", @@ -78,6 +24,22 @@ "success": "Freigabe erfolgreich erstellt", "error": "Fehler beim Erstellen der Freigabe" }, + "dashboard": { + "loadError": "Fehler beim Laden der Dashboard-Daten", + "linkCopied": "Link in die Zwischenablage kopiert", + "pageTitle": "รœbersicht", + "breadcrumb": "รœbersicht" + }, + "emptyState": { + "noFiles": "Noch keine Dateien hochgeladen", + "uploadFile": "Datei hochladen" + }, + "errors": { + "invalidCredentials": "Ungรผltige E-Mail oder Passwort", + "userNotFound": "Benutzer nicht gefunden", + "accountLocked": "Konto gesperrt. Bitte versuchen Sie es spรคter erneut", + "unexpectedError": "Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es erneut" + }, "fileActions": { "editFile": "Datei bearbeiten", "nameLabel": "Name", @@ -86,9 +48,16 @@ "descriptionLabel": "Beschreibung", "descriptionPlaceholder": "Dateibeschreibung eingeben", "deleteFile": "Datei lรถschen", - "deleteConfirmation": "Sind Sie sicher, dass Sie \"{{fileName}}\" lรถschen mรถchten?", + "deleteConfirmation": "Sind Sie sicher, dass Sie lรถschen mรถchten?", "deleteWarning": "Diese Aktion kann nicht rรผckgรคngig gemacht werden." }, + "fileManager": { + "downloadError": "Fehler beim Herunterladen der Datei", + "updateSuccess": "Datei erfolgreich aktualisiert", + "updateError": "Fehler beim Aktualisieren der Datei", + "deleteSuccess": "Datei erfolgreich gelรถscht", + "deleteError": "Fehler beim Lรถschen der Datei" + }, "filePreview": { "loading": "Vorschau wird geladen...", "notAvailable": "Vorschau nicht verfรผgbar", @@ -98,68 +67,21 @@ "loadError": "Fehler beim Laden der Vorschau", "downloadError": "Fehler beim Herunterladen der Datei" }, - "generateShareLink": { - "generateTitle": "Freigabelink generieren", - "updateTitle": "Freigabelink aktualisieren", - "generateDescription": "Erstellen Sie einen Link, um Ihre Dateien zu teilen", - "updateDescription": "Aktualisieren Sie den Alias fรผr diesen Freigabelink", - "aliasPlaceholder": "Alias eingeben", - "linkReady": "Ihr Freigabelink ist fertig:", - "generateButton": "Link generieren", - "updateButton": "Link aktualisieren", - "copyButton": "Link kopieren", - "success": "Link erfolgreich generiert", - "error": "Fehler beim Generieren des Links", - "copied": "Link in die Zwischenablage kopiert" + "fileSelector": { + "availableFiles": "Verfรผgbare Dateien ({{count}})", + "shareFiles": "Dateien teilen ({{count}})", + "searchPlaceholder": "Dateien suchen...", + "noMatchingFiles": "Keine รผbereinstimmenden Dateien", + "noAvailableFiles": "Keine Dateien verfรผgbar", + "noFilesInShare": "Keine Dateien in der Freigabe", + "saveChanges": "ร„nderungen speichern" }, - "shareActions": { - "deleteTitle": "Freigabe lรถschen", - "deleteConfirmation": "Sind Sie sicher, dass Sie diese Freigabe lรถschen mรถchten? Diese Aktion kann nicht rรผckgรคngig gemacht werden.", - "editTitle": "Freigabe bearbeiten", - "nameLabel": "Freigabename", - "expirationLabel": "Ablaufdatum", - "expirationPlaceholder": "MM/TT/JJJJ SS:MM", - "maxViewsLabel": "Maximale Ansichten", - "maxViewsPlaceholder": "Leer lassen fรผr unbegrenzt", - "passwordProtection": "Passwortgeschรผtzt", - "passwordLabel": "Passwort", - "passwordPlaceholder": "Passwort eingeben", - "newPasswordLabel": "Neues Passwort (leer lassen, um das aktuelle zu behalten)", - "newPasswordPlaceholder": "Neues Passwort eingeben", - "manageFilesTitle": "Dateien verwalten", - "manageRecipientsTitle": "Empfรคnger verwalten", - "editSuccess": "Freigabe erfolgreich aktualisiert", - "editError": "Fehler beim Aktualisieren der Freigabe" - }, - "shareDetails": { - "title": "Freigabedetails", - "subtitle": "Detaillierte Informationen zu dieser Freigabe", - "basicInfo": "Grundinformationen", - "name": "Name", - "untitled": "Ohne Titel", - "views": "Aufrufe", - "dates": "Daten", - "created": "Erstellt", - "expires": "Lรคuft ab", - "never": "Nie", - "security": "Sicherheit", - "passwordProtected": "Passwortgeschรผtzt", - "publicAccess": "ร–ffentlicher Zugriff", - "maxViews": "Maximale Ansichten: {{count}}", - "files": "Dateien ({{count}})", - "recipients": "Empfรคnger ({{count}})", - "notAvailable": "N/V", - "invalidDate": "Ungรผltiges Datum", - "loadError": "Fehler beim Laden der Freigabedetails" - }, - "uploadFile": { - "title": "Datei hochladen", - "selectFile": "Klicken Sie, um eine Datei auszuwรคhlen", - "preview": "Vorschau", - "uploadProgress": "Upload-Fortschritt", - "upload": "Hochladen", - "success": "Datei erfolgreich hochgeladen", - "error": "Fehler beim Hochladen der Datei" + "files": { + "title": "Alle Dateien", + "uploadFile": "Datei hochladen", + "loadError": "Fehler beim Laden der Dateien", + "pageTitle": "Meine Dateien", + "breadcrumb": "Meine Dateien" }, "filesTable": { "ariaLabel": "Dateitabelle", @@ -179,119 +101,10 @@ "delete": "Lรถschen" } }, - "sharesTable": { - "ariaLabel": "Freigabetabelle", - "never": "Nie", - "columns": { - "name": "NAME", - "createdAt": "ERSTELLT AM", - "expiresAt": "Lร„UFT AB", - "status": "STATUS", - "security": "SICHERHEIT", - "files": "DATEIEN", - "recipients": "EMPFร„NGER", - "actions": "AKTIONEN" - }, - "status": { - "neverExpires": "Lรคuft nie ab", - "active": "Aktiv", - "expired": "Abgelaufen" - }, - "security": { - "protected": "Geschรผtzt", - "public": "ร–ffentlich" - }, - "filesCount": "{{count}} Dateien", - "recipientsCount": "{{count}} Empfรคnger", - "actions": { - "menu": "Freigabeaktionsmenรผ", - "edit": "Bearbeiten", - "manageFiles": "Dateien verwalten", - "manageRecipients": "Empfรคnger verwalten", - "viewDetails": "Details anzeigen", - "generateLink": "Link generieren", - "editLink": "Link bearbeiten", - "copyLink": "Link kopieren", - "notifyRecipients": "Empfรคnger benachrichtigen", - "delete": "Lรถschen" - } - }, "footer": { "poweredBy": "Powered by", "kyanHomepage": "Kyantech Homepage" }, - "fileManager": { - "downloadError": "Fehler beim Herunterladen der Datei", - "updateSuccess": "Datei erfolgreich aktualisiert", - "updateError": "Fehler beim Aktualisieren der Datei", - "deleteSuccess": "Datei erfolgreich gelรถscht", - "deleteError": "Fehler beim Lรถschen der Datei" - }, - "shareManager": { - "deleteSuccess": "Freigabe erfolgreich gelรถscht", - "deleteError": "Fehler beim Lรถschen der Freigabe", - "updateSuccess": "Freigabe erfolgreich aktualisiert", - "updateError": "Fehler beim Aktualisieren der Freigabe", - "filesUpdateSuccess": "Dateien erfolgreich aktualisiert", - "filesUpdateError": "Fehler beim Aktualisieren der Dateien", - "recipientsUpdateSuccess": "Empfรคnger erfolgreich aktualisiert", - "recipientsUpdateError": "Fehler beim Aktualisieren der Empfรคnger", - "linkGenerateSuccess": "Freigabelink erfolgreich generiert", - "linkGenerateError": "Fehler beim Generieren des Freigabelinks", - "notifyLoading": "Benachrichtigungen werden gesendet...", - "notifySuccess": "Empfรคnger erfolgreich benachrichtigt", - "notifyError": "Fehler beim Benachrichtigen der Empfรคnger" - }, - "quickAccess": { - "files": { - "title": "Meine Dateien", - "description": "Zugriff und Verwaltung Ihrer hochgeladenen Dateien" - }, - "shares": { - "title": "Meine Freigaben", - "description": "Anzeigen und Verwalten Ihrer geteilten Dateien" - } - }, - "recentFiles": { - "title": "Kรผrzlich hochgeladen", - "viewAll": "Alle anzeigen", - "uploadFile": "Datei hochladen", - "noFiles": "Noch keine Dateien hochgeladen" - }, - "recentShares": { - "title": "Kรผrzlich geteilte", - "viewAll": "Alle anzeigen", - "createShare": "Freigabe erstellen", - "noShares": "Noch keine Freigaben erstellt", - "createFirst": "Erstellen Sie Ihre erste Freigabe" - }, - "storageUsage": { - "title": "Speichernutzung", - "ariaLabel": "Fortschrittsbalken der Speichernutzung", - "used": "{{size}} genutzt", - "available": "{{size}} verfรผgbar" - }, - "dashboard": { - "loadError": "Fehler beim Laden der Dashboard-Daten", - "linkCopied": "Link in die Zwischenablage kopiert", - "pageTitle": "รœbersicht", - "breadcrumb": "รœbersicht" - }, - "emptyState": { - "noFiles": "Noch keine Dateien hochgeladen", - "uploadFile": "Datei hochladen" - }, - "files": { - "title": "Alle Dateien", - "uploadFile": "Datei hochladen", - "loadError": "Fehler beim Laden der Dateien", - "pageTitle": "Meine Dateien", - "breadcrumb": "Meine Dateien" - }, - "searchBar": { - "placeholder": "Dateien suchen...", - "results": "Gefunden {{filtered}} von {{total}} Dateien" - }, "forgotPassword": { "emailLabel": "E-Mail-Adresse", "emailPlaceholder": "Geben Sie Ihre E-Mail-Adresse ein", @@ -303,6 +116,20 @@ "resetInstructions": "Anweisungen zum Zurรผcksetzen wurden an Ihre E-Mail gesendet", "pageTitle": "Passwort vergessen" }, + "generateShareLink": { + "generateTitle": "Freigabelink generieren", + "updateTitle": "Freigabelink aktualisieren", + "generateDescription": "Erstellen Sie einen Link, um Ihre Dateien zu teilen", + "updateDescription": "Aktualisieren Sie den Alias fรผr diesen Freigabelink", + "aliasPlaceholder": "Alias eingeben", + "linkReady": "Ihr Freigabelink ist fertig:", + "generateButton": "Link generieren", + "updateButton": "Link aktualisieren", + "copyButton": "Link kopieren", + "success": "Link erfolgreich generiert", + "error": "Fehler beim Generieren des Links", + "copied": "Link in die Zwischenablage kopiert" + }, "home": { "description": "Die Open-Source-Alternative zu WeTransfer. Teilen Sie Dateien sicher, ohne Tracking oder Einschrรคnkungen.", "documentation": "Dokumentation", @@ -314,6 +141,46 @@ }, "pageTitle": "Startseite" }, + "login": { + "welcome": "Willkommen zu", + "signInToContinue": "Melden Sie sich an, um fortzufahren", + "emailLabel": "E-Mail-Adresse", + "emailPlaceholder": "Geben Sie Ihre E-Mail-Adresse ein", + "passwordLabel": "Passwort", + "passwordPlaceholder": "Geben Sie Ihr Passwort ein", + "signIn": "Anmelden", + "signingIn": "Melde an...", + "forgotPassword": "Passwort vergessen?", + "pageTitle": "Anmeldung" + }, + "logo": { + "labels": { + "appLogo": "Anwendungslogo" + }, + "buttons": { + "upload": "Logo hochladen", + "remove": "Logo entfernen" + }, + "messages": { + "uploadSuccess": "Logo erfolgreich hochgeladen", + "removeSuccess": "Logo erfolgreich entfernt" + }, + "errors": { + "uploadFailed": "Fehler beim Hochladen des Logos", + "removeFailed": "Fehler beim Entfernen des Logos" + } + }, + "navbar": { + "logoAlt": "Anwendungslogo", + "profileMenu": "Profilmenรผ", + "profile": "Profil", + "settings": "Einstellungen", + "usersManagement": "Benutzerverwaltung", + "logout": "Abmelden" + }, + "navigation": { + "dashboard": "รœbersicht" + }, "profile": { "password": { "title": "Passwort รคndern", @@ -356,6 +223,43 @@ }, "pageTitle": "Profil" }, + "quickAccess": { + "files": { + "title": "Meine Dateien", + "description": "Zugriff und Verwaltung Ihrer hochgeladenen Dateien" + }, + "shares": { + "title": "Meine Freigaben", + "description": "Anzeigen und Verwalten Ihrer geteilten Dateien" + } + }, + "recentFiles": { + "title": "Kรผrzlich hochgeladen", + "viewAll": "Alle anzeigen", + "uploadFile": "Datei hochladen", + "noFiles": "Noch keine Dateien hochgeladen" + }, + "recentShares": { + "title": "Kรผrzlich geteilte", + "viewAll": "Alle anzeigen", + "createShare": "Freigabe erstellen", + "noShares": "Noch keine Freigaben erstellt", + "createFirst": "Erstellen Sie Ihre erste Freigabe" + }, + "recipientSelector": { + "emailPlaceholder": "Empfรคnger-E-Mail eingeben", + "add": "Hinzufรผgen", + "recipients": "Empfรคnger ({{count}})", + "notifyAll": "Alle benachrichtigen", + "noRecipients": "Noch keine Empfรคnger hinzugefรผgt", + "addSuccess": "Empfรคnger erfolgreich hinzugefรผgt", + "addError": "Fehler beim Hinzufรผgen des Empfรคngers", + "removeSuccess": "Empfรคnger erfolgreich entfernt", + "removeError": "Fehler beim Entfernen des Empfรคngers", + "sendingNotifications": "Benachrichtigungen werden gesendet...", + "notifySuccess": "Empfรคnger erfolgreich benachrichtigt", + "notifyError": "Fehler beim Benachrichtigen der Empfรคnger" + }, "resetPassword": { "pageTitle": "Passwort zurรผcksetzen", "header": { @@ -379,6 +283,10 @@ "invalidToken": "Ungรผltiges oder fehlendes Zurรผcksetzungstoken" } }, + "searchBar": { + "placeholder": "Dateien suchen...", + "results": "Gefunden {{filtered}} von {{total}} Dateien" + }, "settings": { "groups": { "defaultDescription": "Konfigurationsoptionen", @@ -513,6 +421,61 @@ }, "pageTitle": "Freigabe" }, + "shareActions": { + "deleteTitle": "Freigabe lรถschen", + "deleteConfirmation": "Sind Sie sicher, dass Sie diese Freigabe lรถschen mรถchten? Diese Aktion kann nicht rรผckgรคngig gemacht werden.", + "editTitle": "Freigabe bearbeiten", + "nameLabel": "Freigabename", + "expirationLabel": "Ablaufdatum", + "expirationPlaceholder": "MM/TT/JJJJ SS:MM", + "maxViewsLabel": "Maximale Ansichten", + "maxViewsPlaceholder": "Leer lassen fรผr unbegrenzt", + "passwordProtection": "Passwortgeschรผtzt", + "passwordLabel": "Passwort", + "passwordPlaceholder": "Passwort eingeben", + "newPasswordLabel": "Neues Passwort (leer lassen, um das aktuelle zu behalten)", + "newPasswordPlaceholder": "Neues Passwort eingeben", + "manageFilesTitle": "Dateien verwalten", + "manageRecipientsTitle": "Empfรคnger verwalten", + "editSuccess": "Freigabe erfolgreich aktualisiert", + "editError": "Fehler beim Aktualisieren der Freigabe" + }, + "shareDetails": { + "title": "Freigabedetails", + "subtitle": "Detaillierte Informationen zu dieser Freigabe", + "basicInfo": "Grundinformationen", + "name": "Name", + "untitled": "Ohne Titel", + "views": "Aufrufe", + "dates": "Daten", + "created": "Erstellt", + "expires": "Lรคuft ab", + "never": "Nie", + "security": "Sicherheit", + "passwordProtected": "Passwortgeschรผtzt", + "publicAccess": "ร–ffentlicher Zugriff", + "maxViews": "Maximale Ansichten:", + "files": "Dateien", + "recipients": "Empfรคnger", + "notAvailable": "N/V", + "invalidDate": "Ungรผltiges Datum", + "loadError": "Fehler beim Laden der Freigabedetails" + }, + "shareManager": { + "deleteSuccess": "Freigabe erfolgreich gelรถscht", + "deleteError": "Fehler beim Lรถschen der Freigabe", + "updateSuccess": "Freigabe erfolgreich aktualisiert", + "updateError": "Fehler beim Aktualisieren der Freigabe", + "filesUpdateSuccess": "Dateien erfolgreich aktualisiert", + "filesUpdateError": "Fehler beim Aktualisieren der Dateien", + "recipientsUpdateSuccess": "Empfรคnger erfolgreich aktualisiert", + "recipientsUpdateError": "Fehler beim Aktualisieren der Empfรคnger", + "linkGenerateSuccess": "Freigabelink erfolgreich generiert", + "linkGenerateError": "Fehler beim Generieren des Freigabelinks", + "notifyLoading": "Benachrichtigungen werden gesendet...", + "notifySuccess": "Empfรคnger erfolgreich benachrichtigt", + "notifyError": "Fehler beim Benachrichtigen der Empfรคnger" + }, "shares": { "errors": { "loadFailed": "Fehler beim Laden der Freigaben", @@ -539,6 +502,64 @@ }, "pageTitle": "Freigaben" }, + "sharesTable": { + "ariaLabel": "Freigabetabelle", + "never": "Nie", + "columns": { + "name": "NAME", + "createdAt": "ERSTELLT AM", + "expiresAt": "Lร„UFT AB", + "status": "STATUS", + "security": "SICHERHEIT", + "files": "DATEIEN", + "recipients": "EMPFร„NGER", + "actions": "AKTIONEN" + }, + "status": { + "neverExpires": "Lรคuft nie ab", + "active": "Aktiv", + "expired": "Abgelaufen" + }, + "security": { + "protected": "Geschรผtzt", + "public": "ร–ffentlich" + }, + "filesCount": "Dateien", + "recipientsCount": "Empfรคnger", + "actions": { + "menu": "Freigabeaktionsmenรผ", + "edit": "Bearbeiten", + "manageFiles": "Dateien verwalten", + "manageRecipients": "Empfรคnger verwalten", + "viewDetails": "Details anzeigen", + "generateLink": "Link generieren", + "editLink": "Link bearbeiten", + "copyLink": "Link kopieren", + "notifyRecipients": "Empfรคnger benachrichtigen", + "delete": "Lรถschen" + } + }, + "storageUsage": { + "title": "Speichernutzung", + "ariaLabel": "Fortschrittsbalken der Speichernutzung", + "used": "genutzt", + "available": "verfรผgbar" + }, + "theme": { + "toggle": "Design umschalten", + "light": "Hell", + "dark": "Dunkel", + "system": "System" + }, + "uploadFile": { + "title": "Datei hochladen", + "selectFile": "Klicken Sie, um eine Datei auszuwรคhlen", + "preview": "Vorschau", + "uploadProgress": "Upload-Fortschritt", + "upload": "Hochladen", + "success": "Datei erfolgreich hochgeladen", + "error": "Fehler beim Hochladen der Datei" + }, "users": { "modes": { "create": "erstellen", @@ -608,29 +629,16 @@ "userr": "Benutzer" } }, - "logo": { - "labels": { - "appLogo": "Anwendungslogo" - }, - "buttons": { - "upload": "Logo hochladen", - "remove": "Logo entfernen" - }, - "messages": { - "uploadSuccess": "Logo erfolgreich hochgeladen", - "removeSuccess": "Logo erfolgreich entfernt" - }, - "errors": { - "uploadFailed": "Fehler beim Hochladen des Logos", - "removeFailed": "Fehler beim Entfernen des Logos" - } - }, - "navbar": { - "logoAlt": "Anwendungslogo", - "profileMenu": "Profilmenรผ", - "profile": "Profil", - "settings": "Einstellungen", - "usersManagement": "Benutzerverwaltung", - "logout": "Abmelden" + "validation": { + "invalidEmail": "Ungรผltige E-Mail-Adresse", + "passwordMinLength": "Das Passwort muss mindestens 6 Zeichen lang sein", + "firstNameRequired": "Vorname ist erforderlich", + "lastNameRequired": "Nachname ist erforderlich", + "usernameLength": "Der Benutzername muss mindestens 3 Zeichen lang sein", + "usernameSpaces": "Der Benutzername darf keine Leerzeichen enthalten", + "passwordLength": "Das Passwort muss mindestens 8 Zeichen lang sein", + "passwordsMatch": "Die Passwรถrter stimmen nicht รผberein", + "emailRequired": "E-Mail ist erforderlich", + "passwordRequired": "Passwort ist erforderlich" } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/en-US.json b/apps/web/messages/en-US.json similarity index 93% rename from apps/web/src/locales/en-US.json rename to apps/web/messages/en-US.json index c77096b..80e4bd0 100644 --- a/apps/web/src/locales/en-US.json +++ b/apps/web/messages/en-US.json @@ -1,58 +1,4 @@ { - "login": { - "welcome": "Welcome", - "signInToContinue": "Sign in to continue", - "emailLabel": "Email Address", - "emailPlaceholder": "Enter your email", - "passwordLabel": "Password", - "passwordPlaceholder": "Enter your password", - "signIn": "Sign In", - "signingIn": "Signing in...", - "forgotPassword": "Forgot password?", - "pageTitle": "Login" - }, - "errors": { - "invalidCredentials": "Invalid email or password", - "userNotFound": "User not found", - "accountLocked": "Account locked. Please try again later", - "unexpectedError": "An unexpected error occurred. Please try again" - }, - "validation": { - "invalidEmail": "Invalid email address", - "passwordMinLength": "Password must be at least 6 characters", - "firstNameRequired": "First name is required", - "lastNameRequired": "Last name is required", - "usernameLength": "Username must be at least 3 characters", - "usernameSpaces": "Username cannot contain spaces", - "passwordLength": "Password must be at least 8 characters", - "passwordsMatch": "Passwords do not match" - }, - "fileSelector": { - "availableFiles": "Available Files ({{count}})", - "shareFiles": "Share Files ({{count}})", - "searchPlaceholder": "Search files...", - "noMatchingFiles": "No matching files", - "noAvailableFiles": "No files available", - "noFilesInShare": "No files in share", - "saveChanges": "Save Changes" - }, - "recipientSelector": { - "emailPlaceholder": "Enter recipient email", - "add": "Add", - "recipients": "Recipients ({{count}})", - "notifyAll": "Notify All", - "noRecipients": "No recipients added yet", - "addSuccess": "Recipient added successfully", - "addError": "Failed to add recipient", - "removeSuccess": "Recipient removed successfully", - "removeError": "Failed to remove recipient", - "sendingNotifications": "Sending notifications...", - "notifySuccess": "Recipients notified successfully", - "notifyError": "Failed to notify recipients" - }, - "navigation": { - "dashboard": "Dashboard" - }, "common": { "loading": "Loading, please wait...", "cancel": "Cancel", @@ -78,6 +24,22 @@ "success": "Share created successfully", "error": "Failed to create share" }, + "dashboard": { + "loadError": "Failed to load dashboard data", + "linkCopied": "Link copied to clipboard", + "pageTitle": "Dashboard", + "breadcrumb": "Dashboard" + }, + "emptyState": { + "noFiles": "No files uploaded yet", + "uploadFile": "Upload File" + }, + "errors": { + "invalidCredentials": "Invalid email or password", + "userNotFound": "User not found", + "accountLocked": "Account locked. Please try again later", + "unexpectedError": "An unexpected error occurred. Please try again" + }, "fileActions": { "editFile": "Edit File", "nameLabel": "Name", @@ -86,9 +48,16 @@ "descriptionLabel": "Description", "descriptionPlaceholder": "Enter file description", "deleteFile": "Delete File", - "deleteConfirmation": "Are you sure you want to delete \"{{fileName}}\"?", + "deleteConfirmation": "Are you sure you want to delete ?", "deleteWarning": "This action cannot be undone." }, + "fileManager": { + "downloadError": "Failed to download file", + "updateSuccess": "File updated successfully", + "updateError": "Failed to update file", + "deleteSuccess": "File deleted successfully", + "deleteError": "Failed to delete file" + }, "filePreview": { "loading": "Loading preview...", "notAvailable": "Preview not available", @@ -98,68 +67,21 @@ "loadError": "Failed to load preview", "downloadError": "Failed to download file" }, - "generateShareLink": { - "generateTitle": "Generate Share Link", - "updateTitle": "Update Share Link", - "generateDescription": "Generate a link to share your files", - "updateDescription": "Update the alias for this share link", - "aliasPlaceholder": "Enter alias", - "linkReady": "Your share link is ready:", - "generateButton": "Generate Link", - "updateButton": "Update Link", - "copyButton": "Copy Link", - "success": "Link generated successfully", - "error": "Failed to generate link", - "copied": "Link copied to clipboard" + "fileSelector": { + "availableFiles": "Available Files ({count})", + "shareFiles": "Share Files ({count})", + "searchPlaceholder": "Search files...", + "noMatchingFiles": "No matching files", + "noAvailableFiles": "No files available", + "noFilesInShare": "No files in share", + "saveChanges": "Save Changes" }, - "shareActions": { - "deleteTitle": "Delete Share", - "deleteConfirmation": "Are you sure you want to delete this share? This action cannot be undone.", - "editTitle": "Edit Share", - "nameLabel": "Share Name", - "expirationLabel": "Expiration Date", - "expirationPlaceholder": "MM/DD/YYYY HH:MM", - "maxViewsLabel": "Max Views", - "maxViewsPlaceholder": "Leave empty for unlimited", - "passwordProtection": "Password Protected", - "passwordLabel": "Password", - "passwordPlaceholder": "Enter password", - "newPasswordLabel": "New Password (leave empty to keep current)", - "newPasswordPlaceholder": "Enter new password", - "manageFilesTitle": "Manage Files", - "manageRecipientsTitle": "Manage Recipients", - "editSuccess": "Share updated successfully", - "editError": "Failed to update share" - }, - "shareDetails": { - "title": "Share Details", - "subtitle": "Detailed information about this share", - "basicInfo": "Basic Information", - "name": "Name", - "untitled": "Untitled", - "views": "Views", - "dates": "Dates", - "created": "Created", - "expires": "Expires", - "never": "Never", - "security": "Security", - "passwordProtected": "Password Protected", - "publicAccess": "Public Access", - "maxViews": "Max Views: {{count}}", - "files": "Files ({{count}})", - "recipients": "Recipients ({{count}})", - "notAvailable": "N/A", - "invalidDate": "Invalid date", - "loadError": "Failed to load share details" - }, - "uploadFile": { - "title": "Upload File", - "selectFile": "Click to select a file", - "preview": "Preview", - "uploadProgress": "Upload progress", - "upload": "Upload", - "success": "File uploaded successfully", - "error": "Failed to upload file" + "files": { + "title": "All Files", + "uploadFile": "Upload File", + "loadError": "Failed to load files", + "pageTitle": "My Files", + "breadcrumb": "My Files" }, "filesTable": { "ariaLabel": "Files table", @@ -179,119 +101,10 @@ "delete": "Delete" } }, - "sharesTable": { - "ariaLabel": "Shares table", - "never": "Never", - "columns": { - "name": "NAME", - "createdAt": "CREATED AT", - "expiresAt": "EXPIRES AT", - "status": "STATUS", - "security": "SECURITY", - "files": "FILES", - "recipients": "RECIPIENTS", - "actions": "ACTIONS" - }, - "status": { - "neverExpires": "Never Expires", - "active": "Active", - "expired": "Expired" - }, - "security": { - "protected": "Protected", - "public": "Public" - }, - "filesCount": "{{count}} files", - "recipientsCount": "{{count}} recipients", - "actions": { - "menu": "Share actions menu", - "edit": "Edit", - "manageFiles": "Manage Files", - "manageRecipients": "Manage Recipients", - "viewDetails": "View Details", - "generateLink": "Generate Link", - "editLink": "Edit Link", - "copyLink": "Copy Link", - "notifyRecipients": "Notify Recipients", - "delete": "Delete" - } - }, "footer": { "poweredBy": "Powered by", "kyanHomepage": "Kyantech homepage" }, - "fileManager": { - "downloadError": "Failed to download file", - "updateSuccess": "File updated successfully", - "updateError": "Failed to update file", - "deleteSuccess": "File deleted successfully", - "deleteError": "Failed to delete file" - }, - "shareManager": { - "deleteSuccess": "Share deleted successfully", - "deleteError": "Failed to delete share", - "updateSuccess": "Share updated successfully", - "updateError": "Failed to update share", - "filesUpdateSuccess": "Files updated successfully", - "filesUpdateError": "Failed to update files", - "recipientsUpdateSuccess": "Recipients updated successfully", - "recipientsUpdateError": "Failed to update recipients", - "linkGenerateSuccess": "Share link generated successfully", - "linkGenerateError": "Failed to generate share link", - "notifyLoading": "Sending notifications...", - "notifySuccess": "Recipients notified successfully", - "notifyError": "Failed to notify recipients" - }, - "quickAccess": { - "files": { - "title": "My Files", - "description": "Access and manage your uploaded files" - }, - "shares": { - "title": "My Shares", - "description": "View and manage your shared files" - } - }, - "recentFiles": { - "title": "Recent Uploads", - "viewAll": "View All", - "uploadFile": "Upload File", - "noFiles": "No files uploaded yet" - }, - "recentShares": { - "title": "Recent Shares", - "viewAll": "View All", - "createShare": "Create Share", - "noShares": "No shares created yet", - "createFirst": "Create your first share" - }, - "storageUsage": { - "title": "Storage Usage", - "ariaLabel": "Storage usage progress bar", - "used": "{{size}} used", - "available": "{{size}} available" - }, - "dashboard": { - "loadError": "Failed to load dashboard data", - "linkCopied": "Link copied to clipboard", - "pageTitle": "Dashboard", - "breadcrumb": "Dashboard" - }, - "emptyState": { - "noFiles": "No files uploaded yet", - "uploadFile": "Upload File" - }, - "files": { - "title": "All Files", - "uploadFile": "Upload File", - "loadError": "Failed to load files", - "pageTitle": "My Files", - "breadcrumb": "My Files" - }, - "searchBar": { - "placeholder": "Search files...", - "results": "Found {{filtered}} of {{total}} files" - }, "forgotPassword": { "emailLabel": "Email Address", "emailPlaceholder": "Enter your email", @@ -303,6 +116,20 @@ "resetInstructions": "Reset instructions sent to your email", "pageTitle": "Forgot Password" }, + "generateShareLink": { + "generateTitle": "Generate Share Link", + "updateTitle": "Update Share Link", + "generateDescription": "Generate a link to share your files", + "updateDescription": "Update the alias for this share link", + "aliasPlaceholder": "Enter alias", + "linkReady": "Your share link is ready:", + "generateButton": "Generate Link", + "updateButton": "Update Link", + "copyButton": "Copy Link", + "success": "Link generated successfully", + "error": "Failed to generate link", + "copied": "Link copied to clipboard" + }, "home": { "description": "The open-source alternative to WeTransfer. Share files securely, without tracking, or limitations.", "documentation": "Documentation", @@ -314,6 +141,46 @@ }, "pageTitle": "Home" }, + "login": { + "welcome": "Welcome to", + "signInToContinue": "Sign in to continue", + "emailLabel": "Email Address", + "emailPlaceholder": "Enter your email", + "passwordLabel": "Password", + "passwordPlaceholder": "Enter your password", + "signIn": "Sign In", + "signingIn": "Signing in...", + "forgotPassword": "Forgot password?", + "pageTitle": "Login" + }, + "logo": { + "labels": { + "appLogo": "App Logo" + }, + "buttons": { + "upload": "Upload Logo", + "remove": "Remove Logo" + }, + "messages": { + "uploadSuccess": "Logo uploaded successfully", + "removeSuccess": "Logo removed successfully" + }, + "errors": { + "uploadFailed": "Failed to upload logo", + "removeFailed": "Failed to remove logo" + } + }, + "navbar": { + "logoAlt": "App Logo", + "profileMenu": "Profile Menu", + "profile": "Profile", + "settings": "Settings", + "usersManagement": "Users Management", + "logout": "Log Out" + }, + "navigation": { + "dashboard": "Dashboard" + }, "profile": { "password": { "title": "Change Password", @@ -356,6 +223,43 @@ }, "pageTitle": "Profile" }, + "quickAccess": { + "files": { + "title": "My Files", + "description": "Access and manage your uploaded files" + }, + "shares": { + "title": "My Shares", + "description": "View and manage your shared files" + } + }, + "recentFiles": { + "title": "Recent Uploads", + "viewAll": "View All", + "uploadFile": "Upload File", + "noFiles": "No files uploaded yet" + }, + "recentShares": { + "title": "Recent Shares", + "viewAll": "View All", + "createShare": "Create Share", + "noShares": "No shares created yet", + "createFirst": "Create your first share" + }, + "recipientSelector": { + "emailPlaceholder": "Enter recipient email", + "add": "Add", + "recipients": "Recipients ({count})", + "notifyAll": "Notify All", + "noRecipients": "No recipients added yet", + "addSuccess": "Recipient added successfully", + "addError": "Failed to add recipient", + "removeSuccess": "Recipient removed successfully", + "removeError": "Failed to remove recipient", + "sendingNotifications": "Sending notifications...", + "notifySuccess": "Recipients notified successfully", + "notifyError": "Failed to notify recipients" + }, "resetPassword": { "pageTitle": "Reset Password", "header": { @@ -379,6 +283,10 @@ "invalidToken": "Invalid or missing reset token" } }, + "searchBar": { + "placeholder": "Search files...", + "results": "Found {filtered} of {total} files" + }, "settings": { "groups": { "defaultDescription": "Configuration options", @@ -471,7 +379,7 @@ } }, "buttons": { - "save": "Save {{group}}" + "save": "Save {group}" }, "errors": { "loadFailed": "Failed to load settings", @@ -479,7 +387,7 @@ }, "messages": { "noChanges": "No changes to save", - "updateSuccess": "{{group}} settings updated successfully" + "updateSuccess": "{group} settings updated successfully" }, "title": "Settings", "breadcrumb": "Settings", @@ -504,8 +412,8 @@ }, "details": { "untitled": "Untitled Share", - "created": "Created: {{date}}", - "expires": "Expires: {{date}}" + "created": "Created: {date}", + "expires": "Expires: {date}" }, "notFound": { "title": "Share Not Found", @@ -513,6 +421,61 @@ }, "pageTitle": "Share" }, + "shareActions": { + "deleteTitle": "Delete Share", + "deleteConfirmation": "Are you sure you want to delete this share? This action cannot be undone.", + "editTitle": "Edit Share", + "nameLabel": "Share Name", + "expirationLabel": "Expiration Date", + "expirationPlaceholder": "MM/DD/YYYY HH:MM", + "maxViewsLabel": "Max Views", + "maxViewsPlaceholder": "Leave empty for unlimited", + "passwordProtection": "Password Protected", + "passwordLabel": "Password", + "passwordPlaceholder": "Enter password", + "newPasswordLabel": "New Password (leave empty to keep current)", + "newPasswordPlaceholder": "Enter new password", + "manageFilesTitle": "Manage Files", + "manageRecipientsTitle": "Manage Recipients", + "editSuccess": "Share updated successfully", + "editError": "Failed to update share" + }, + "shareDetails": { + "title": "Share Details", + "subtitle": "Detailed information about this share", + "basicInfo": "Basic Information", + "name": "Name", + "untitled": "Untitled", + "views": "Views", + "dates": "Dates", + "created": "Created", + "expires": "Expires", + "never": "Never", + "security": "Security", + "passwordProtected": "Password Protected", + "publicAccess": "Public Access", + "maxViews": "Max Views:", + "files": "Files", + "recipients": "Recipients", + "notAvailable": "N/A", + "invalidDate": "Invalid date", + "loadError": "Failed to load share details" + }, + "shareManager": { + "deleteSuccess": "Share deleted successfully", + "deleteError": "Failed to delete share", + "updateSuccess": "Share updated successfully", + "updateError": "Failed to update share", + "filesUpdateSuccess": "Files updated successfully", + "filesUpdateError": "Failed to update files", + "recipientsUpdateSuccess": "Recipients updated successfully", + "recipientsUpdateError": "Failed to update recipients", + "linkGenerateSuccess": "Share link generated successfully", + "linkGenerateError": "Failed to generate share link", + "notifyLoading": "Sending notifications...", + "notifySuccess": "Recipients notified successfully", + "notifyError": "Failed to notify recipients" + }, "shares": { "errors": { "loadFailed": "Failed to load shares", @@ -535,10 +498,68 @@ "title": "All Shares", "createButton": "Create Share", "placeholder": "Search shares...", - "results": "Found {{filtered}} of {{total}} shares" + "results": "Found {filtered} of {total} shares" }, "pageTitle": "Shares" }, + "sharesTable": { + "ariaLabel": "Shares table", + "never": "Never", + "columns": { + "name": "NAME", + "createdAt": "CREATED AT", + "expiresAt": "EXPIRES AT", + "status": "STATUS", + "security": "SECURITY", + "files": "FILES", + "recipients": "RECIPIENTS", + "actions": "ACTIONS" + }, + "status": { + "neverExpires": "Never Expires", + "active": "Active", + "expired": "Expired" + }, + "security": { + "protected": "Protected", + "public": "Public" + }, + "filesCount": "files", + "recipientsCount": "recipients", + "actions": { + "menu": "Share actions menu", + "edit": "Edit", + "manageFiles": "Manage Files", + "manageRecipients": "Manage Recipients", + "viewDetails": "View Details", + "generateLink": "Generate Link", + "editLink": "Edit Link", + "copyLink": "Copy Link", + "notifyRecipients": "Notify Recipients", + "delete": "Delete" + } + }, + "storageUsage": { + "title": "Storage Usage", + "ariaLabel": "Storage usage progress bar", + "used": "used", + "available": "available" + }, + "theme": { + "toggle": "Toggle theme", + "light": "Light", + "dark": "Dark", + "system": "System" + }, + "uploadFile": { + "title": "Upload File", + "selectFile": "Click to select a file", + "preview": "Preview", + "uploadProgress": "Upload progress", + "upload": "Upload", + "success": "File uploaded successfully", + "error": "Failed to upload file" + }, "users": { "modes": { "create": "create", @@ -546,7 +567,7 @@ }, "errors": { "loadFailed": "Failed to load users", - "submitFailed": "Failed to {{mode}} user", + "submitFailed": "Failed to {mode} user", "deleteFailed": "Failed to delete user", "statusUpdateFailed": "Failed to update user status" }, @@ -565,7 +586,7 @@ }, "delete": { "title": "Confirm Delete User", - "confirmation": "Are you sure you want to delete user {{firstName}} {{lastName}}? This action cannot be undone.", + "confirmation": "Are you sure you want to delete user {firstName} {lastName}? This action cannot be undone.", "confirm": "Delete User" }, "form": { @@ -586,7 +607,7 @@ }, "status": { "title": "Confirm Status Change", - "confirmation": "Are you sure you want to {{action}} user {{firstName}} {{lastName}}?", + "confirmation": "Are you sure you want to {action} user {firstName} {lastName}?", "activate": "activate", "deactivate": "deactivate", "user": "User" @@ -608,29 +629,15 @@ "userr": "User" } }, - "logo": { - "labels": { - "appLogo": "App Logo" - }, - "buttons": { - "upload": "Upload Logo", - "remove": "Remove Logo" - }, - "messages": { - "uploadSuccess": "Logo uploaded successfully", - "removeSuccess": "Logo removed successfully" - }, - "errors": { - "uploadFailed": "Failed to upload logo", - "removeFailed": "Failed to remove logo" - } - }, - "navbar": { - "logoAlt": "App Logo", - "profileMenu": "Profile Menu", - "profile": "Profile", - "settings": "Settings", - "usersManagement": "Users Management", - "logout": "Log Out" + "validation": { + "firstNameRequired": "First name is required", + "lastNameRequired": "Last name is required", + "usernameLength": "Username must be at least 3 characters long", + "usernameSpaces": "Username cannot contain spaces", + "invalidEmail": "Please enter a valid email address", + "passwordLength": "Password must be at least 8 characters long", + "passwordsMatch": "Passwords must match", + "emailRequired": "Email is required", + "passwordRequired": "Password is required" } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/es-ES.json b/apps/web/messages/es-ES.json similarity index 97% rename from apps/web/src/locales/es-ES.json rename to apps/web/messages/es-ES.json index 513a3d1..aea790e 100644 --- a/apps/web/src/locales/es-ES.json +++ b/apps/web/messages/es-ES.json @@ -1,58 +1,4 @@ { - "login": { - "welcome": "Bienvenido", - "signInToContinue": "Inicia sesiรณn para continuar", - "emailLabel": "Direcciรณn de correo electrรณnico", - "emailPlaceholder": "Introduce tu correo electrรณnico", - "passwordLabel": "Contraseรฑa", - "passwordPlaceholder": "Introduce tu contraseรฑa", - "signIn": "Iniciar sesiรณn", - "signingIn": "Iniciando sesiรณn...", - "forgotPassword": "ยฟOlvidaste tu contraseรฑa?", - "pageTitle": "Iniciar sesiรณn" - }, - "errors": { - "invalidCredentials": "Correo electrรณnico o contraseรฑa invรกlidos", - "userNotFound": "Usuario no encontrado", - "accountLocked": "Cuenta bloqueada. Por favor, intรฉntalo de nuevo mรกs tarde", - "unexpectedError": "Ocurriรณ un error inesperado. Por favor, intรฉntalo de nuevo" - }, - "validation": { - "invalidEmail": "Direcciรณn de correo electrรณnico no vรกlida", - "passwordMinLength": "La contraseรฑa debe tener al menos 6 caracteres", - "firstNameRequired": "Se requiere el nombre", - "lastNameRequired": "Se requiere el apellido", - "usernameLength": "El nombre de usuario debe tener al menos 3 caracteres", - "usernameSpaces": "El nombre de usuario no puede contener espacios", - "passwordLength": "La contraseรฑa debe tener al menos 8 caracteres", - "passwordsMatch": "Las contraseรฑas no coinciden" - }, - "fileSelector": { - "availableFiles": "Archivos disponibles ({{count}})", - "shareFiles": "Compartir archivos ({{count}})", - "searchPlaceholder": "Buscar archivos...", - "noMatchingFiles": "No hay archivos que coincidan", - "noAvailableFiles": "No hay archivos disponibles", - "noFilesInShare": "No hay archivos compartidos", - "saveChanges": "Guardar cambios" - }, - "recipientSelector": { - "emailPlaceholder": "Introduce el correo del destinatario", - "add": "Agregar", - "recipients": "Destinatarios ({{count}})", - "notifyAll": "Notificar a todos", - "noRecipients": "Aรบn no se han agregado destinatarios", - "addSuccess": "Destinatario agregado exitosamente", - "addError": "Error al agregar el destinatario", - "removeSuccess": "Destinatario eliminado exitosamente", - "removeError": "Error al eliminar el destinatario", - "sendingNotifications": "Enviando notificaciones...", - "notifySuccess": "Destinatarios notificados exitosamente", - "notifyError": "Error al notificar a los destinatarios" - }, - "navigation": { - "dashboard": "Panel de control" - }, "common": { "loading": "Cargando, por favor espera...", "cancel": "Cancelar", @@ -78,6 +24,22 @@ "success": "Comparticiรณn creada exitosamente", "error": "Error al crear la comparticiรณn" }, + "dashboard": { + "loadError": "Error al cargar los datos del tablero", + "linkCopied": "Enlace copiado al portapapeles", + "pageTitle": "Panel de control", + "breadcrumb": "Panel de control" + }, + "emptyState": { + "noFiles": "Aรบn no se han subido archivos", + "uploadFile": "Subir archivo" + }, + "errors": { + "invalidCredentials": "Correo electrรณnico o contraseรฑa invรกlidos", + "userNotFound": "Usuario no encontrado", + "accountLocked": "Cuenta bloqueada. Por favor, intรฉntalo de nuevo mรกs tarde", + "unexpectedError": "Ocurriรณ un error inesperado. Por favor, intรฉntalo de nuevo" + }, "fileActions": { "editFile": "Editar archivo", "nameLabel": "Nombre", @@ -86,9 +48,16 @@ "descriptionLabel": "Descripciรณn", "descriptionPlaceholder": "Introduce una descripciรณn del archivo", "deleteFile": "Eliminar archivo", - "deleteConfirmation": "ยฟEstรกs seguro de que deseas eliminar \"{{fileName}}\"?", + "deleteConfirmation": "ยฟEstรกs seguro de que deseas eliminar ?", "deleteWarning": "Esta acciรณn no se puede deshacer." }, + "fileManager": { + "downloadError": "Error al descargar el archivo", + "updateSuccess": "Archivo actualizado exitosamente", + "updateError": "Error al actualizar el archivo", + "deleteSuccess": "Archivo eliminado exitosamente", + "deleteError": "Error al eliminar el archivo" + }, "filePreview": { "loading": "Cargando vista previa...", "notAvailable": "Vista previa no disponible", @@ -98,68 +67,21 @@ "loadError": "Error al cargar la vista previa", "downloadError": "Error al descargar el archivo" }, - "generateShareLink": { - "generateTitle": "Generar enlace de comparticiรณn", - "updateTitle": "Actualizar enlace de comparticiรณn", - "generateDescription": "Genera un enlace para compartir tus archivos", - "updateDescription": "Actualiza el alias para este enlace de comparticiรณn", - "aliasPlaceholder": "Introduce un alias", - "linkReady": "Tu enlace de comparticiรณn estรก listo:", - "generateButton": "Generar enlace", - "updateButton": "Actualizar enlace", - "copyButton": "Copiar enlace", - "success": "Enlace generado exitosamente", - "error": "Error al generar el enlace", - "copied": "Enlace copiado al portapapeles" + "fileSelector": { + "availableFiles": "Archivos disponibles ({{count}})", + "shareFiles": "Compartir archivos ({{count}})", + "searchPlaceholder": "Buscar archivos...", + "noMatchingFiles": "No hay archivos que coincidan", + "noAvailableFiles": "No hay archivos disponibles", + "noFilesInShare": "No hay archivos compartidos", + "saveChanges": "Guardar cambios" }, - "shareActions": { - "deleteTitle": "Eliminar comparticiรณn", - "deleteConfirmation": "ยฟEstรกs seguro de que deseas eliminar esta comparticiรณn? Esta acciรณn no se puede deshacer.", - "editTitle": "Editar comparticiรณn", - "nameLabel": "Nombre de la comparticiรณn", - "expirationLabel": "Fecha de expiraciรณn", - "expirationPlaceholder": "MM/DD/AAAA HH:MM", - "maxViewsLabel": "Mรกximo de visualizaciones", - "maxViewsPlaceholder": "Dejar vacรญo para ilimitado", - "passwordProtection": "Protegido con contraseรฑa", - "passwordLabel": "Contraseรฑa", - "passwordPlaceholder": "Introduce la contraseรฑa", - "newPasswordLabel": "Nueva contraseรฑa (dejar vacรญo para mantener la actual)", - "newPasswordPlaceholder": "Introduce la nueva contraseรฑa", - "manageFilesTitle": "Gestionar archivos", - "manageRecipientsTitle": "Gestionar destinatarios", - "editSuccess": "Comparticiรณn actualizada exitosamente", - "editError": "Error al actualizar la comparticiรณn" - }, - "shareDetails": { - "title": "Detalles de la comparticiรณn", - "subtitle": "Informaciรณn detallada sobre esta comparticiรณn", - "basicInfo": "Informaciรณn bรกsica", - "name": "Nombre", - "untitled": "Sin tรญtulo", - "views": "Visualizaciones", - "dates": "Fechas", - "created": "Creada", - "expires": "Expira", - "never": "Nunca", - "security": "Seguridad", - "passwordProtected": "Protegido con contraseรฑa", - "publicAccess": "Acceso pรบblico", - "maxViews": "Mรกximo de visualizaciones: {{count}}", - "files": "Archivos ({{count}})", - "recipients": "Destinatarios ({{count}})", - "notAvailable": "N/D", - "invalidDate": "Fecha invรกlida", - "loadError": "Error al cargar los detalles de la comparticiรณn" - }, - "uploadFile": { - "title": "Subir archivo", - "selectFile": "Haz clic para seleccionar un archivo", - "preview": "Vista previa", - "uploadProgress": "Progreso de la subida", - "upload": "Subir", - "success": "Archivo subido exitosamente", - "error": "Error al subir el archivo" + "files": { + "title": "Todos los archivos", + "uploadFile": "Subir archivo", + "loadError": "Error al cargar los archivos", + "pageTitle": "Mis archivos", + "breadcrumb": "Mis archivos" }, "filesTable": { "ariaLabel": "Tabla de archivos", @@ -179,119 +101,10 @@ "delete": "Eliminar" } }, - "sharesTable": { - "ariaLabel": "Tabla de comparticiones", - "never": "Nunca", - "columns": { - "name": "NOMBRE", - "createdAt": "CREADO", - "expiresAt": "EXPIRA", - "status": "ESTADO", - "security": "SEGURIDAD", - "files": "ARCHIVOS", - "recipients": "DESTINATARIOS", - "actions": "ACCIONES" - }, - "status": { - "neverExpires": "Nunca expira", - "active": "Activa", - "expired": "Expirada" - }, - "security": { - "protected": "Protegida", - "public": "Pรบblica" - }, - "filesCount": "{{count}} archivos", - "recipientsCount": "{{count}} destinatarios", - "actions": { - "menu": "Menรบ de acciones de la comparticiรณn", - "edit": "Editar", - "manageFiles": "Gestionar archivos", - "manageRecipients": "Gestionar destinatarios", - "viewDetails": "Ver detalles", - "generateLink": "Generar enlace", - "editLink": "Editar enlace", - "copyLink": "Copiar enlace", - "notifyRecipients": "Notificar destinatarios", - "delete": "Eliminar" - } - }, "footer": { "poweredBy": "Desarrollado por", "kyanHomepage": "Pรกgina principal de Kyantech" }, - "fileManager": { - "downloadError": "Error al descargar el archivo", - "updateSuccess": "Archivo actualizado exitosamente", - "updateError": "Error al actualizar el archivo", - "deleteSuccess": "Archivo eliminado exitosamente", - "deleteError": "Error al eliminar el archivo" - }, - "shareManager": { - "deleteSuccess": "Comparticiรณn eliminada exitosamente", - "deleteError": "Error al eliminar la comparticiรณn", - "updateSuccess": "Comparticiรณn actualizada exitosamente", - "updateError": "Error al actualizar la comparticiรณn", - "filesUpdateSuccess": "Archivos actualizados exitosamente", - "filesUpdateError": "Error al actualizar los archivos", - "recipientsUpdateSuccess": "Destinatarios actualizados exitosamente", - "recipientsUpdateError": "Error al actualizar los destinatarios", - "linkGenerateSuccess": "Enlace de comparticiรณn generado exitosamente", - "linkGenerateError": "Error al generar el enlace de comparticiรณn", - "notifyLoading": "Enviando notificaciones...", - "notifySuccess": "Destinatarios notificados exitosamente", - "notifyError": "Error al notificar a los destinatarios" - }, - "quickAccess": { - "files": { - "title": "Mis archivos", - "description": "Accede y gestiona tus archivos subidos" - }, - "shares": { - "title": "Mis comparticiones", - "description": "Visualiza y gestiona tus archivos compartidos" - } - }, - "recentFiles": { - "title": "Subidas recientes", - "viewAll": "Ver todo", - "uploadFile": "Subir archivo", - "noFiles": "Aรบn no se han subido archivos" - }, - "recentShares": { - "title": "Comparticiones recientes", - "viewAll": "Ver todo", - "createShare": "Crear comparticiรณn", - "noShares": "Aรบn no se han creado comparticiones", - "createFirst": "Crea tu primera comparticiรณn" - }, - "storageUsage": { - "title": "Uso de almacenamiento", - "ariaLabel": "Barra de progreso del uso de almacenamiento", - "used": "{{size}} usados", - "available": "{{size}} disponibles" - }, - "dashboard": { - "loadError": "Error al cargar los datos del tablero", - "linkCopied": "Enlace copiado al portapapeles", - "pageTitle": "Panel de control", - "breadcrumb": "Panel de control" - }, - "emptyState": { - "noFiles": "Aรบn no se han subido archivos", - "uploadFile": "Subir archivo" - }, - "files": { - "title": "Todos los archivos", - "uploadFile": "Subir archivo", - "loadError": "Error al cargar los archivos", - "pageTitle": "Mis archivos", - "breadcrumb": "Mis archivos" - }, - "searchBar": { - "placeholder": "Buscar archivos...", - "results": "Se encontraron {{filtered}} de {{total}} archivos" - }, "forgotPassword": { "emailLabel": "Direcciรณn de correo electrรณnico", "emailPlaceholder": "Introduce tu correo electrรณnico", @@ -303,6 +116,20 @@ "resetInstructions": "Instrucciones de restablecimiento enviadas a tu correo electrรณnico", "pageTitle": "Recuperar contraseรฑa" }, + "generateShareLink": { + "generateTitle": "Generar enlace de comparticiรณn", + "updateTitle": "Actualizar enlace de comparticiรณn", + "generateDescription": "Genera un enlace para compartir tus archivos", + "updateDescription": "Actualiza el alias para este enlace de comparticiรณn", + "aliasPlaceholder": "Introduce un alias", + "linkReady": "Tu enlace de comparticiรณn estรก listo:", + "generateButton": "Generar enlace", + "updateButton": "Actualizar enlace", + "copyButton": "Copiar enlace", + "success": "Enlace generado exitosamente", + "error": "Error al generar el enlace", + "copied": "Enlace copiado al portapapeles" + }, "home": { "description": "La alternativa de cรณdigo abierto a WeTransfer. Comparte archivos de forma segura, sin rastreo ni limitaciones.", "documentation": "Documentaciรณn", @@ -314,6 +141,46 @@ }, "pageTitle": "Inicio" }, + "login": { + "welcome": "Bienvenido a", + "signInToContinue": "Inicia sesiรณn para continuar", + "emailLabel": "Direcciรณn de correo electrรณnico", + "emailPlaceholder": "Introduce tu correo electrรณnico", + "passwordLabel": "Contraseรฑa", + "passwordPlaceholder": "Introduce tu contraseรฑa", + "signIn": "Iniciar sesiรณn", + "signingIn": "Iniciando sesiรณn...", + "forgotPassword": "ยฟOlvidaste tu contraseรฑa?", + "pageTitle": "Iniciar sesiรณn" + }, + "logo": { + "labels": { + "appLogo": "Logo de la aplicaciรณn" + }, + "buttons": { + "upload": "Subir logo", + "remove": "Eliminar logo" + }, + "messages": { + "uploadSuccess": "Logo subido exitosamente", + "removeSuccess": "Logo eliminado exitosamente" + }, + "errors": { + "uploadFailed": "Error al subir el logo", + "removeFailed": "Error al eliminar el logo" + } + }, + "navbar": { + "logoAlt": "Logo de la aplicaciรณn", + "profileMenu": "Menรบ de perfil", + "profile": "Perfil", + "settings": "Configuraciรณn", + "usersManagement": "Gestiรณn de usuarios", + "logout": "Cerrar sesiรณn" + }, + "navigation": { + "dashboard": "Panel de control" + }, "profile": { "password": { "title": "Cambiar contraseรฑa", @@ -356,6 +223,43 @@ }, "pageTitle": "Perfil" }, + "quickAccess": { + "files": { + "title": "Mis archivos", + "description": "Accede y gestiona tus archivos subidos" + }, + "shares": { + "title": "Mis comparticiones", + "description": "Visualiza y gestiona tus archivos compartidos" + } + }, + "recentFiles": { + "title": "Subidas recientes", + "viewAll": "Ver todo", + "uploadFile": "Subir archivo", + "noFiles": "Aรบn no se han subido archivos" + }, + "recentShares": { + "title": "Comparticiones recientes", + "viewAll": "Ver todo", + "createShare": "Crear comparticiรณn", + "noShares": "Aรบn no se han creado comparticiones", + "createFirst": "Crea tu primera comparticiรณn" + }, + "recipientSelector": { + "emailPlaceholder": "Introduce el correo del destinatario", + "add": "Agregar", + "recipients": "Destinatarios ({{count}})", + "notifyAll": "Notificar a todos", + "noRecipients": "Aรบn no se han agregado destinatarios", + "addSuccess": "Destinatario agregado exitosamente", + "addError": "Error al agregar el destinatario", + "removeSuccess": "Destinatario eliminado exitosamente", + "removeError": "Error al eliminar el destinatario", + "sendingNotifications": "Enviando notificaciones...", + "notifySuccess": "Destinatarios notificados exitosamente", + "notifyError": "Error al notificar a los destinatarios" + }, "resetPassword": { "pageTitle": "Restablecer contraseรฑa", "header": { @@ -379,6 +283,10 @@ "invalidToken": "Token de restablecimiento invรกlido o ausente" } }, + "searchBar": { + "placeholder": "Buscar archivos...", + "results": "Se encontraron {{filtered}} de {{total}} archivos" + }, "settings": { "groups": { "defaultDescription": "Opciones de configuraciรณn", @@ -513,6 +421,61 @@ }, "pageTitle": "Comparticiรณn" }, + "shareActions": { + "deleteTitle": "Eliminar comparticiรณn", + "deleteConfirmation": "ยฟEstรกs seguro de que deseas eliminar esta comparticiรณn? Esta acciรณn no se puede deshacer.", + "editTitle": "Editar comparticiรณn", + "nameLabel": "Nombre de la comparticiรณn", + "expirationLabel": "Fecha de expiraciรณn", + "expirationPlaceholder": "MM/DD/AAAA HH:MM", + "maxViewsLabel": "Mรกximo de visualizaciones", + "maxViewsPlaceholder": "Dejar vacรญo para ilimitado", + "passwordProtection": "Protegido con contraseรฑa", + "passwordLabel": "Contraseรฑa", + "passwordPlaceholder": "Introduce la contraseรฑa", + "newPasswordLabel": "Nueva contraseรฑa (dejar vacรญo para mantener la actual)", + "newPasswordPlaceholder": "Introduce la nueva contraseรฑa", + "manageFilesTitle": "Gestionar archivos", + "manageRecipientsTitle": "Gestionar destinatarios", + "editSuccess": "Comparticiรณn actualizada exitosamente", + "editError": "Error al actualizar la comparticiรณn" + }, + "shareDetails": { + "title": "Detalles de la comparticiรณn", + "subtitle": "Informaciรณn detallada sobre esta comparticiรณn", + "basicInfo": "Informaciรณn bรกsica", + "name": "Nombre", + "untitled": "Sin tรญtulo", + "views": "Visualizaciones", + "dates": "Fechas", + "created": "Creada", + "expires": "Expira", + "never": "Nunca", + "security": "Seguridad", + "passwordProtected": "Protegido con contraseรฑa", + "publicAccess": "Acceso pรบblico", + "maxViews": "Mรกximo de visualizaciones:", + "files": "Archivos", + "recipients": "Destinatarios", + "notAvailable": "N/D", + "invalidDate": "Fecha invรกlida", + "loadError": "Error al cargar los detalles de la comparticiรณn" + }, + "shareManager": { + "deleteSuccess": "Comparticiรณn eliminada exitosamente", + "deleteError": "Error al eliminar la comparticiรณn", + "updateSuccess": "Comparticiรณn actualizada exitosamente", + "updateError": "Error al actualizar la comparticiรณn", + "filesUpdateSuccess": "Archivos actualizados exitosamente", + "filesUpdateError": "Error al actualizar los archivos", + "recipientsUpdateSuccess": "Destinatarios actualizados exitosamente", + "recipientsUpdateError": "Error al actualizar los destinatarios", + "linkGenerateSuccess": "Enlace de comparticiรณn generado exitosamente", + "linkGenerateError": "Error al generar el enlace de comparticiรณn", + "notifyLoading": "Enviando notificaciones...", + "notifySuccess": "Destinatarios notificados exitosamente", + "notifyError": "Error al notificar a los destinatarios" + }, "shares": { "errors": { "loadFailed": "Error al cargar las comparticiones", @@ -539,6 +502,64 @@ }, "pageTitle": "Comparticiones" }, + "sharesTable": { + "ariaLabel": "Tabla de comparticiones", + "never": "Nunca", + "columns": { + "name": "NOMBRE", + "createdAt": "CREADO", + "expiresAt": "EXPIRA", + "status": "ESTADO", + "security": "SEGURIDAD", + "files": "ARCHIVOS", + "recipients": "DESTINATARIOS", + "actions": "ACCIONES" + }, + "status": { + "neverExpires": "Nunca expira", + "active": "Activa", + "expired": "Expirada" + }, + "security": { + "protected": "Protegida", + "public": "Pรบblica" + }, + "filesCount": "archivos", + "recipientsCount": "destinatarios", + "actions": { + "menu": "Menรบ de acciones de la comparticiรณn", + "edit": "Editar", + "manageFiles": "Gestionar archivos", + "manageRecipients": "Gestionar destinatarios", + "viewDetails": "Ver detalles", + "generateLink": "Generar enlace", + "editLink": "Editar enlace", + "copyLink": "Copiar enlace", + "notifyRecipients": "Notificar destinatarios", + "delete": "Eliminar" + } + }, + "storageUsage": { + "title": "Uso de almacenamiento", + "ariaLabel": "Barra de progreso del uso de almacenamiento", + "used": "usados", + "available": "disponibles" + }, + "theme": { + "toggle": "Cambiar tema", + "light": "Claro", + "dark": "Oscuro", + "system": "Sistema" + }, + "uploadFile": { + "title": "Subir archivo", + "selectFile": "Haz clic para seleccionar un archivo", + "preview": "Vista previa", + "uploadProgress": "Progreso de la subida", + "upload": "Subir", + "success": "Archivo subido exitosamente", + "error": "Error al subir el archivo" + }, "users": { "modes": { "create": "crear", @@ -608,29 +629,16 @@ "userr": "Usuario" } }, - "logo": { - "labels": { - "appLogo": "Logo de la aplicaciรณn" - }, - "buttons": { - "upload": "Subir logo", - "remove": "Eliminar logo" - }, - "messages": { - "uploadSuccess": "Logo subido exitosamente", - "removeSuccess": "Logo eliminado exitosamente" - }, - "errors": { - "uploadFailed": "Error al subir el logo", - "removeFailed": "Error al eliminar el logo" - } - }, - "navbar": { - "logoAlt": "Logo de la aplicaciรณn", - "profileMenu": "Menรบ de perfil", - "profile": "Perfil", - "settings": "Configuraciรณn", - "usersManagement": "Gestiรณn de usuarios", - "logout": "Cerrar sesiรณn" + "validation": { + "invalidEmail": "Direcciรณn de correo electrรณnico no vรกlida", + "passwordMinLength": "La contraseรฑa debe tener al menos 6 caracteres", + "firstNameRequired": "Se requiere el nombre", + "lastNameRequired": "Se requiere el apellido", + "usernameLength": "El nombre de usuario debe tener al menos 3 caracteres", + "usernameSpaces": "El nombre de usuario no puede contener espacios", + "passwordLength": "La contraseรฑa debe tener al menos 8 caracteres", + "passwordsMatch": "Las contraseรฑas no coinciden", + "emailRequired": "Se requiere el correo electrรณnico", + "passwordRequired": "Se requiere la contraseรฑa" } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/fr-FR.json b/apps/web/messages/fr-FR.json similarity index 97% rename from apps/web/src/locales/fr-FR.json rename to apps/web/messages/fr-FR.json index 95321af..329c81c 100644 --- a/apps/web/src/locales/fr-FR.json +++ b/apps/web/messages/fr-FR.json @@ -1,58 +1,4 @@ { - "login": { - "welcome": "Bienvenue", - "signInToContinue": "Connectez-vous pour continuer", - "emailLabel": "Adresse e-mail", - "emailPlaceholder": "Entrez votre e-mail", - "passwordLabel": "Mot de passe", - "passwordPlaceholder": "Entrez votre mot de passe", - "signIn": "Se connecter", - "signingIn": "Connexion en cours...", - "forgotPassword": "Mot de passe oubliรฉ ?", - "pageTitle": "Connexion" - }, - "errors": { - "invalidCredentials": "E-mail ou mot de passe invalide", - "userNotFound": "Utilisateur non trouvรฉ", - "accountLocked": "Compte bloquรฉ. Veuillez rรฉessayer plus tard", - "unexpectedError": "Une erreur inattendue s'est produite. Veuillez rรฉessayer" - }, - "validation": { - "invalidEmail": "Adresse email invalide", - "passwordMinLength": "Le mot de passe doit contenir au moins 6 caractรจres", - "firstNameRequired": "Le prรฉnom est requis", - "lastNameRequired": "Le nom est requis", - "usernameLength": "Le nom d'utilisateur doit contenir au moins 3 caractรจres", - "usernameSpaces": "Le nom d'utilisateur ne peut pas contenir d'espaces", - "passwordLength": "Le mot de passe doit contenir au moins 8 caractรจres", - "passwordsMatch": "Les mots de passe ne correspondent pas" - }, - "fileSelector": { - "availableFiles": "Fichiers Disponibles ({{count}})", - "shareFiles": "Fichiers Partagรฉs ({{count}})", - "searchPlaceholder": "Rechercher des fichiers...", - "noMatchingFiles": "Aucun fichier correspondant", - "noAvailableFiles": "Aucun fichier disponible", - "noFilesInShare": "Aucun fichier partagรฉ", - "saveChanges": "Enregistrer les Modifications" - }, - "recipientSelector": { - "emailPlaceholder": "Entrez l'e-mail du destinataire", - "add": "Ajouter", - "recipients": "Destinataires ({{count}})", - "notifyAll": "Notifier Tous", - "noRecipients": "Aucun destinataire ajoutรฉ", - "addSuccess": "Destinataire ajoutรฉ avec succรจs", - "addError": "ร‰chec de l'ajout du destinataire", - "removeSuccess": "Destinataire supprimรฉ avec succรจs", - "removeError": "ร‰chec de la suppression du destinataire", - "sendingNotifications": "Envoi des notifications...", - "notifySuccess": "Destinataires notifiรฉs avec succรจs", - "notifyError": "ร‰chec de la notification des destinataires" - }, - "navigation": { - "dashboard": "Tableau de bord" - }, "common": { "loading": "Chargement, veuillez patienter...", "cancel": "Annuler", @@ -78,6 +24,22 @@ "success": "Partage crรฉรฉ avec succรจs", "error": "ร‰chec de la crรฉation du partage" }, + "dashboard": { + "loadError": "ร‰chec du chargement des donnรฉes du tableau de bord", + "linkCopied": "Lien copiรฉ dans le presse-papiers", + "pageTitle": "Tableau de Bord", + "breadcrumb": "Tableau de Bord" + }, + "emptyState": { + "noFiles": "Aucun fichier tรฉlรฉchargรฉ pour le moment", + "uploadFile": "Envoyer un Fichier" + }, + "errors": { + "invalidCredentials": "E-mail ou mot de passe invalide", + "userNotFound": "Utilisateur non trouvรฉ", + "accountLocked": "Compte bloquรฉ. Veuillez rรฉessayer plus tard", + "unexpectedError": "Une erreur inattendue s'est produite. Veuillez rรฉessayer" + }, "fileActions": { "editFile": "Modifier le Fichier", "nameLabel": "Nom", @@ -86,9 +48,16 @@ "descriptionLabel": "Description", "descriptionPlaceholder": "Entrez la description du fichier", "deleteFile": "Supprimer le Fichier", - "deleteConfirmation": "รŠtes-vous sรปr de vouloir supprimer \"{{fileName}}\" ?", + "deleteConfirmation": "รŠtes-vous sรปr de vouloir supprimer ?", "deleteWarning": "Cette action ne peut pas รชtre annulรฉe." }, + "fileManager": { + "downloadError": "ร‰chec du tรฉlรฉchargement du fichier", + "updateSuccess": "Fichier mis ร  jour avec succรจs", + "updateError": "ร‰chec de la mise ร  jour du fichier", + "deleteSuccess": "Fichier supprimรฉ avec succรจs", + "deleteError": "ร‰chec de la suppression du fichier" + }, "filePreview": { "loading": "Chargement de l'aperรงu...", "notAvailable": "Aperรงu non disponible", @@ -98,68 +67,21 @@ "loadError": "ร‰chec du chargement de l'aperรงu", "downloadError": "ร‰chec du tรฉlรฉchargement du fichier" }, - "generateShareLink": { - "generateTitle": "Gรฉnรฉrer un Lien de Partage", - "updateTitle": "Mettre ร  Jour le Lien de Partage", - "generateDescription": "Gรฉnรฉrez un lien pour partager vos fichiers", - "updateDescription": "Mettez ร  jour l'alias de ce lien de partage", - "aliasPlaceholder": "Entrez l'alias", - "linkReady": "Votre lien de partage est prรชt :", - "generateButton": "Gรฉnรฉrer le Lien", - "updateButton": "Mettre ร  Jour le Lien", - "copyButton": "Copier le Lien", - "success": "Lien gรฉnรฉrรฉ avec succรจs", - "error": "ร‰chec de la gรฉnรฉration du lien", - "copied": "Lien copiรฉ dans le presse-papiers" + "fileSelector": { + "availableFiles": "Fichiers Disponibles ({{count}})", + "shareFiles": "Fichiers Partagรฉs ({{count}})", + "searchPlaceholder": "Rechercher des fichiers...", + "noMatchingFiles": "Aucun fichier correspondant", + "noAvailableFiles": "Aucun fichier disponible", + "noFilesInShare": "Aucun fichier partagรฉ", + "saveChanges": "Enregistrer les Modifications" }, - "shareActions": { - "deleteTitle": "Supprimer le Partage", - "deleteConfirmation": "รŠtes-vous sรปr de vouloir supprimer ce partage ? Cette action ne peut pas รชtre annulรฉe.", - "editTitle": "Modifier le Partage", - "nameLabel": "Nom du Partage", - "expirationLabel": "Date d'Expiration", - "expirationPlaceholder": "JJ/MM/AAAA HH:MM", - "maxViewsLabel": "Vues Maximales", - "maxViewsPlaceholder": "Laisser vide pour illimitรฉ", - "passwordProtection": "Protรฉgรฉ par Mot de Passe", - "passwordLabel": "Mot de Passe", - "passwordPlaceholder": "Entrez le mot de passe", - "newPasswordLabel": "Nouveau Mot de Passe (laisser vide pour garder l'actuel)", - "newPasswordPlaceholder": "Entrez le nouveau mot de passe", - "manageFilesTitle": "Gรฉrer les Fichiers", - "manageRecipientsTitle": "Gรฉrer les Destinataires", - "editSuccess": "Partage mis ร  jour avec succรจs", - "editError": "ร‰chec de la mise ร  jour du partage" - }, - "shareDetails": { - "title": "Dรฉtails du Partage", - "subtitle": "Informations dรฉtaillรฉes sur ce partage", - "basicInfo": "Informations de Base", - "name": "Nom", - "untitled": "Partage sans titre", - "views": "Vues", - "dates": "Dates", - "created": "Crรฉรฉ le: {{date}}", - "expires": "Expire le: {{date}}", - "never": "Jamais", - "security": "Sรฉcuritรฉ", - "passwordProtected": "Protรฉgรฉ par Mot de Passe", - "publicAccess": "Accรจs Public", - "maxViews": "Vues Maximales : {{count}}", - "files": "Fichiers ({{count}})", - "recipients": "Destinataires ({{count}})", - "notAvailable": "N/D", - "invalidDate": "Date invalide", - "loadError": "ร‰chec du chargement des dรฉtails du partage" - }, - "uploadFile": { - "title": "Envoyer un Fichier", - "selectFile": "Cliquez pour sรฉlectionner un fichier", - "preview": "Aperรงu", - "uploadProgress": "Progression de l'envoi", - "upload": "Envoyer", - "success": "Fichier envoyรฉ avec succรจs", - "error": "ร‰chec de l'envoi du fichier" + "files": { + "title": "Tous les Fichiers", + "uploadFile": "Envoyer un Fichier", + "loadError": "ร‰chec du chargement des fichiers", + "pageTitle": "Mes Fichiers", + "breadcrumb": "Mes Fichiers" }, "filesTable": { "ariaLabel": "Tableau des fichiers", @@ -179,119 +101,10 @@ "delete": "Supprimer" } }, - "sharesTable": { - "ariaLabel": "Tableau des partages", - "never": "Jamais", - "columns": { - "name": "NOM", - "createdAt": "CRร‰ร‰ LE", - "expiresAt": "EXPIRE LE", - "status": "STATUT", - "security": "Sร‰CURITร‰", - "files": "FICHIERS", - "recipients": "DESTINATAIRES", - "actions": "ACTIONS" - }, - "status": { - "neverExpires": "N'expire Jamais", - "active": "Actif", - "expired": "Expirรฉ" - }, - "security": { - "protected": "Protรฉgรฉ", - "public": "Public" - }, - "filesCount": "{{count}} fichiers", - "recipientsCount": "{{count}} destinataires", - "actions": { - "menu": "Menu d'actions du partage", - "edit": "Modifier", - "manageFiles": "Gรฉrer les Fichiers", - "manageRecipients": "Gรฉrer les Destinataires", - "viewDetails": "Voir les Dรฉtails", - "generateLink": "Gรฉnรฉrer un Lien", - "editLink": "Modifier le Lien", - "copyLink": "Copier le Lien", - "notifyRecipients": "Notifier les Destinataires", - "delete": "Supprimer" - } - }, "footer": { "poweredBy": "Propulsรฉ par", "kyanHomepage": "Page d'accueil de Kyantech" }, - "fileManager": { - "downloadError": "ร‰chec du tรฉlรฉchargement du fichier", - "updateSuccess": "Fichier mis ร  jour avec succรจs", - "updateError": "ร‰chec de la mise ร  jour du fichier", - "deleteSuccess": "Fichier supprimรฉ avec succรจs", - "deleteError": "ร‰chec de la suppression du fichier" - }, - "shareManager": { - "deleteSuccess": "Partage supprimรฉ avec succรจs", - "deleteError": "ร‰chec de la suppression du partage", - "updateSuccess": "Partage mis ร  jour avec succรจs", - "updateError": "ร‰chec de la mise ร  jour du partage", - "filesUpdateSuccess": "Fichiers mis ร  jour avec succรจs", - "filesUpdateError": "ร‰chec de la mise ร  jour des fichiers", - "recipientsUpdateSuccess": "Destinataires mis ร  jour avec succรจs", - "recipientsUpdateError": "ร‰chec de la mise ร  jour des destinataires", - "linkGenerateSuccess": "Lien de partage gรฉnรฉrรฉ avec succรจs", - "linkGenerateError": "ร‰chec de la gรฉnรฉration du lien de partage", - "notifyLoading": "Envoi des notifications...", - "notifySuccess": "Destinataires notifiรฉs avec succรจs", - "notifyError": "ร‰chec de la notification des destinataires" - }, - "quickAccess": { - "files": { - "title": "Mes Fichiers", - "description": "Accรฉdez et gรฉrez vos fichiers tรฉlรฉchargรฉs" - }, - "shares": { - "title": "Mes Partages", - "description": "Visualisez et gรฉrez vos fichiers partagรฉs" - } - }, - "recentFiles": { - "title": "Tรฉlรฉchargements Rรฉcents", - "viewAll": "Voir Tout", - "uploadFile": "Envoyer un Fichier", - "noFiles": "Aucun fichier tรฉlรฉchargรฉ pour le moment" - }, - "recentShares": { - "title": "Partages Rรฉcents", - "viewAll": "Voir Tout", - "createShare": "Crรฉer un Partage", - "noShares": "Aucun partage crรฉรฉ pour le moment", - "createFirst": "Crรฉer votre premier partage" - }, - "storageUsage": { - "title": "Utilisation du Stockage", - "ariaLabel": "Barre de progression de l'utilisation du stockage", - "used": "{{size}} utilisรฉ", - "available": "{{size}} disponible" - }, - "dashboard": { - "loadError": "ร‰chec du chargement des donnรฉes du tableau de bord", - "linkCopied": "Lien copiรฉ dans le presse-papiers", - "pageTitle": "Tableau de Bord", - "breadcrumb": "Tableau de Bord" - }, - "emptyState": { - "noFiles": "Aucun fichier tรฉlรฉchargรฉ pour le moment", - "uploadFile": "Envoyer un Fichier" - }, - "files": { - "title": "Tous les Fichiers", - "uploadFile": "Envoyer un Fichier", - "loadError": "ร‰chec du chargement des fichiers", - "pageTitle": "Mes Fichiers", - "breadcrumb": "Mes Fichiers" - }, - "searchBar": { - "placeholder": "Rechercher des fichiers...", - "results": "Trouvรฉ {{filtered}} sur {{total}} fichiers" - }, "forgotPassword": { "emailLabel": "Adresse Email", "emailPlaceholder": "Entrez votre email", @@ -303,6 +116,20 @@ "resetInstructions": "Instructions de rรฉinitialisation envoyรฉes ร  votre email", "pageTitle": "Mot de Passe Oubliรฉ" }, + "generateShareLink": { + "generateTitle": "Gรฉnรฉrer un Lien de Partage", + "updateTitle": "Mettre ร  Jour le Lien de Partage", + "generateDescription": "Gรฉnรฉrez un lien pour partager vos fichiers", + "updateDescription": "Mettez ร  jour l'alias de ce lien de partage", + "aliasPlaceholder": "Entrez l'alias", + "linkReady": "Votre lien de partage est prรชt :", + "generateButton": "Gรฉnรฉrer le Lien", + "updateButton": "Mettre ร  Jour le Lien", + "copyButton": "Copier le Lien", + "success": "Lien gรฉnรฉrรฉ avec succรจs", + "error": "ร‰chec de la gรฉnรฉration du lien", + "copied": "Lien copiรฉ dans le presse-papiers" + }, "home": { "description": "L'alternative open-source ร  WeTransfer. Partagez des fichiers en toute sรฉcuritรฉ, sans suivi ni limitations.", "documentation": "Documentation", @@ -314,6 +141,46 @@ }, "pageTitle": "Accueil" }, + "login": { + "welcome": "Bienvenue ร ", + "signInToContinue": "Connectez-vous pour continuer", + "emailLabel": "Adresse e-mail", + "emailPlaceholder": "Entrez votre e-mail", + "passwordLabel": "Mot de passe", + "passwordPlaceholder": "Entrez votre mot de passe", + "signIn": "Se connecter", + "signingIn": "Connexion en cours...", + "forgotPassword": "Mot de passe oubliรฉ ?", + "pageTitle": "Connexion" + }, + "logo": { + "labels": { + "appLogo": "Logo de l'application" + }, + "buttons": { + "upload": "Tรฉlรฉcharger le logo", + "remove": "Supprimer le logo" + }, + "messages": { + "uploadSuccess": "Logo tรฉlรฉchargรฉ avec succรจs", + "removeSuccess": "Logo supprimรฉ avec succรจs" + }, + "errors": { + "uploadFailed": "ร‰chec du tรฉlรฉchargement du logo", + "removeFailed": "ร‰chec de la suppression du logo" + } + }, + "navbar": { + "logoAlt": "Logo de l'Application", + "profileMenu": "Menu du Profil", + "profile": "Profil", + "settings": "Paramรจtres", + "usersManagement": "Gestion des Utilisateurs", + "logout": "Dรฉconnexion" + }, + "navigation": { + "dashboard": "Tableau de bord" + }, "profile": { "password": { "title": "Changer le Mot de Passe", @@ -356,6 +223,43 @@ }, "pageTitle": "Profil" }, + "quickAccess": { + "files": { + "title": "Mes Fichiers", + "description": "Accรฉdez et gรฉrez vos fichiers tรฉlรฉchargรฉs" + }, + "shares": { + "title": "Mes Partages", + "description": "Visualisez et gรฉrez vos fichiers partagรฉs" + } + }, + "recentFiles": { + "title": "Tรฉlรฉchargements Rรฉcents", + "viewAll": "Voir Tout", + "uploadFile": "Envoyer un Fichier", + "noFiles": "Aucun fichier tรฉlรฉchargรฉ pour le moment" + }, + "recentShares": { + "title": "Partages Rรฉcents", + "viewAll": "Voir Tout", + "createShare": "Crรฉer un Partage", + "noShares": "Aucun partage crรฉรฉ pour le moment", + "createFirst": "Crรฉer votre premier partage" + }, + "recipientSelector": { + "emailPlaceholder": "Entrez l'e-mail du destinataire", + "add": "Ajouter", + "recipients": "Destinataires ({{count}})", + "notifyAll": "Notifier Tous", + "noRecipients": "Aucun destinataire ajoutรฉ", + "addSuccess": "Destinataire ajoutรฉ avec succรจs", + "addError": "ร‰chec de l'ajout du destinataire", + "removeSuccess": "Destinataire supprimรฉ avec succรจs", + "removeError": "ร‰chec de la suppression du destinataire", + "sendingNotifications": "Envoi des notifications...", + "notifySuccess": "Destinataires notifiรฉs avec succรจs", + "notifyError": "ร‰chec de la notification des destinataires" + }, "resetPassword": { "pageTitle": "Rรฉinitialiser le Mot de Passe", "header": { @@ -379,6 +283,10 @@ "invalidToken": "Jeton de rรฉinitialisation invalide ou manquant" } }, + "searchBar": { + "placeholder": "Rechercher des fichiers...", + "results": "Trouvรฉ {{filtered}} sur {{total}} fichiers" + }, "settings": { "title": "Paramรจtres", "breadcrumb": "Paramรจtres", @@ -512,6 +420,61 @@ }, "pageTitle": "Partage" }, + "shareActions": { + "deleteTitle": "Supprimer le Partage", + "deleteConfirmation": "รŠtes-vous sรปr de vouloir supprimer ce partage ? Cette action ne peut pas รชtre annulรฉe.", + "editTitle": "Modifier le Partage", + "nameLabel": "Nom du Partage", + "expirationLabel": "Date d'Expiration", + "expirationPlaceholder": "JJ/MM/AAAA HH:MM", + "maxViewsLabel": "Vues Maximales", + "maxViewsPlaceholder": "Laisser vide pour illimitรฉ", + "passwordProtection": "Protรฉgรฉ par Mot de Passe", + "passwordLabel": "Mot de Passe", + "passwordPlaceholder": "Entrez le mot de passe", + "newPasswordLabel": "Nouveau Mot de Passe (laisser vide pour garder l'actuel)", + "newPasswordPlaceholder": "Entrez le nouveau mot de passe", + "manageFilesTitle": "Gรฉrer les Fichiers", + "manageRecipientsTitle": "Gรฉrer les Destinataires", + "editSuccess": "Partage mis ร  jour avec succรจs", + "editError": "ร‰chec de la mise ร  jour du partage" + }, + "shareDetails": { + "title": "Dรฉtails du Partage", + "subtitle": "Informations dรฉtaillรฉes sur ce partage", + "basicInfo": "Informations de Base", + "name": "Nom", + "untitled": "Partage sans titre", + "views": "Vues", + "dates": "Dates", + "created": "Crรฉรฉ le: {{date}}", + "expires": "Expire le: {{date}}", + "never": "Jamais", + "security": "Sรฉcuritรฉ", + "passwordProtected": "Protรฉgรฉ par Mot de Passe", + "publicAccess": "Accรจs Public", + "maxViews": "Vues Maximales:", + "files": "Fichiers", + "recipients": "Destinataires", + "notAvailable": "N/D", + "invalidDate": "Date invalide", + "loadError": "ร‰chec du chargement des dรฉtails du partage" + }, + "shareManager": { + "deleteSuccess": "Partage supprimรฉ avec succรจs", + "deleteError": "ร‰chec de la suppression du partage", + "updateSuccess": "Partage mis ร  jour avec succรจs", + "updateError": "ร‰chec de la mise ร  jour du partage", + "filesUpdateSuccess": "Fichiers mis ร  jour avec succรจs", + "filesUpdateError": "ร‰chec de la mise ร  jour des fichiers", + "recipientsUpdateSuccess": "Destinataires mis ร  jour avec succรจs", + "recipientsUpdateError": "ร‰chec de la mise ร  jour des destinataires", + "linkGenerateSuccess": "Lien de partage gรฉnรฉrรฉ avec succรจs", + "linkGenerateError": "ร‰chec de la gรฉnรฉration du lien de partage", + "notifyLoading": "Envoi des notifications...", + "notifySuccess": "Destinataires notifiรฉs avec succรจs", + "notifyError": "ร‰chec de la notification des destinataires" + }, "shares": { "errors": { "loadFailed": "ร‰chec du chargement des partages", @@ -538,6 +501,64 @@ }, "pageTitle": "Partages" }, + "sharesTable": { + "ariaLabel": "Tableau des partages", + "never": "Jamais", + "columns": { + "name": "NOM", + "createdAt": "CRร‰ร‰ LE", + "expiresAt": "EXPIRE LE", + "status": "STATUT", + "security": "Sร‰CURITร‰", + "files": "FICHIERS", + "recipients": "DESTINATAIRES", + "actions": "ACTIONS" + }, + "status": { + "neverExpires": "N'expire Jamais", + "active": "Actif", + "expired": "Expirรฉ" + }, + "security": { + "protected": "Protรฉgรฉ", + "public": "Public" + }, + "filesCount": "fichiers", + "recipientsCount": "destinataires", + "actions": { + "menu": "Menu d'actions du partage", + "edit": "Modifier", + "manageFiles": "Gรฉrer les Fichiers", + "manageRecipients": "Gรฉrer les Destinataires", + "viewDetails": "Voir les Dรฉtails", + "generateLink": "Gรฉnรฉrer un Lien", + "editLink": "Modifier le Lien", + "copyLink": "Copier le Lien", + "notifyRecipients": "Notifier les Destinataires", + "delete": "Supprimer" + } + }, + "storageUsage": { + "title": "Utilisation du Stockage", + "ariaLabel": "Barre de progression de l'utilisation du stockage", + "used": "utilisรฉ", + "available": "disponible" + }, + "theme": { + "toggle": "Changer le thรจme", + "light": "Clair", + "dark": "Sombre", + "system": "Systรจme" + }, + "uploadFile": { + "title": "Envoyer un Fichier", + "selectFile": "Cliquez pour sรฉlectionner un fichier", + "preview": "Aperรงu", + "uploadProgress": "Progression de l'envoi", + "upload": "Envoyer", + "success": "Fichier envoyรฉ avec succรจs", + "error": "ร‰chec de l'envoi du fichier" + }, "users": { "modes": { "create": "crรฉer", @@ -607,29 +628,16 @@ "userr": "Utilisateur" } }, - "logo": { - "labels": { - "appLogo": "Logo de l'application" - }, - "buttons": { - "upload": "Tรฉlรฉcharger le logo", - "remove": "Supprimer le logo" - }, - "messages": { - "uploadSuccess": "Logo tรฉlรฉchargรฉ avec succรจs", - "removeSuccess": "Logo supprimรฉ avec succรจs" - }, - "errors": { - "uploadFailed": "ร‰chec du tรฉlรฉchargement du logo", - "removeFailed": "ร‰chec de la suppression du logo" - } - }, - "navbar": { - "logoAlt": "Logo de l'Application", - "profileMenu": "Menu du Profil", - "profile": "Profil", - "settings": "Paramรจtres", - "usersManagement": "Gestion des Utilisateurs", - "logout": "Dรฉconnexion" + "validation": { + "invalidEmail": "Adresse email invalide", + "passwordMinLength": "Le mot de passe doit contenir au moins 6 caractรจres", + "firstNameRequired": "Le prรฉnom est requis", + "lastNameRequired": "Le nom est requis", + "usernameLength": "Le nom d'utilisateur doit contenir au moins 3 caractรจres", + "usernameSpaces": "Le nom d'utilisateur ne peut pas contenir d'espaces", + "passwordLength": "Le mot de passe doit contenir au moins 8 caractรจres", + "passwordsMatch": "Les mots de passe ne correspondent pas", + "emailRequired": "L'email est requis", + "passwordRequired": "Le mot de passe est requis" } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/hi-IN.json b/apps/web/messages/hi-IN.json similarity index 97% rename from apps/web/src/locales/hi-IN.json rename to apps/web/messages/hi-IN.json index 00a85d0..d601c52 100644 --- a/apps/web/src/locales/hi-IN.json +++ b/apps/web/messages/hi-IN.json @@ -1,58 +1,4 @@ { - "login": { - "welcome": "เคธเฅเคตเคพเค—เคค เคนเฅˆ", - "signInToContinue": "เคœเคพเคฐเฅ€ เคฐเค–เคจเฅ‡ เค•เฅ‡ เคฒเคฟเค เคธเคพเค‡เคจ เค‡เคจ เค•เคฐเฅ‡เค‚", - "emailLabel": "เคˆเคฎเฅ‡เคฒ เคชเคคเคพ", - "emailPlaceholder": "เค…เคชเคจเคพ เคˆเคฎเฅ‡เคฒ เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", - "passwordLabel": "เคชเคพเคธเคตเคฐเฅเคก", - "passwordPlaceholder": "เค…เคชเคจเคพ เคชเคพเคธเคตเคฐเฅเคก เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", - "signIn": "เคธเคพเค‡เคจ เค‡เคจ เค•เคฐเฅ‡เค‚", - "signingIn": "เคธเคพเค‡เคจ เค‡เคจ เคนเฅ‹ เคฐเคนเคพ เคนเฅˆ...", - "forgotPassword": "เคชเคพเคธเคตเคฐเฅเคก เคญเฅ‚เคฒ เค—เค?", - "pageTitle": "เคฒเฅ‰เค—เคฟเคจ" - }, - "errors": { - "invalidCredentials": "เค—เคฒเคค เคˆเคฎเฅ‡เคฒ เคฏเคพ เคชเคพเคธเคตเคฐเฅเคก", - "userNotFound": "เค‰เคชเคฏเฅ‹เค—เค•เคฐเฅเคคเคพ เคจเคนเฅ€เค‚ เคฎเคฟเคฒเคพ", - "accountLocked": "เค–เคพเคคเคพ เคฒเฅ‰เค• เคนเฅˆเฅค เค•เฅƒเคชเคฏเคพ เคฌเคพเคฆ เคฎเฅ‡เค‚ เคชเฅเคฐเคฏเคพเคธ เค•เคฐเฅ‡เค‚", - "unexpectedError": "เคเค• เค…เคชเฅเคฐเคคเฅเคฏเคพเคถเคฟเคค เคคเฅเคฐเฅเคŸเคฟ เคนเฅเคˆเฅค เค•เฅƒเคชเคฏเคพ เคชเฅเคจเคƒ เคชเฅเคฐเคฏเคพเคธ เค•เคฐเฅ‡เค‚" - }, - "validation": { - "invalidEmail": "เค…เคฎเคพเคจเฅเคฏ เคˆเคฎเฅ‡เคฒ เคชเคคเคพ", - "passwordMinLength": "เคชเคพเคธเคตเคฐเฅเคก เค•เคฎ เคธเฅ‡ เค•เคฎ 6 เค…เค•เฅเคทเคฐ เค•เคพ เคนเฅ‹เคจเคพ เคšเคพเคนเคฟเค", - "firstNameRequired": "เคชเคนเคฒเคพ เคจเคพเคฎ เค†เคตเคถเฅเคฏเค• เคนเฅˆ", - "lastNameRequired": "เค…เค‚เคคเคฟเคฎ เคจเคพเคฎ เค†เคตเคถเฅเคฏเค• เคนเฅˆ", - "usernameLength": "เค‰เคชเคฏเฅ‹เค—เค•เคฐเฅเคคเคพ เคจเคพเคฎ เค•เคฎ เคธเฅ‡ เค•เคฎ 3 เค…เค•เฅเคทเคฐ เค•เคพ เคนเฅ‹เคจเคพ เคšเคพเคนเคฟเค", - "usernameSpaces": "เค‰เคชเคฏเฅ‹เค—เค•เคฐเฅเคคเคพ เคจเคพเคฎ เคฎเฅ‡เค‚ เคฐเคฟเค•เฅเคค เคธเฅเคฅเคพเคจ เคจเคนเฅ€เค‚ เคนเฅ‹ เคธเค•เคคเฅ‡", - "passwordLength": "เคชเคพเคธเคตเคฐเฅเคก เค•เคฎ เคธเฅ‡ เค•เคฎ 8 เค…เค•เฅเคทเคฐ เค•เคพ เคนเฅ‹เคจเคพ เคšเคพเคนเคฟเค", - "passwordsMatch": "เคชเคพเคธเคตเคฐเฅเคก เคฎเฅ‡เคฒ เคจเคนเฅ€เค‚ เค–เคพเคคเฅ‡" - }, - "fileSelector": { - "availableFiles": "เค‰เคชเคฒเคฌเฅเคง เคซเคพเค‡เคฒเฅ‡เค‚ ({{count}})", - "shareFiles": "เคซเคพเค‡เคฒเฅ‡เค‚ เคธเคพเคเคพ เค•เคฐเฅ‡เค‚ ({{count}})", - "searchPlaceholder": "เคซเคพเค‡เคฒเฅ‡เค‚ เค–เฅ‹เคœเฅ‡เค‚...", - "noMatchingFiles": "เค•เฅ‹เคˆ เคฎเฅ‡เคฒ เค–เคพเคจเฅ‡ เคตเคพเคฒเฅ€ เคซเคพเค‡เคฒเฅ‡เค‚ เคจเคนเฅ€เค‚", - "noAvailableFiles": "เค•เฅ‹เคˆ เคซเคพเค‡เคฒ เค‰เคชเคฒเคฌเฅเคง เคจเคนเฅ€เค‚", - "noFilesInShare": "เคธเคพเคเคพเค•เคฐเคฃ เคฎเฅ‡เค‚ เค•เฅ‹เคˆ เคซเคพเค‡เคฒเฅ‡เค‚ เคจเคนเฅ€เค‚", - "saveChanges": "เคชเคฐเคฟเคตเคฐเฅเคคเคจ เคธเคนเฅ‡เคœเฅ‡เค‚" - }, - "recipientSelector": { - "emailPlaceholder": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เค•เคพ เคˆเคฎเฅ‡เคฒ เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", - "add": "เคœเฅ‹เคกเคผเฅ‡เค‚", - "recipients": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ ({{count}})", - "notifyAll": "เคธเคญเฅ€ เค•เฅ‹ เคธเฅ‚เคšเคฟเคค เค•เคฐเฅ‡เค‚", - "noRecipients": "เค…เคญเฅ€ เคคเค• เค•เฅ‹เคˆ เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เคจเคนเฅ€เค‚ เคœเฅ‹เคกเคผเคพ เค—เคฏเคพ", - "addSuccess": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคœเฅ‹เคกเคผเคพ เค—เคฏเคพ", - "addError": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เคœเฅ‹เคกเคผเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ", - "removeSuccess": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคนเคŸเคพเคฏเคพ เค—เคฏเคพ", - "removeError": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เคนเคŸเคพเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ", - "sendingNotifications": "เคธเฅ‚เคšเคจเคพเคเค เคญเฅ‡เคœเฅ€ เคœเคพ เคฐเคนเฅ€ เคนเฅˆเค‚...", - "notifySuccess": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เฅ‹ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคธเฅ‚เคšเคฟเคค เค•เคฟเคฏเคพ เค—เคฏเคพ", - "notifyError": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เฅ‹ เคธเฅ‚เคšเคฟเคค เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ" - }, - "navigation": { - "dashboard": "เคกเฅˆเคถเคฌเฅ‹เคฐเฅเคก" - }, "common": { "loading": "เคฒเฅ‹เคก เคนเฅ‹ เคฐเคนเคพ เคนเฅˆ, เค•เฅƒเคชเคฏเคพ เคชเฅเคฐเคคเฅ€เค•เฅเคทเคพ เค•เคฐเฅ‡เค‚...", "cancel": "เคฐเคฆเฅเคฆ เค•เคฐเฅ‡เค‚", @@ -78,6 +24,22 @@ "success": "เคธเคพเคเคพเค•เคฐเคฃ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคฌเคจเคพเคฏเคพ เค—เคฏเคพ", "error": "เคธเคพเคเคพเค•เคฐเคฃ เคฌเคจเคพเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ" }, + "dashboard": { + "loadError": "เคกเฅˆเคถเคฌเฅ‹เคฐเฅเคก เคกเฅ‡เคŸเคพ เคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", + "linkCopied": "เคฒเคฟเค‚เค• เค•เฅเคฒเคฟเคชเคฌเฅ‹เคฐเฅเคก เคฎเฅ‡เค‚ เค•เฅ‰เคชเฅ€ เคนเฅเค†", + "pageTitle": "เคกเฅˆเคถเคฌเฅ‹เคฐเฅเคก", + "breadcrumb": "เคกเฅˆเคถเคฌเฅ‹เคฐเฅเคก" + }, + "emptyState": { + "noFiles": "เค…เคญเฅ€ เคคเค• เค•เฅ‹เคˆ เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เคจเคนเฅ€เค‚ เคนเฅเคˆ", + "uploadFile": "เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เค•เคฐเฅ‡เค‚" + }, + "errors": { + "invalidCredentials": "เค—เคฒเคค เคˆเคฎเฅ‡เคฒ เคฏเคพ เคชเคพเคธเคตเคฐเฅเคก", + "userNotFound": "เค‰เคชเคฏเฅ‹เค—เค•เคฐเฅเคคเคพ เคจเคนเฅ€เค‚ เคฎเคฟเคฒเคพ", + "accountLocked": "เค–เคพเคคเคพ เคฒเฅ‰เค• เคนเฅˆเฅค เค•เฅƒเคชเคฏเคพ เคฌเคพเคฆ เคฎเฅ‡เค‚ เคชเฅเคฐเคฏเคพเคธ เค•เคฐเฅ‡เค‚", + "unexpectedError": "เคเค• เค…เคชเฅเคฐเคคเฅเคฏเคพเคถเคฟเคค เคคเฅเคฐเฅเคŸเคฟ เคนเฅเคˆเฅค เค•เฅƒเคชเคฏเคพ เคชเฅเคจเคƒ เคชเฅเคฐเคฏเคพเคธ เค•เคฐเฅ‡เค‚" + }, "fileActions": { "editFile": "เคซเคพเค‡เคฒ เคธเค‚เคชเคพเคฆเคฟเคค เค•เคฐเฅ‡เค‚", "nameLabel": "เคจเคพเคฎ", @@ -86,9 +48,16 @@ "descriptionLabel": "เคตเคฟเคตเคฐเคฃ", "descriptionPlaceholder": "เคซเคพเค‡เคฒ เค•เคพ เคตเคฟเคตเคฐเคฃ เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", "deleteFile": "เคซเคพเค‡เคฒ เคนเคŸเคพเคเค‚", - "deleteConfirmation": "เค•เฅเคฏเคพ เค†เคช เคตเคพเค•เคˆ \"{{fileName}}\" เคนเคŸเคพเคจเคพ เคšเคพเคนเคคเฅ‡ เคนเฅˆเค‚?", + "deleteConfirmation": "เค•เฅเคฏเคพ เค†เคช เคตเคพเค•เคˆ เคนเคŸเคพเคจเคพ เคšเคพเคนเคคเฅ‡ เคนเฅˆเค‚?", "deleteWarning": "เคฏเคน เค•เฅเคฐเคฟเคฏเคพ เค…เคชเคฐเคฟเคตเคฐเฅเคคเคจเฅ€เคฏ เคนเฅˆเฅค" }, + "fileManager": { + "downloadError": "เคซเคพเค‡เคฒ เคกเคพเค‰เคจเคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", + "updateSuccess": "เคซเคพเค‡เคฒ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคกเฅ‡เคŸ เคนเฅเคˆ", + "updateError": "เคซเคพเค‡เคฒ เค…เคชเคกเฅ‡เคŸ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", + "deleteSuccess": "เคซเคพเค‡เคฒ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคนเคŸเคพเคˆ เค—เคˆ", + "deleteError": "เคซเคพเค‡เคฒ เคนเคŸเคพเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ" + }, "filePreview": { "loading": "เคชเฅ‚เคฐเฅเคตเคพเคตเคฒเฅ‹เค•เคจ เคฒเฅ‹เคก เคนเฅ‹ เคฐเคนเคพ เคนเฅˆ...", "notAvailable": "เคชเฅ‚เคฐเฅเคตเคพเคตเคฒเฅ‹เค•เคจ เค‰เคชเคฒเคฌเฅเคง เคจเคนเฅ€เค‚", @@ -98,68 +67,21 @@ "loadError": "เคชเฅ‚เคฐเฅเคตเคพเคตเคฒเฅ‹เค•เคจ เคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ", "downloadError": "เคซเคพเค‡เคฒ เคกเคพเค‰เคจเคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ" }, - "generateShareLink": { - "generateTitle": "เคธเคพเคเคพเค•เคฐเคฃ เคฒเคฟเค‚เค• เค‰เคคเฅเคชเคจเฅเคจ เค•เคฐเฅ‡เค‚", - "updateTitle": "เคธเคพเคเคพเค•เคฐเคฃ เคฒเคฟเค‚เค• เค…เคชเคกเฅ‡เคŸ เค•เคฐเฅ‡เค‚", - "generateDescription": "เค…เคชเคจเฅ€ เคซเคพเค‡เคฒเฅ‡เค‚ เคธเคพเคเคพ เค•เคฐเคจเฅ‡ เค•เฅ‡ เคฒเคฟเค เคเค• เคฒเคฟเค‚เค• เค‰เคคเฅเคชเคจเฅเคจ เค•เคฐเฅ‡เค‚", - "updateDescription": "เค‡เคธ เคธเคพเคเคพเค•เคฐเคฃ เคฒเคฟเค‚เค• เค•เฅ‡ เคฒเคฟเค เค‰เคชเคจเคพเคฎ เค…เคชเคกเฅ‡เคŸ เค•เคฐเฅ‡เค‚", - "aliasPlaceholder": "เค‰เคชเคจเคพเคฎ เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", - "linkReady": "เค†เคชเค•เคพ เคธเคพเคเคพเค•เคฐเคฃ เคฒเคฟเค‚เค• เคคเฅˆเคฏเคพเคฐ เคนเฅˆ:", - "generateButton": "เคฒเคฟเค‚เค• เค‰เคคเฅเคชเคจเฅเคจ เค•เคฐเฅ‡เค‚", - "updateButton": "เคฒเคฟเค‚เค• เค…เคชเคกเฅ‡เคŸ เค•เคฐเฅ‡เค‚", - "copyButton": "เคฒเคฟเค‚เค• เค•เฅ‰เคชเฅ€ เค•เคฐเฅ‡เค‚", - "success": "เคฒเคฟเค‚เค• เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค‰เคคเฅเคชเคจเฅเคจ เคนเฅเค†", - "error": "เคฒเคฟเค‚เค• เค‰เคคเฅเคชเคจเฅเคจ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ", - "copied": "เคฒเคฟเค‚เค• เค•เฅเคฒเคฟเคชเคฌเฅ‹เคฐเฅเคก เคฎเฅ‡เค‚ เค•เฅ‰เคชเฅ€ เค•เคฟเคฏเคพ เค—เคฏเคพ" + "fileSelector": { + "availableFiles": "เค‰เคชเคฒเคฌเฅเคง เคซเคพเค‡เคฒเฅ‡เค‚ ({{count}})", + "shareFiles": "เคซเคพเค‡เคฒเฅ‡เค‚ เคธเคพเคเคพ เค•เคฐเฅ‡เค‚ ({{count}})", + "searchPlaceholder": "เคซเคพเค‡เคฒเฅ‡เค‚ เค–เฅ‹เคœเฅ‡เค‚...", + "noMatchingFiles": "เค•เฅ‹เคˆ เคฎเฅ‡เคฒ เค–เคพเคจเฅ‡ เคตเคพเคฒเฅ€ เคซเคพเค‡เคฒเฅ‡เค‚ เคจเคนเฅ€เค‚", + "noAvailableFiles": "เค•เฅ‹เคˆ เคซเคพเค‡เคฒ เค‰เคชเคฒเคฌเฅเคง เคจเคนเฅ€เค‚", + "noFilesInShare": "เคธเคพเคเคพเค•เคฐเคฃ เคฎเฅ‡เค‚ เค•เฅ‹เคˆ เคซเคพเค‡เคฒเฅ‡เค‚ เคจเคนเฅ€เค‚", + "saveChanges": "เคชเคฐเคฟเคตเคฐเฅเคคเคจ เคธเคนเฅ‡เคœเฅ‡เค‚" }, - "shareActions": { - "deleteTitle": "เคธเคพเคเคพเค•เคฐเคฃ เคนเคŸเคพเคเค‚", - "deleteConfirmation": "เค•เฅเคฏเคพ เค†เคช เคตเคพเค•เคˆ เค‡เคธ เคธเคพเคเคพเค•เคฐเคฃ เค•เฅ‹ เคนเคŸเคพเคจเคพ เคšเคพเคนเคคเฅ‡ เคนเฅˆเค‚? เคฏเคน เค•เฅเคฐเคฟเคฏเคพ เค…เคชเคฐเคฟเคตเคฐเฅเคคเคจเฅ€เคฏ เคนเฅˆเฅค", - "editTitle": "เคธเคพเคเคพเค•เคฐเคฃ เคธเค‚เคชเคพเคฆเคฟเคค เค•เคฐเฅ‡เค‚", - "nameLabel": "เคธเคพเคเคพเค•เคฐเคฃ เค•เคพ เคจเคพเคฎ", - "expirationLabel": "เคธเคฎเคพเคชเฅเคคเคฟ เคคเคฟเคฅเคฟ", - "expirationPlaceholder": "MM/DD/YYYY HH:MM", - "maxViewsLabel": "เค…เคงเคฟเค•เคคเคฎ เคฆเฅƒเคถเฅเคฏ", - "maxViewsPlaceholder": "เค…เคจเคฒเคฟเคฎเคฟเคŸเฅ‡เคก เค•เฅ‡ เคฒเคฟเค เค–เคพเคฒเฅ€ เค›เฅ‹เคกเคผเฅ‡เค‚", - "passwordProtection": "เคชเคพเคธเคตเคฐเฅเคก เคธเฅเคฐเค•เฅเคทเคพ", - "passwordLabel": "เคชเคพเคธเคตเคฐเฅเคก", - "passwordPlaceholder": "เคชเคพเคธเคตเคฐเฅเคก เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", - "newPasswordLabel": "เคจเคฏเคพ เคชเคพเคธเคตเคฐเฅเคก (เคตเคฐเฅเคคเคฎเคพเคจ เคฐเค–เคจเฅ‡ เค•เฅ‡ เคฒเคฟเค เค–เคพเคฒเฅ€ เค›เฅ‹เคกเคผเฅ‡เค‚)", - "newPasswordPlaceholder": "เคจเคฏเคพ เคชเคพเคธเคตเคฐเฅเคก เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", - "manageFilesTitle": "เคซเคพเค‡เคฒเฅ‡เค‚ เคชเฅเคฐเคฌเค‚เคงเคฟเคค เค•เคฐเฅ‡เค‚", - "manageRecipientsTitle": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เคพ เคชเฅเคฐเคฌเค‚เคงเคจ เค•เคฐเฅ‡เค‚", - "editSuccess": "เคธเคพเคเคพเค•เคฐเคฃ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคกเฅ‡เคŸ เคนเฅเค†", - "editError": "เคธเคพเคเคพเค•เคฐเคฃ เค…เคชเคกเฅ‡เคŸ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ" - }, - "shareDetails": { - "title": "เคธเคพเคเคพเค•เคฐเคฃ เคตเคฟเคตเคฐเคฃ", - "subtitle": "เค‡เคธ เคธเคพเคเคพเค•เคฐเคฃ เค•เฅ€ เคตเคฟเคธเฅเคคเฅƒเคค เคœเคพเคจเค•เคพเคฐเฅ€", - "basicInfo": "เคฎเฅ‚เคฒ เคœเคพเคจเค•เคพเคฐเฅ€", - "name": "เคจเคพเคฎ", - "untitled": "เคฌเคฟเคจเคพ เคถเฅ€เคฐเฅเคทเค• เค•เฅ‡", - "views": "เคฆเฅƒเคถเฅเคฏ", - "dates": "เคคเคฟเคฅเคฟเคฏเคพเค", - "created": "เคฌเคจเคพเคฏเคพ เค—เคฏเคพ", - "expires": "เคธเคฎเคพเคชเฅเคค เคนเฅ‹เคคเคพ เคนเฅˆ", - "never": "เค•เคญเฅ€ เคจเคนเฅ€เค‚", - "security": "เคธเฅเคฐเค•เฅเคทเคพ", - "passwordProtected": "เคชเคพเคธเคตเคฐเฅเคก เคฆเฅเคตเคพเคฐเคพ เคธเค‚เคฐเค•เฅเคทเคฟเคค", - "publicAccess": "เคธเคพเคฐเฅเคตเคœเคจเคฟเค• เคชเคนเฅเคเคš", - "maxViews": "เค…เคงเคฟเค•เคคเคฎ เคฆเฅƒเคถเฅเคฏ: {{count}}", - "files": "เคซเคพเค‡เคฒเฅ‡เค‚ ({{count}})", - "recipients": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ ({{count}})", - "notAvailable": "เคเคจ/เค", - "invalidDate": "เค…เคฎเคพเคจเฅเคฏ เคคเคฟเคฅเคฟ", - "loadError": "เคธเคพเคเคพเค•เคฐเคฃ เคตเคฟเคตเคฐเคฃ เคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ" - }, - "uploadFile": { - "title": "เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เค•เคฐเฅ‡เค‚", - "selectFile": "เคซเคพเค‡เคฒ เคšเฅเคจเคจเฅ‡ เค•เฅ‡ เคฒเคฟเค เค•เฅเคฒเคฟเค• เค•เคฐเฅ‡เค‚", - "preview": "เคชเฅ‚เคฐเฅเคตเคพเคตเคฒเฅ‹เค•เคจ", - "uploadProgress": "เค…เคชเคฒเฅ‹เคก เคชเฅเคฐเค—เคคเคฟ", - "upload": "เค…เคชเคฒเฅ‹เคก เค•เคฐเฅ‡เค‚", - "success": "เคซเคพเค‡เคฒ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคฒเฅ‹เคก เคนเฅเคˆ", - "error": "เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ" + "files": { + "title": "เคธเคญเฅ€ เคซเคพเค‡เคฒเฅ‡เค‚", + "uploadFile": "เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เค•เคฐเฅ‡เค‚", + "loadError": "เคซเคพเค‡เคฒเฅ‡เค‚ เคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", + "pageTitle": "เคฎเฅ‡เคฐเฅ€ เคซเคพเค‡เคฒเฅ‡เค‚", + "breadcrumb": "เคฎเฅ‡เคฐเฅ€ เคซเคพเค‡เคฒเฅ‡เค‚" }, "filesTable": { "ariaLabel": "เคซเคพเค‡เคฒ เคŸเฅ‡เคฌเคฒ", @@ -179,119 +101,10 @@ "delete": "เคนเคŸเคพเคเค‚" } }, - "sharesTable": { - "ariaLabel": "เคธเคพเคเคพเค•เคฐเคฃ เคŸเฅ‡เคฌเคฒ", - "never": "เค•เคญเฅ€ เคจเคนเฅ€เค‚", - "columns": { - "name": "เคจเคพเคฎ", - "createdAt": "เคฌเคจเคพเคฏเคพ เค—เคฏเคพ", - "expiresAt": "เคธเคฎเคพเคชเฅเคค เคนเฅ‹เคคเคพ เคนเฅˆ", - "status": "เคธเฅเคฅเคฟเคคเคฟ", - "security": "เคธเฅเคฐเค•เฅเคทเคพ", - "files": "เคซเคพเค‡เคฒเฅ‡เค‚", - "recipients": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ", - "actions": "เค•เฅเคฐเคฟเคฏเคพเคเค‚" - }, - "status": { - "neverExpires": "เค•เคญเฅ€ เคธเคฎเคพเคชเฅเคค เคจเคนเฅ€เค‚", - "active": "เคธเค•เฅเคฐเคฟเคฏ", - "expired": "เคธเคฎเคพเคชเฅเคค" - }, - "security": { - "protected": "เคธเค‚เคฐเค•เฅเคทเคฟเคค", - "public": "เคธเคพเคฐเฅเคตเคœเคจเคฟเค•" - }, - "filesCount": "{{count}} เคซเคพเค‡เคฒเฅ‡เค‚", - "recipientsCount": "{{count}} เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ", - "actions": { - "menu": "เคธเคพเคเคพเค•เคฐเคฃ เค•เฅเคฐเคฟเคฏเคพ เคฎเฅ‡เคจเฅ‚", - "edit": "เคธเค‚เคชเคพเคฆเคฟเคค เค•เคฐเฅ‡เค‚", - "manageFiles": "เคซเคพเค‡เคฒเฅ‡เค‚ เคชเฅเคฐเคฌเค‚เคงเคฟเคค เค•เคฐเฅ‡เค‚", - "manageRecipients": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เคพ เคชเฅเคฐเคฌเค‚เคงเคจ เค•เคฐเฅ‡เค‚", - "viewDetails": "เคตเคฟเคตเคฐเคฃ เคฆเฅ‡เค–เฅ‡เค‚", - "generateLink": "เคฒเคฟเค‚เค• เค‰เคคเฅเคชเคจเฅเคจ เค•เคฐเฅ‡เค‚", - "editLink": "เคฒเคฟเค‚เค• เคธเค‚เคชเคพเคฆเคฟเคค เค•เคฐเฅ‡เค‚", - "copyLink": "เคฒเคฟเค‚เค• เค•เฅ‰เคชเฅ€ เค•เคฐเฅ‡เค‚", - "notifyRecipients": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เฅ‹ เคธเฅ‚เคšเคฟเคค เค•เคฐเฅ‡เค‚", - "delete": "เคนเคŸเคพเคเค‚" - } - }, "footer": { "poweredBy": "เคฆเฅเคตเคพเคฐเคพ เคธเค‚เคšเคพเคฒเคฟเคค", "kyanHomepage": "Kyantech เคนเฅ‹เคฎเคชเฅ‡เคœ" }, - "fileManager": { - "downloadError": "เคซเคพเค‡เคฒ เคกเคพเค‰เคจเคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", - "updateSuccess": "เคซเคพเค‡เคฒ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคกเฅ‡เคŸ เคนเฅเคˆ", - "updateError": "เคซเคพเค‡เคฒ เค…เคชเคกเฅ‡เคŸ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", - "deleteSuccess": "เคซเคพเค‡เคฒ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคนเคŸเคพเคˆ เค—เคˆ", - "deleteError": "เคซเคพเค‡เคฒ เคนเคŸเคพเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ" - }, - "shareManager": { - "deleteSuccess": "เคธเคพเคเคพเค•เคฐเคฃ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคนเคŸเคพเคฏเคพ เค—เคฏเคพ", - "deleteError": "เคธเคพเคเคพเค•เคฐเคฃ เคนเคŸเคพเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", - "updateSuccess": "เคธเคพเคเคพเค•เคฐเคฃ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคกเฅ‡เคŸ เคนเฅเค†", - "updateError": "เคธเคพเคเคพเค•เคฐเคฃ เค…เคชเคกเฅ‡เคŸ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", - "filesUpdateSuccess": "เคซเคพเค‡เคฒเฅ‡เค‚ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคกเฅ‡เคŸ เคนเฅเคˆเค‚", - "filesUpdateError": "เคซเคพเค‡เคฒเฅ‡เค‚ เค…เคชเคกเฅ‡เคŸ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", - "recipientsUpdateSuccess": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคกเฅ‡เคŸ เคนเฅเค", - "recipientsUpdateError": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เค…เคชเคกเฅ‡เคŸ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", - "linkGenerateSuccess": "เคธเคพเคเคพเค•เคฐเคฃ เคฒเคฟเค‚เค• เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค‰เคคเฅเคชเคจเฅเคจ เคนเฅเค†", - "linkGenerateError": "เคธเคพเคเคพเค•เคฐเคฃ เคฒเคฟเค‚เค• เค‰เคคเฅเคชเคจเฅเคจ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", - "notifyLoading": "เคธเฅ‚เคšเคจเคพเคเค เคญเฅ‡เคœเฅ€ เคœเคพ เคฐเคนเฅ€ เคนเฅˆเค‚...", - "notifySuccess": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เฅ‹ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคธเฅ‚เคšเคฟเคค เค•เคฟเคฏเคพ เค—เคฏเคพ", - "notifyError": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เฅ‹ เคธเฅ‚เคšเคฟเคค เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ" - }, - "quickAccess": { - "files": { - "title": "เคฎเฅ‡เคฐเฅ€ เคซเคพเค‡เคฒเฅ‡เค‚", - "description": "เค…เคชเคฒเฅ‹เคก เค•เฅ€ เค—เคˆ เคซเคพเค‡เคฒเฅ‹เค‚ เคคเค• เคชเคนเฅเค‚เคš เค”เคฐ เคชเฅเคฐเคฌเค‚เคงเคจ" - }, - "shares": { - "title": "เคฎเฅ‡เคฐเฅ‡ เคธเคพเคเคพเค•เคฐเคฃ", - "description": "เคธเคพเคเคพ เค•เฅ€ เค—เคˆ เคซเคพเค‡เคฒเฅ‹เค‚ เค•เฅ‹ เคฆเฅ‡เค–เฅ‡เค‚ เค”เคฐ เคชเฅเคฐเคฌเค‚เคงเคฟเคค เค•เคฐเฅ‡เค‚" - } - }, - "recentFiles": { - "title": "เคนเคพเคฒ เค•เฅ€ เค…เคชเคฒเฅ‹เคกเฅเคธ", - "viewAll": "เคธเคญเฅ€ เคฆเฅ‡เค–เฅ‡เค‚", - "uploadFile": "เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เค•เคฐเฅ‡เค‚", - "noFiles": "เค…เคญเฅ€ เคคเค• เค•เฅ‹เคˆ เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เคจเคนเฅ€เค‚ เคนเฅเคˆ" - }, - "recentShares": { - "title": "เคนเคพเคฒ เค•เฅ‡ เคธเคพเคเคพเค•เคฐเคฃ", - "viewAll": "เคธเคญเฅ€ เคฆเฅ‡เค–เฅ‡เค‚", - "createShare": "เคธเคพเคเคพ เค•เคฐเฅ‡เค‚ เคฌเคจเคพเคเค‚", - "noShares": "เค…เคญเฅ€ เคคเค• เค•เฅ‹เคˆ เคธเคพเคเคพเค•เคฐเคฃ เคจเคนเฅ€เค‚ เคฌเคจเคพเคฏเคพ เค—เคฏเคพ", - "createFirst": "เค…เคชเคจเคพ เคชเคนเคฒเคพ เคธเคพเคเคพเค•เคฐเคฃ เคฌเคจเคพเคเค‚" - }, - "storageUsage": { - "title": "เคธเฅเคŸเฅ‹เคฐเฅ‡เคœ เค‰เคชเคฏเฅ‹เค—", - "ariaLabel": "เคธเฅเคŸเฅ‹เคฐเฅ‡เคœ เค‰เคชเคฏเฅ‹เค— เคชเฅเคฐเค—เคคเคฟ เคชเคŸเฅเคŸเฅ€", - "used": "{{size}} เค‰เคชเคฏเฅ‹เค— เค•เคฟเคฏเคพ เค—เคฏเคพ", - "available": "{{size}} เค‰เคชเคฒเคฌเฅเคง" - }, - "dashboard": { - "loadError": "เคกเฅˆเคถเคฌเฅ‹เคฐเฅเคก เคกเฅ‡เคŸเคพ เคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", - "linkCopied": "เคฒเคฟเค‚เค• เค•เฅเคฒเคฟเคชเคฌเฅ‹เคฐเฅเคก เคฎเฅ‡เค‚ เค•เฅ‰เคชเฅ€ เคนเฅเค†", - "pageTitle": "เคกเฅˆเคถเคฌเฅ‹เคฐเฅเคก", - "breadcrumb": "เคกเฅˆเคถเคฌเฅ‹เคฐเฅเคก" - }, - "emptyState": { - "noFiles": "เค…เคญเฅ€ เคคเค• เค•เฅ‹เคˆ เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เคจเคนเฅ€เค‚ เคนเฅเคˆ", - "uploadFile": "เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เค•เคฐเฅ‡เค‚" - }, - "files": { - "title": "เคธเคญเฅ€ เคซเคพเค‡เคฒเฅ‡เค‚", - "uploadFile": "เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เค•เคฐเฅ‡เค‚", - "loadError": "เคซเคพเค‡เคฒเฅ‡เค‚ เคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", - "pageTitle": "เคฎเฅ‡เคฐเฅ€ เคซเคพเค‡เคฒเฅ‡เค‚", - "breadcrumb": "เคฎเฅ‡เคฐเฅ€ เคซเคพเค‡เคฒเฅ‡เค‚" - }, - "searchBar": { - "placeholder": "เคซเคพเค‡เคฒเฅ‡เค‚ เค–เฅ‹เคœเฅ‡เค‚...", - "results": "{{total}} เคฎเฅ‡เค‚ เคธเฅ‡ {{filtered}} เคซเคพเค‡เคฒเฅ‡เค‚ เคฎเคฟเคฒเฅ€เค‚" - }, "forgotPassword": { "emailLabel": "เคˆเคฎเฅ‡เคฒ เคชเคคเคพ", "emailPlaceholder": "เค…เคชเคจเคพ เคˆเคฎเฅ‡เคฒ เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", @@ -303,6 +116,20 @@ "resetInstructions": "เคฐเฅ€เคธเฅ‡เคŸ เคจเคฟเคฐเฅเคฆเฅ‡เคถ เค†เคชเค•เฅ‡ เคˆเคฎเฅ‡เคฒ เคชเคฐ เคญเฅ‡เคœ เคฆเคฟเค เค—เค เคนเฅˆเค‚", "pageTitle": "เคชเคพเคธเคตเคฐเฅเคก เคญเฅ‚เคฒ เค—เค" }, + "generateShareLink": { + "generateTitle": "เคธเคพเคเคพเค•เคฐเคฃ เคฒเคฟเค‚เค• เค‰เคคเฅเคชเคจเฅเคจ เค•เคฐเฅ‡เค‚", + "updateTitle": "เคธเคพเคเคพเค•เคฐเคฃ เคฒเคฟเค‚เค• เค…เคชเคกเฅ‡เคŸ เค•เคฐเฅ‡เค‚", + "generateDescription": "เค…เคชเคจเฅ€ เคซเคพเค‡เคฒเฅ‡เค‚ เคธเคพเคเคพ เค•เคฐเคจเฅ‡ เค•เฅ‡ เคฒเคฟเค เคเค• เคฒเคฟเค‚เค• เค‰เคคเฅเคชเคจเฅเคจ เค•เคฐเฅ‡เค‚", + "updateDescription": "เค‡เคธ เคธเคพเคเคพเค•เคฐเคฃ เคฒเคฟเค‚เค• เค•เฅ‡ เคฒเคฟเค เค‰เคชเคจเคพเคฎ เค…เคชเคกเฅ‡เคŸ เค•เคฐเฅ‡เค‚", + "aliasPlaceholder": "เค‰เคชเคจเคพเคฎ เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", + "linkReady": "เค†เคชเค•เคพ เคธเคพเคเคพเค•เคฐเคฃ เคฒเคฟเค‚เค• เคคเฅˆเคฏเคพเคฐ เคนเฅˆ:", + "generateButton": "เคฒเคฟเค‚เค• เค‰เคคเฅเคชเคจเฅเคจ เค•เคฐเฅ‡เค‚", + "updateButton": "เคฒเคฟเค‚เค• เค…เคชเคกเฅ‡เคŸ เค•เคฐเฅ‡เค‚", + "copyButton": "เคฒเคฟเค‚เค• เค•เฅ‰เคชเฅ€ เค•เคฐเฅ‡เค‚", + "success": "เคฒเคฟเค‚เค• เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค‰เคคเฅเคชเคจเฅเคจ เคนเฅเค†", + "error": "เคฒเคฟเค‚เค• เค‰เคคเฅเคชเคจเฅเคจ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ", + "copied": "เคฒเคฟเค‚เค• เค•เฅเคฒเคฟเคชเคฌเฅ‹เคฐเฅเคก เคฎเฅ‡เค‚ เค•เฅ‰เคชเฅ€ เค•เคฟเคฏเคพ เค—เคฏเคพ" + }, "home": { "description": "WeTransfer เค•เคพ เค“เคชเคจ-เคธเฅ‹เคฐเฅเคธ เคตเคฟเค•เคฒเฅเคชเฅค เคซเคพเค‡เคฒเฅ‡เค‚ เคธเฅเคฐเค•เฅเคทเคฟเคค เคฐเฅ‚เคช เคธเฅ‡ เคธเคพเคเคพ เค•เคฐเฅ‡เค‚, เคฌเคฟเคจเคพ เคŸเฅเคฐเฅˆเค•เคฟเค‚เค— เคฏเคพ เคธเฅ€เคฎเคพเค“เค‚ เค•เฅ‡เฅค", "documentation": "เคฆเคธเฅเคคเคพเคตเฅ‡เคœ", @@ -314,6 +141,46 @@ }, "pageTitle": "เคนเฅ‹เคฎ" }, + "login": { + "welcome": "เคธเฅเคตเคพเค—เคค เคนเฅˆ เคฎเฅ‡เค‚", + "signInToContinue": "เคœเคพเคฐเฅ€ เคฐเค–เคจเฅ‡ เค•เฅ‡ เคฒเคฟเค เคธเคพเค‡เคจ เค‡เคจ เค•เคฐเฅ‡เค‚", + "emailLabel": "เคˆเคฎเฅ‡เคฒ เคชเคคเคพ", + "emailPlaceholder": "เค…เคชเคจเคพ เคˆเคฎเฅ‡เคฒ เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", + "passwordLabel": "เคชเคพเคธเคตเคฐเฅเคก", + "passwordPlaceholder": "เค…เคชเคจเคพ เคชเคพเคธเคตเคฐเฅเคก เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", + "signIn": "เคธเคพเค‡เคจ เค‡เคจ เค•เคฐเฅ‡เค‚", + "signingIn": "เคธเคพเค‡เคจ เค‡เคจ เคนเฅ‹ เคฐเคนเคพ เคนเฅˆ...", + "forgotPassword": "เคชเคพเคธเคตเคฐเฅเคก เคญเฅ‚เคฒ เค—เค?", + "pageTitle": "เคฒเฅ‰เค—เคฟเคจ" + }, + "logo": { + "labels": { + "appLogo": "เคเคชเฅเคฒเคฟเค•เฅ‡เคถเคจ เคฒเฅ‹เค—เฅ‹" + }, + "buttons": { + "upload": "เคฒเฅ‹เค—เฅ‹ เค…เคชเคฒเฅ‹เคก เค•เคฐเฅ‡เค‚", + "remove": "เคฒเฅ‹เค—เฅ‹ เคนเคŸเคพเคเค‚" + }, + "messages": { + "uploadSuccess": "เคฒเฅ‹เค—เฅ‹ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคฒเฅ‹เคก เคนเฅเค†", + "removeSuccess": "เคฒเฅ‹เค—เฅ‹ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคนเคŸเคพเคฏเคพ เค—เคฏเคพ" + }, + "errors": { + "uploadFailed": "เคฒเฅ‹เค—เฅ‹ เค…เคชเคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ", + "removeFailed": "เคฒเฅ‹เค—เฅ‹ เคนเคŸเคพเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ" + } + }, + "navbar": { + "logoAlt": "เคเคชเฅเคฒเคฟเค•เฅ‡เคถเคจ เคฒเฅ‹เค—เฅ‹", + "profileMenu": "เคชเฅเคฐเฅ‹เคซเคผเคพเค‡เคฒ เคฎเฅ‡เคจเฅเคฏเฅ‚", + "profile": "เคชเฅเคฐเฅ‹เคซเคผเคพเค‡เคฒ", + "settings": "เคธเฅ‡เคŸเคฟเค‚เค—เฅเคธ", + "usersManagement": "เค‰เคชเคฏเฅ‹เค—เค•เคฐเฅเคคเคพ เคชเฅเคฐเคฌเค‚เคงเคจ", + "logout": "เคฒเฅ‰เค— เค†เค‰เคŸ" + }, + "navigation": { + "dashboard": "เคกเฅˆเคถเคฌเฅ‹เคฐเฅเคก" + }, "profile": { "password": { "title": "เคชเคพเคธเคตเคฐเฅเคก เคฌเคฆเคฒเฅ‡เค‚", @@ -356,6 +223,43 @@ }, "pageTitle": "เคชเฅเคฐเฅ‹เคซเคผเคพเค‡เคฒ" }, + "quickAccess": { + "files": { + "title": "เคฎเฅ‡เคฐเฅ€ เคซเคพเค‡เคฒเฅ‡เค‚", + "description": "เค…เคชเคฒเฅ‹เคก เค•เฅ€ เค—เคˆ เคซเคพเค‡เคฒเฅ‹เค‚ เคคเค• เคชเคนเฅเค‚เคš เค”เคฐ เคชเฅเคฐเคฌเค‚เคงเคจ" + }, + "shares": { + "title": "เคฎเฅ‡เคฐเฅ‡ เคธเคพเคเคพเค•เคฐเคฃ", + "description": "เคธเคพเคเคพ เค•เฅ€ เค—เคˆ เคซเคพเค‡เคฒเฅ‹เค‚ เค•เฅ‹ เคฆเฅ‡เค–เฅ‡เค‚ เค”เคฐ เคชเฅเคฐเคฌเค‚เคงเคฟเคค เค•เคฐเฅ‡เค‚" + } + }, + "recentFiles": { + "title": "เคนเคพเคฒ เค•เฅ€ เค…เคชเคฒเฅ‹เคกเฅเคธ", + "viewAll": "เคธเคญเฅ€ เคฆเฅ‡เค–เฅ‡เค‚", + "uploadFile": "เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เค•เคฐเฅ‡เค‚", + "noFiles": "เค…เคญเฅ€ เคคเค• เค•เฅ‹เคˆ เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เคจเคนเฅ€เค‚ เคนเฅเคˆ" + }, + "recentShares": { + "title": "เคนเคพเคฒ เค•เฅ‡ เคธเคพเคเคพเค•เคฐเคฃ", + "viewAll": "เคธเคญเฅ€ เคฆเฅ‡เค–เฅ‡เค‚", + "createShare": "เคธเคพเคเคพ เค•เคฐเฅ‡เค‚ เคฌเคจเคพเคเค‚", + "noShares": "เค…เคญเฅ€ เคคเค• เค•เฅ‹เคˆ เคธเคพเคเคพเค•เคฐเคฃ เคจเคนเฅ€เค‚ เคฌเคจเคพเคฏเคพ เค—เคฏเคพ", + "createFirst": "เค…เคชเคจเคพ เคชเคนเคฒเคพ เคธเคพเคเคพเค•เคฐเคฃ เคฌเคจเคพเคเค‚" + }, + "recipientSelector": { + "emailPlaceholder": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เค•เคพ เคˆเคฎเฅ‡เคฒ เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", + "add": "เคœเฅ‹เคกเคผเฅ‡เค‚", + "recipients": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ ({{count}})", + "notifyAll": "เคธเคญเฅ€ เค•เฅ‹ เคธเฅ‚เคšเคฟเคค เค•เคฐเฅ‡เค‚", + "noRecipients": "เค…เคญเฅ€ เคคเค• เค•เฅ‹เคˆ เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เคจเคนเฅ€เค‚ เคœเฅ‹เคกเคผเคพ เค—เคฏเคพ", + "addSuccess": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคœเฅ‹เคกเคผเคพ เค—เคฏเคพ", + "addError": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เคœเฅ‹เคกเคผเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ", + "removeSuccess": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคนเคŸเคพเคฏเคพ เค—เคฏเคพ", + "removeError": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เคนเคŸเคพเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ", + "sendingNotifications": "เคธเฅ‚เคšเคจเคพเคเค เคญเฅ‡เคœเฅ€ เคœเคพ เคฐเคนเฅ€ เคนเฅˆเค‚...", + "notifySuccess": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เฅ‹ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคธเฅ‚เคšเคฟเคค เค•เคฟเคฏเคพ เค—เคฏเคพ", + "notifyError": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เฅ‹ เคธเฅ‚เคšเคฟเคค เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ" + }, "resetPassword": { "pageTitle": "เคชเคพเคธเคตเคฐเฅเคก เคฐเฅ€เคธเฅ‡เคŸ เค•เคฐเฅ‡เค‚", "header": { @@ -379,6 +283,10 @@ "invalidToken": "เค…เคฎเคพเคจเฅเคฏ เคฏเคพ เค—เคพเคฏเคฌ เคฐเฅ€เคธเฅ‡เคŸ เคŸเฅ‹เค•เคจ" } }, + "searchBar": { + "placeholder": "เคซเคพเค‡เคฒเฅ‡เค‚ เค–เฅ‹เคœเฅ‡เค‚...", + "results": "{{total}} เคฎเฅ‡เค‚ เคธเฅ‡ {{filtered}} เคซเคพเค‡เคฒเฅ‡เค‚ เคฎเคฟเคฒเฅ€เค‚" + }, "settings": { "groups": { "defaultDescription": "เค•เฅ‰เคจเฅเคซเคผเคฟเค—เคฐเฅ‡เคถเคจ เคตเคฟเค•เคฒเฅเคช", @@ -513,6 +421,61 @@ }, "pageTitle": "เคธเคพเคเคพเค•เคฐเคฃ" }, + "shareActions": { + "deleteTitle": "เคธเคพเคเคพเค•เคฐเคฃ เคนเคŸเคพเคเค‚", + "deleteConfirmation": "เค•เฅเคฏเคพ เค†เคช เคตเคพเค•เคˆ เค‡เคธ เคธเคพเคเคพเค•เคฐเคฃ เค•เฅ‹ เคนเคŸเคพเคจเคพ เคšเคพเคนเคคเฅ‡ เคนเฅˆเค‚? เคฏเคน เค•เฅเคฐเคฟเคฏเคพ เค…เคชเคฐเคฟเคตเคฐเฅเคคเคจเฅ€เคฏ เคนเฅˆเฅค", + "editTitle": "เคธเคพเคเคพเค•เคฐเคฃ เคธเค‚เคชเคพเคฆเคฟเคค เค•เคฐเฅ‡เค‚", + "nameLabel": "เคธเคพเคเคพเค•เคฐเคฃ เค•เคพ เคจเคพเคฎ", + "expirationLabel": "เคธเคฎเคพเคชเฅเคคเคฟ เคคเคฟเคฅเคฟ", + "expirationPlaceholder": "MM/DD/YYYY HH:MM", + "maxViewsLabel": "เค…เคงเคฟเค•เคคเคฎ เคฆเฅƒเคถเฅเคฏ", + "maxViewsPlaceholder": "เค…เคจเคฒเคฟเคฎเคฟเคŸเฅ‡เคก เค•เฅ‡ เคฒเคฟเค เค–เคพเคฒเฅ€ เค›เฅ‹เคกเคผเฅ‡เค‚", + "passwordProtection": "เคชเคพเคธเคตเคฐเฅเคก เคธเฅเคฐเค•เฅเคทเคพ", + "passwordLabel": "เคชเคพเคธเคตเคฐเฅเคก", + "passwordPlaceholder": "เคชเคพเคธเคตเคฐเฅเคก เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", + "newPasswordLabel": "เคจเคฏเคพ เคชเคพเคธเคตเคฐเฅเคก (เคตเคฐเฅเคคเคฎเคพเคจ เคฐเค–เคจเฅ‡ เค•เฅ‡ เคฒเคฟเค เค–เคพเคฒเฅ€ เค›เฅ‹เคกเคผเฅ‡เค‚)", + "newPasswordPlaceholder": "เคจเคฏเคพ เคชเคพเคธเคตเคฐเฅเคก เคฆเคฐเฅเคœ เค•เคฐเฅ‡เค‚", + "manageFilesTitle": "เคซเคพเค‡เคฒเฅ‡เค‚ เคชเฅเคฐเคฌเค‚เคงเคฟเคค เค•เคฐเฅ‡เค‚", + "manageRecipientsTitle": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เคพ เคชเฅเคฐเคฌเค‚เคงเคจ เค•เคฐเฅ‡เค‚", + "editSuccess": "เคธเคพเคเคพเค•เคฐเคฃ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคกเฅ‡เคŸ เคนเฅเค†", + "editError": "เคธเคพเคเคพเค•เคฐเคฃ เค…เคชเคกเฅ‡เคŸ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ" + }, + "shareDetails": { + "title": "เคธเคพเคเคพเค•เคฐเคฃ เคตเคฟเคตเคฐเคฃ", + "subtitle": "เค‡เคธ เคธเคพเคเคพเค•เคฐเคฃ เค•เฅ€ เคตเคฟเคธเฅเคคเฅƒเคค เคœเคพเคจเค•เคพเคฐเฅ€", + "basicInfo": "เคฎเฅ‚เคฒ เคœเคพเคจเค•เคพเคฐเฅ€", + "name": "เคจเคพเคฎ", + "untitled": "เคฌเคฟเคจเคพ เคถเฅ€เคฐเฅเคทเค• เค•เฅ‡", + "views": "เคฆเฅƒเคถเฅเคฏ", + "dates": "เคคเคฟเคฅเคฟเคฏเคพเค", + "created": "เคฌเคจเคพเคฏเคพ เค—เคฏเคพ", + "expires": "เคธเคฎเคพเคชเฅเคค เคนเฅ‹เคคเคพ เคนเฅˆ", + "never": "เค•เคญเฅ€ เคจเคนเฅ€เค‚", + "security": "เคธเฅเคฐเค•เฅเคทเคพ", + "passwordProtected": "เคชเคพเคธเคตเคฐเฅเคก เคฆเฅเคตเคพเคฐเคพ เคธเค‚เคฐเค•เฅเคทเคฟเคค", + "publicAccess": "เคธเคพเคฐเฅเคตเคœเคจเคฟเค• เคชเคนเฅเคเคš", + "maxViews": "เค…เคงเคฟเค•เคคเคฎ เคฆเฅƒเคถเฅเคฏ:", + "files": "เคซเคพเค‡เคฒเฅ‡เค‚", + "recipients": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ", + "notAvailable": "เคเคจ/เค", + "invalidDate": "เค…เคฎเคพเคจเฅเคฏ เคคเคฟเคฅเคฟ", + "loadError": "เคธเคพเคเคพเค•เคฐเคฃ เคตเคฟเคตเคฐเคฃ เคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ" + }, + "shareManager": { + "deleteSuccess": "เคธเคพเคเคพเค•เคฐเคฃ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคนเคŸเคพเคฏเคพ เค—เคฏเคพ", + "deleteError": "เคธเคพเคเคพเค•เคฐเคฃ เคนเคŸเคพเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", + "updateSuccess": "เคธเคพเคเคพเค•เคฐเคฃ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคกเฅ‡เคŸ เคนเฅเค†", + "updateError": "เคธเคพเคเคพเค•เคฐเคฃ เค…เคชเคกเฅ‡เคŸ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", + "filesUpdateSuccess": "เคซเคพเค‡เคฒเฅ‡เค‚ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคกเฅ‡เคŸ เคนเฅเคˆเค‚", + "filesUpdateError": "เคซเคพเค‡เคฒเฅ‡เค‚ เค…เคชเคกเฅ‡เคŸ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", + "recipientsUpdateSuccess": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคกเฅ‡เคŸ เคนเฅเค", + "recipientsUpdateError": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ เค…เคชเคกเฅ‡เคŸ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", + "linkGenerateSuccess": "เคธเคพเคเคพเค•เคฐเคฃ เคฒเคฟเค‚เค• เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค‰เคคเฅเคชเคจเฅเคจ เคนเฅเค†", + "linkGenerateError": "เคธเคพเคเคพเค•เคฐเคฃ เคฒเคฟเค‚เค• เค‰เคคเฅเคชเคจเฅเคจ เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ", + "notifyLoading": "เคธเฅ‚เคšเคจเคพเคเค เคญเฅ‡เคœเฅ€ เคœเคพ เคฐเคนเฅ€ เคนเฅˆเค‚...", + "notifySuccess": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เฅ‹ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคธเฅ‚เคšเคฟเคค เค•เคฟเคฏเคพ เค—เคฏเคพ", + "notifyError": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เฅ‹ เคธเฅ‚เคšเคฟเคค เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคคเฅเคฐเฅเคŸเคฟ" + }, "shares": { "errors": { "loadFailed": "เคธเคพเคเคพเค•เคฐเคฃ เคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ", @@ -539,6 +502,64 @@ }, "pageTitle": "เคธเคพเคเคพเค•เคฐเคฃ" }, + "sharesTable": { + "ariaLabel": "เคธเคพเคเคพเค•เคฐเคฃ เคŸเฅ‡เคฌเคฒ", + "never": "เค•เคญเฅ€ เคจเคนเฅ€เค‚", + "columns": { + "name": "เคจเคพเคฎ", + "createdAt": "เคฌเคจเคพเคฏเคพ เค—เคฏเคพ", + "expiresAt": "เคธเคฎเคพเคชเฅเคค เคนเฅ‹เคคเคพ เคนเฅˆ", + "status": "เคธเฅเคฅเคฟเคคเคฟ", + "security": "เคธเฅเคฐเค•เฅเคทเคพ", + "files": "เคซเคพเค‡เคฒเฅ‡เค‚", + "recipients": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ", + "actions": "เค•เฅเคฐเคฟเคฏเคพเคเค‚" + }, + "status": { + "neverExpires": "เค•เคญเฅ€ เคธเคฎเคพเคชเฅเคค เคจเคนเฅ€เค‚", + "active": "เคธเค•เฅเคฐเคฟเคฏ", + "expired": "เคธเคฎเคพเคชเฅเคค" + }, + "security": { + "protected": "เคธเค‚เคฐเค•เฅเคทเคฟเคค", + "public": "เคธเคพเคฐเฅเคตเคœเคจเคฟเค•" + }, + "filesCount": "เคซเคพเค‡เคฒเฅ‡เค‚", + "recipientsCount": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพ", + "actions": { + "menu": "เคธเคพเคเคพเค•เคฐเคฃ เค•เฅเคฐเคฟเคฏเคพ เคฎเฅ‡เคจเฅ‚", + "edit": "เคธเค‚เคชเคพเคฆเคฟเคค เค•เคฐเฅ‡เค‚", + "manageFiles": "เคซเคพเค‡เคฒเฅ‡เค‚ เคชเฅเคฐเคฌเค‚เคงเคฟเคค เค•เคฐเฅ‡เค‚", + "manageRecipients": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เคพ เคชเฅเคฐเคฌเค‚เคงเคจ เค•เคฐเฅ‡เค‚", + "viewDetails": "เคตเคฟเคตเคฐเคฃ เคฆเฅ‡เค–เฅ‡เค‚", + "generateLink": "เคฒเคฟเค‚เค• เค‰เคคเฅเคชเคจเฅเคจ เค•เคฐเฅ‡เค‚", + "editLink": "เคฒเคฟเค‚เค• เคธเค‚เคชเคพเคฆเคฟเคค เค•เคฐเฅ‡เค‚", + "copyLink": "เคฒเคฟเค‚เค• เค•เฅ‰เคชเฅ€ เค•เคฐเฅ‡เค‚", + "notifyRecipients": "เคชเฅเคฐเคพเคชเฅเคคเค•เคฐเฅเคคเคพเค“เค‚ เค•เฅ‹ เคธเฅ‚เคšเคฟเคค เค•เคฐเฅ‡เค‚", + "delete": "เคนเคŸเคพเคเค‚" + } + }, + "storageUsage": { + "title": "เคธเฅเคŸเฅ‹เคฐเฅ‡เคœ เค‰เคชเคฏเฅ‹เค—", + "ariaLabel": "เคธเฅเคŸเฅ‹เคฐเฅ‡เคœ เค‰เคชเคฏเฅ‹เค— เคชเฅเคฐเค—เคคเคฟ เคชเคŸเฅเคŸเฅ€", + "used": "เค‰เคชเคฏเฅ‹เค— เค•เคฟเคฏเคพ เค—เคฏเคพ", + "available": "เค‰เคชเคฒเคฌเฅเคง" + }, + "theme": { + "toggle": "เคฅเฅ€เคฎ เคŸเฅ‰เค—เคฒ เค•เคฐเฅ‡เค‚", + "light": "เคฒเคพเค‡เคŸ", + "dark": "เคกเคพเคฐเฅเค•", + "system": "เคธเคฟเคธเฅเคŸเคฎ" + }, + "uploadFile": { + "title": "เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เค•เคฐเฅ‡เค‚", + "selectFile": "เคซเคพเค‡เคฒ เคšเฅเคจเคจเฅ‡ เค•เฅ‡ เคฒเคฟเค เค•เฅเคฒเคฟเค• เค•เคฐเฅ‡เค‚", + "preview": "เคชเฅ‚เคฐเฅเคตเคพเคตเคฒเฅ‹เค•เคจ", + "uploadProgress": "เค…เคชเคฒเฅ‹เคก เคชเฅเคฐเค—เคคเคฟ", + "upload": "เค…เคชเคฒเฅ‹เคก เค•เคฐเฅ‡เค‚", + "success": "เคซเคพเค‡เคฒ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคฒเฅ‹เคก เคนเฅเคˆ", + "error": "เคซเคพเค‡เคฒ เค…เคชเคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ" + }, "users": { "modes": { "create": "เคฌเคจเคพเคเค‚", @@ -608,29 +629,16 @@ "userr": "เค‰เคชเคฏเฅ‹เค—เค•เคฐเฅเคคเคพ" } }, - "logo": { - "labels": { - "appLogo": "เคเคชเฅเคฒเคฟเค•เฅ‡เคถเคจ เคฒเฅ‹เค—เฅ‹" - }, - "buttons": { - "upload": "เคฒเฅ‹เค—เฅ‹ เค…เคชเคฒเฅ‹เคก เค•เคฐเฅ‡เค‚", - "remove": "เคฒเฅ‹เค—เฅ‹ เคนเคŸเคพเคเค‚" - }, - "messages": { - "uploadSuccess": "เคฒเฅ‹เค—เฅ‹ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เค…เคชเคฒเฅ‹เคก เคนเฅเค†", - "removeSuccess": "เคฒเฅ‹เค—เฅ‹ เคธเคซเคฒเคคเคพเคชเฅ‚เคฐเฅเคตเค• เคนเคŸเคพเคฏเคพ เค—เคฏเคพ" - }, - "errors": { - "uploadFailed": "เคฒเฅ‹เค—เฅ‹ เค…เคชเคฒเฅ‹เคก เค•เคฐเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ", - "removeFailed": "เคฒเฅ‹เค—เฅ‹ เคนเคŸเคพเคจเฅ‡ เคฎเฅ‡เค‚ เคตเคฟเคซเคฒ" - } - }, - "navbar": { - "logoAlt": "เคเคชเฅเคฒเคฟเค•เฅ‡เคถเคจ เคฒเฅ‹เค—เฅ‹", - "profileMenu": "เคชเฅเคฐเฅ‹เคซเคผเคพเค‡เคฒ เคฎเฅ‡เคจเฅเคฏเฅ‚", - "profile": "เคชเฅเคฐเฅ‹เคซเคผเคพเค‡เคฒ", - "settings": "เคธเฅ‡เคŸเคฟเค‚เค—เฅเคธ", - "usersManagement": "เค‰เคชเคฏเฅ‹เค—เค•เคฐเฅเคคเคพ เคชเฅเคฐเคฌเค‚เคงเคจ", - "logout": "เคฒเฅ‰เค— เค†เค‰เคŸ" + "validation": { + "invalidEmail": "เค…เคฎเคพเคจเฅเคฏ เคˆเคฎเฅ‡เคฒ เคชเคคเคพ", + "passwordMinLength": "เคชเคพเคธเคตเคฐเฅเคก เค•เคฎ เคธเฅ‡ เค•เคฎ 6 เค…เค•เฅเคทเคฐ เค•เคพ เคนเฅ‹เคจเคพ เคšเคพเคนเคฟเค", + "firstNameRequired": "เคชเคนเคฒเคพ เคจเคพเคฎ เค†เคตเคถเฅเคฏเค• เคนเฅˆ", + "lastNameRequired": "เค…เค‚เคคเคฟเคฎ เคจเคพเคฎ เค†เคตเคถเฅเคฏเค• เคนเฅˆ", + "usernameLength": "เค‰เคชเคฏเฅ‹เค—เค•เคฐเฅเคคเคพ เคจเคพเคฎ เค•เคฎ เคธเฅ‡ เค•เคฎ 3 เค…เค•เฅเคทเคฐ เค•เคพ เคนเฅ‹เคจเคพ เคšเคพเคนเคฟเค", + "usernameSpaces": "เค‰เคชเคฏเฅ‹เค—เค•เคฐเฅเคคเคพ เคจเคพเคฎ เคฎเฅ‡เค‚ เคฐเคฟเค•เฅเคค เคธเฅเคฅเคพเคจ เคจเคนเฅ€เค‚ เคนเฅ‹ เคธเค•เคคเฅ‡", + "passwordLength": "เคชเคพเคธเคตเคฐเฅเคก เค•เคฎ เคธเฅ‡ เค•เคฎ 8 เค…เค•เฅเคทเคฐ เค•เคพ เคนเฅ‹เคจเคพ เคšเคพเคนเคฟเค", + "passwordsMatch": "เคชเคพเคธเคตเคฐเฅเคก เคฎเฅ‡เคฒ เคจเคนเฅ€เค‚ เค–เคพเคคเฅ‡", + "emailRequired": "เคˆเคฎเฅ‡เคฒ เค†เคตเคถเฅเคฏเค• เคนเฅˆ", + "passwordRequired": "เคชเคพเคธเคตเคฐเฅเคก เค†เคตเคถเฅเคฏเค• เคนเฅˆ" } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/ja-JP.json b/apps/web/messages/ja-JP.json similarity index 97% rename from apps/web/src/locales/ja-JP.json rename to apps/web/messages/ja-JP.json index ef02730..9478551 100644 --- a/apps/web/src/locales/ja-JP.json +++ b/apps/web/messages/ja-JP.json @@ -1,58 +1,4 @@ { - "login": { - "welcome": "ใ‚ˆใ†ใ“ใ", - "signInToContinue": "็ถš่กŒใ™ใ‚‹ใซใฏใ‚ตใ‚คใƒณใ‚คใƒณใ—ใฆใใ ใ•ใ„", - "emailLabel": "ใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚น", - "emailPlaceholder": "ใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚นใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", - "passwordLabel": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰", - "passwordPlaceholder": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", - "signIn": "ใ‚ตใ‚คใƒณใ‚คใƒณ", - "signingIn": "ใ‚ตใ‚คใƒณใ‚คใƒณไธญ...", - "forgotPassword": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ใŠๅฟ˜ใ‚Œใงใ™ใ‹๏ผŸ", - "pageTitle": "ใƒญใ‚ฐใ‚คใƒณ" - }, - "errors": { - "invalidCredentials": "็„กๅŠนใชใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚นใพใŸใฏใƒ‘ใ‚นใƒฏใƒผใƒ‰ใงใ™", - "userNotFound": "ใƒฆใƒผใ‚ถใƒผใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“", - "accountLocked": "ใ‚ขใ‚ซใ‚ฆใƒณใƒˆใŒใƒญใƒƒใ‚ฏใ•ใ‚Œใฆใ„ใพใ™ใ€‚ๅพŒใงใ‚‚ใ†ไธ€ๅบฆใŠ่ฉฆใ—ใใ ใ•ใ„", - "unexpectedError": "ไบˆๆœŸใ—ใชใ„ใ‚จใƒฉใƒผใŒ็™บ็”Ÿใ—ใพใ—ใŸใ€‚ใ‚‚ใ†ไธ€ๅบฆใŠ่ฉฆใ—ใใ ใ•ใ„" - }, - "validation": { - "invalidEmail": "็„กๅŠนใชใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚นใงใ™", - "passwordMinLength": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใฏๆœ€ไฝŽ6ๆ–‡ๅญ—ๅฟ…่ฆใงใ™", - "firstNameRequired": "ๅใฏๅฟ…้ ˆใงใ™", - "lastNameRequired": "ๅง“ใฏๅฟ…้ ˆใงใ™", - "usernameLength": "ใƒฆใƒผใ‚ถใƒผๅใฏๆœ€ไฝŽ3ๆ–‡ๅญ—ๅฟ…่ฆใงใ™", - "usernameSpaces": "ใƒฆใƒผใ‚ถใƒผๅใซใ‚นใƒšใƒผใ‚นใฏไฝฟ็”จใงใใพใ›ใ‚“", - "passwordLength": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใฏๆœ€ไฝŽ8ๆ–‡ๅญ—ๅฟ…่ฆใงใ™", - "passwordsMatch": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใŒไธ€่‡ดใ—ใพใ›ใ‚“" - }, - "fileSelector": { - "availableFiles": "ๅˆฉ็”จๅฏ่ƒฝใชใƒ•ใ‚กใ‚คใƒซ ({{count}})", - "shareFiles": "ใƒ•ใ‚กใ‚คใƒซใ‚’ๅ…ฑๆœ‰ ({{count}})", - "searchPlaceholder": "ใƒ•ใ‚กใ‚คใƒซใ‚’ๆคœ็ดข...", - "noMatchingFiles": "ไธ€่‡ดใ™ใ‚‹ใƒ•ใ‚กใ‚คใƒซใŒใ‚ใ‚Šใพใ›ใ‚“", - "noAvailableFiles": "ๅˆฉ็”จๅฏ่ƒฝใชใƒ•ใ‚กใ‚คใƒซใŒใ‚ใ‚Šใพใ›ใ‚“", - "noFilesInShare": "ๅ…ฑๆœ‰ใƒ•ใ‚กใ‚คใƒซใŒใ‚ใ‚Šใพใ›ใ‚“", - "saveChanges": "ๅค‰ๆ›ดใ‚’ไฟๅญ˜" - }, - "recipientSelector": { - "emailPlaceholder": "ๅ—ไฟก่€…ใฎใƒกใƒผใƒซใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", - "add": "่ฟฝๅŠ ", - "recipients": "ๅ—ไฟก่€… ({{count}})", - "notifyAll": "ๅ…จๅ“กใซ้€š็Ÿฅ", - "noRecipients": "ใพใ ๅ—ไฟก่€…ใŒ่ฟฝๅŠ ใ•ใ‚Œใฆใ„ใพใ›ใ‚“", - "addSuccess": "ๅ—ไฟก่€…ใŒๆญฃๅธธใซ่ฟฝๅŠ ใ•ใ‚Œใพใ—ใŸ", - "addError": "ๅ—ไฟก่€…ใฎ่ฟฝๅŠ ใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "removeSuccess": "ๅ—ไฟก่€…ใŒๆญฃๅธธใซๅ‰Š้™คใ•ใ‚Œใพใ—ใŸ", - "removeError": "ๅ—ไฟก่€…ใฎๅ‰Š้™คใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "sendingNotifications": "้€š็Ÿฅใ‚’้€ไฟกไธญ...", - "notifySuccess": "ๅ—ไฟก่€…ใซๆญฃๅธธใซ้€š็Ÿฅใ—ใพใ—ใŸ", - "notifyError": "ๅ—ไฟก่€…ใธใฎ้€š็Ÿฅใซๅคฑๆ•—ใ—ใพใ—ใŸ" - }, - "navigation": { - "dashboard": "ใƒ€ใƒƒใ‚ทใƒฅใƒœใƒผใƒ‰" - }, "common": { "loading": "่ชญใฟ่พผใฟไธญใงใ™ใ€‚ใ—ใฐใ‚‰ใใŠๅพ…ใกใใ ใ•ใ„...", "cancel": "ใ‚ญใƒฃใƒณใ‚ปใƒซ", @@ -78,6 +24,22 @@ "success": "ๅ…ฑๆœ‰ใŒๆญฃๅธธใซไฝœๆˆใ•ใ‚Œใพใ—ใŸ", "error": "ๅ…ฑๆœ‰ใฎไฝœๆˆใซๅคฑๆ•—ใ—ใพใ—ใŸ" }, + "dashboard": { + "loadError": "ใƒ€ใƒƒใ‚ทใƒฅใƒœใƒผใƒ‰ใƒ‡ใƒผใ‚ฟใฎ่ชญใฟ่พผใฟใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "linkCopied": "ใƒชใƒณใ‚ฏใŒใ‚ฏใƒชใƒƒใƒ—ใƒœใƒผใƒ‰ใซใ‚ณใƒ”ใƒผใ•ใ‚Œใพใ—ใŸ", + "pageTitle": "ใƒ€ใƒƒใ‚ทใƒฅใƒœใƒผใƒ‰", + "breadcrumb": "ใƒ€ใƒƒใ‚ทใƒฅใƒœใƒผใƒ‰" + }, + "emptyState": { + "noFiles": "ใพใ ใƒ•ใ‚กใ‚คใƒซใŒใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ•ใ‚Œใฆใ„ใพใ›ใ‚“", + "uploadFile": "ใƒ•ใ‚กใ‚คใƒซใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰" + }, + "errors": { + "invalidCredentials": "็„กๅŠนใชใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚นใพใŸใฏใƒ‘ใ‚นใƒฏใƒผใƒ‰ใงใ™", + "userNotFound": "ใƒฆใƒผใ‚ถใƒผใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“", + "accountLocked": "ใ‚ขใ‚ซใ‚ฆใƒณใƒˆใŒใƒญใƒƒใ‚ฏใ•ใ‚Œใฆใ„ใพใ™ใ€‚ๅพŒใงใ‚‚ใ†ไธ€ๅบฆใŠ่ฉฆใ—ใใ ใ•ใ„", + "unexpectedError": "ไบˆๆœŸใ—ใชใ„ใ‚จใƒฉใƒผใŒ็™บ็”Ÿใ—ใพใ—ใŸใ€‚ใ‚‚ใ†ไธ€ๅบฆใŠ่ฉฆใ—ใใ ใ•ใ„" + }, "fileActions": { "editFile": "ใƒ•ใ‚กใ‚คใƒซใ‚’็ทจ้›†", "nameLabel": "ๅๅ‰", @@ -86,9 +48,16 @@ "descriptionLabel": "่ชฌๆ˜Ž", "descriptionPlaceholder": "ใƒ•ใ‚กใ‚คใƒซใฎ่ชฌๆ˜Žใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", "deleteFile": "ใƒ•ใ‚กใ‚คใƒซใ‚’ๅ‰Š้™ค", - "deleteConfirmation": "\"{{fileName}}\"ใ‚’ๅ‰Š้™คใ—ใฆใ‚‚ใ‚ˆใ‚ใ—ใ„ใงใ™ใ‹๏ผŸ", + "deleteConfirmation": "ใ‚’ๅ‰Š้™คใ—ใฆใ‚‚ใ‚ˆใ‚ใ—ใ„ใงใ™ใ‹๏ผŸ", "deleteWarning": "ใ“ใฎๆ“ไฝœใฏๅ…ƒใซๆˆปใ›ใพใ›ใ‚“ใ€‚" }, + "fileManager": { + "downloadError": "ใƒ•ใ‚กใ‚คใƒซใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "updateSuccess": "ใƒ•ใ‚กใ‚คใƒซใŒๆญฃๅธธใซๆ›ดๆ–ฐใ•ใ‚Œใพใ—ใŸ", + "updateError": "ใƒ•ใ‚กใ‚คใƒซใฎๆ›ดๆ–ฐใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "deleteSuccess": "ใƒ•ใ‚กใ‚คใƒซใŒๆญฃๅธธใซๅ‰Š้™คใ•ใ‚Œใพใ—ใŸ", + "deleteError": "ใƒ•ใ‚กใ‚คใƒซใฎๅ‰Š้™คใซๅคฑๆ•—ใ—ใพใ—ใŸ" + }, "filePreview": { "loading": "ใƒ—ใƒฌใƒ“ใƒฅใƒผใ‚’่ชญใฟ่พผใฟไธญ...", "notAvailable": "ใƒ—ใƒฌใƒ“ใƒฅใƒผใฏๅˆฉ็”จใงใใพใ›ใ‚“", @@ -98,68 +67,21 @@ "loadError": "ใƒ—ใƒฌใƒ“ใƒฅใƒผใฎ่ชญใฟ่พผใฟใซๅคฑๆ•—ใ—ใพใ—ใŸ", "downloadError": "ใƒ•ใ‚กใ‚คใƒซใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใซๅคฑๆ•—ใ—ใพใ—ใŸ" }, - "generateShareLink": { - "generateTitle": "ๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใ‚’็”Ÿๆˆ", - "updateTitle": "ๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใ‚’ๆ›ดๆ–ฐ", - "generateDescription": "ใƒ•ใ‚กใ‚คใƒซใ‚’ๅ…ฑๆœ‰ใ™ใ‚‹ใŸใ‚ใฎใƒชใƒณใ‚ฏใ‚’็”Ÿๆˆใ—ใพใ™", - "updateDescription": "ใ“ใฎๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใฎใ‚จใ‚คใƒชใ‚ขใ‚นใ‚’ๆ›ดๆ–ฐใ—ใพใ™", - "aliasPlaceholder": "ใ‚จใ‚คใƒชใ‚ขใ‚นใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", - "linkReady": "ๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใฎๆบ–ๅ‚™ใŒใงใใพใ—ใŸ:", - "generateButton": "ใƒชใƒณใ‚ฏใ‚’็”Ÿๆˆ", - "updateButton": "ใƒชใƒณใ‚ฏใ‚’ๆ›ดๆ–ฐ", - "copyButton": "ใƒชใƒณใ‚ฏใ‚’ใ‚ณใƒ”ใƒผ", - "success": "ใƒชใƒณใ‚ฏใŒๆญฃๅธธใซ็”Ÿๆˆใ•ใ‚Œใพใ—ใŸ", - "error": "ใƒชใƒณใ‚ฏใฎ็”Ÿๆˆใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "copied": "ใƒชใƒณใ‚ฏใŒใ‚ฏใƒชใƒƒใƒ—ใƒœใƒผใƒ‰ใซใ‚ณใƒ”ใƒผใ•ใ‚Œใพใ—ใŸ" + "fileSelector": { + "availableFiles": "ๅˆฉ็”จๅฏ่ƒฝใชใƒ•ใ‚กใ‚คใƒซ ({{count}})", + "shareFiles": "ใƒ•ใ‚กใ‚คใƒซใ‚’ๅ…ฑๆœ‰ ({{count}})", + "searchPlaceholder": "ใƒ•ใ‚กใ‚คใƒซใ‚’ๆคœ็ดข...", + "noMatchingFiles": "ไธ€่‡ดใ™ใ‚‹ใƒ•ใ‚กใ‚คใƒซใŒใ‚ใ‚Šใพใ›ใ‚“", + "noAvailableFiles": "ๅˆฉ็”จๅฏ่ƒฝใชใƒ•ใ‚กใ‚คใƒซใŒใ‚ใ‚Šใพใ›ใ‚“", + "noFilesInShare": "ๅ…ฑๆœ‰ใƒ•ใ‚กใ‚คใƒซใŒใ‚ใ‚Šใพใ›ใ‚“", + "saveChanges": "ๅค‰ๆ›ดใ‚’ไฟๅญ˜" }, - "shareActions": { - "deleteTitle": "ๅ…ฑๆœ‰ใ‚’ๅ‰Š้™ค", - "deleteConfirmation": "ใ“ใฎๅ…ฑๆœ‰ใ‚’ๅ‰Š้™คใ—ใฆใ‚‚ใ‚ˆใ‚ใ—ใ„ใงใ™ใ‹๏ผŸใ“ใฎๆ“ไฝœใฏๅ…ƒใซๆˆปใ›ใพใ›ใ‚“ใ€‚", - "editTitle": "ๅ…ฑๆœ‰ใ‚’็ทจ้›†", - "nameLabel": "ๅ…ฑๆœ‰ๅ", - "expirationLabel": "ๆœ‰ๅŠนๆœŸ้™", - "expirationPlaceholder": "MM/DD/YYYY HH:MM", - "maxViewsLabel": "ๆœ€ๅคงใƒ“ใƒฅใƒผๆ•ฐ", - "maxViewsPlaceholder": "็„กๅˆถ้™ใฎๅ ดๅˆใฏ็ฉบ็™ฝใฎใพใพใซใ™ใ‚‹", - "passwordProtection": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ไฟ่ญท", - "passwordLabel": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰", - "passwordPlaceholder": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", - "newPasswordLabel": "ๆ–ฐใ—ใ„ใƒ‘ใ‚นใƒฏใƒผใƒ‰๏ผˆ็พๅœจใฎใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ไฟๆŒใ™ใ‚‹ๅ ดๅˆใฏ็ฉบ็™ฝใฎใพใพ๏ผ‰", - "newPasswordPlaceholder": "ๆ–ฐใ—ใ„ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", - "manageFilesTitle": "ใƒ•ใ‚กใ‚คใƒซใฎ็ฎก็†", - "manageRecipientsTitle": "ๅ—ไฟก่€…ใฎ็ฎก็†", - "editSuccess": "ๅ…ฑๆœ‰ใŒๆญฃๅธธใซๆ›ดๆ–ฐใ•ใ‚Œใพใ—ใŸ", - "editError": "ๅ…ฑๆœ‰ใฎๆ›ดๆ–ฐใซๅคฑๆ•—ใ—ใพใ—ใŸ" - }, - "shareDetails": { - "title": "ๅ…ฑๆœ‰ใฎ่ฉณ็ดฐ", - "subtitle": "ใ“ใฎๅ…ฑๆœ‰ใฎ่ฉณ็ดฐๆƒ…ๅ ฑ", - "basicInfo": "ๅŸบๆœฌๆƒ…ๅ ฑ", - "name": "ๅๅ‰", - "untitled": "็„ก้กŒ", - "views": "ใƒ“ใƒฅใƒผๆ•ฐ", - "dates": "ๆ—ฅไป˜", - "created": "ไฝœๆˆๆ—ฅ", - "expires": "ๆœ‰ๅŠนๆœŸ้™", - "never": "ใชใ—", - "security": "ใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃ", - "passwordProtected": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ไฟ่ญท", - "publicAccess": "ๅ…ฌ้–‹ใ‚ขใ‚ฏใ‚ปใ‚น", - "maxViews": "ๆœ€ๅคงใƒ“ใƒฅใƒผๆ•ฐ: {{count}}", - "files": "ใƒ•ใ‚กใ‚คใƒซ ({{count}})", - "recipients": "ๅ—ไฟก่€… ({{count}})", - "notAvailable": "่ฉฒๅฝ“ใชใ—", - "invalidDate": "็„กๅŠนใชๆ—ฅไป˜ใงใ™", - "loadError": "ๅ…ฑๆœ‰ใฎ่ฉณ็ดฐใฎ่ชญใฟ่พผใฟใซๅคฑๆ•—ใ—ใพใ—ใŸ" - }, - "uploadFile": { - "title": "ใƒ•ใ‚กใ‚คใƒซใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", - "selectFile": "ใƒ•ใ‚กใ‚คใƒซใ‚’้ธๆŠžใ™ใ‚‹ใซใฏใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใใ ใ•ใ„", - "preview": "ใƒ—ใƒฌใƒ“ใƒฅใƒผ", - "uploadProgress": "ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใฎ้€ฒ่กŒ็Šถๆณ", - "upload": "ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", - "success": "ใƒ•ใ‚กใ‚คใƒซใŒๆญฃๅธธใซใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ•ใ‚Œใพใ—ใŸ", - "error": "ใƒ•ใ‚กใ‚คใƒซใฎใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใซๅคฑๆ•—ใ—ใพใ—ใŸ" + "files": { + "title": "ใ™ในใฆใฎใƒ•ใ‚กใ‚คใƒซ", + "uploadFile": "ใƒ•ใ‚กใ‚คใƒซใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", + "loadError": "ใƒ•ใ‚กใ‚คใƒซใฎ่ชญใฟ่พผใฟใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "pageTitle": "ใƒžใ‚คใƒ•ใ‚กใ‚คใƒซ", + "breadcrumb": "ใƒžใ‚คใƒ•ใ‚กใ‚คใƒซ" }, "filesTable": { "ariaLabel": "ใƒ•ใ‚กใ‚คใƒซใƒ†ใƒผใƒ–ใƒซ", @@ -179,119 +101,10 @@ "delete": "ๅ‰Š้™ค" } }, - "sharesTable": { - "ariaLabel": "ๅ…ฑๆœ‰ใƒ†ใƒผใƒ–ใƒซ", - "never": "ใชใ—", - "columns": { - "name": "ๅๅ‰", - "createdAt": "ไฝœๆˆๆ—ฅ", - "expiresAt": "ๆœ‰ๅŠนๆœŸ้™", - "status": "ใ‚นใƒ†ใƒผใ‚ฟใ‚น", - "security": "ใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃ", - "files": "ใƒ•ใ‚กใ‚คใƒซ", - "recipients": "ๅ—ไฟก่€…", - "actions": "ๆ“ไฝœ" - }, - "status": { - "neverExpires": "็„กๆœŸ้™", - "active": "ใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ–", - "expired": "ๆœŸ้™ๅˆ‡ใ‚Œ" - }, - "security": { - "protected": "ไฟ่ญทๆธˆใฟ", - "public": "ๅ…ฌ้–‹" - }, - "filesCount": "{{count}} ใƒ•ใ‚กใ‚คใƒซ", - "recipientsCount": "{{count}} ๅ—ไฟก่€…", - "actions": { - "menu": "ๅ…ฑๆœ‰ๆ“ไฝœใƒกใƒ‹ใƒฅใƒผ", - "edit": "็ทจ้›†", - "manageFiles": "ใƒ•ใ‚กใ‚คใƒซ็ฎก็†", - "manageRecipients": "ๅ—ไฟก่€…็ฎก็†", - "viewDetails": "่ฉณ็ดฐใ‚’่กจ็คบ", - "generateLink": "ใƒชใƒณใ‚ฏใ‚’็”Ÿๆˆ", - "editLink": "ใƒชใƒณใ‚ฏใ‚’็ทจ้›†", - "copyLink": "ใƒชใƒณใ‚ฏใ‚’ใ‚ณใƒ”ใƒผ", - "notifyRecipients": "ๅ—ไฟก่€…ใซ้€š็Ÿฅ", - "delete": "ๅ‰Š้™ค" - } - }, "footer": { "poweredBy": "ๆไพ›:", "kyanHomepage": "Kyantech ใƒ›ใƒผใƒ ใƒšใƒผใ‚ธ" }, - "fileManager": { - "downloadError": "ใƒ•ใ‚กใ‚คใƒซใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "updateSuccess": "ใƒ•ใ‚กใ‚คใƒซใŒๆญฃๅธธใซๆ›ดๆ–ฐใ•ใ‚Œใพใ—ใŸ", - "updateError": "ใƒ•ใ‚กใ‚คใƒซใฎๆ›ดๆ–ฐใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "deleteSuccess": "ใƒ•ใ‚กใ‚คใƒซใŒๆญฃๅธธใซๅ‰Š้™คใ•ใ‚Œใพใ—ใŸ", - "deleteError": "ใƒ•ใ‚กใ‚คใƒซใฎๅ‰Š้™คใซๅคฑๆ•—ใ—ใพใ—ใŸ" - }, - "shareManager": { - "deleteSuccess": "ๅ…ฑๆœ‰ใŒๆญฃๅธธใซๅ‰Š้™คใ•ใ‚Œใพใ—ใŸ", - "deleteError": "ๅ…ฑๆœ‰ใฎๅ‰Š้™คใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "updateSuccess": "ๅ…ฑๆœ‰ใŒๆญฃๅธธใซๆ›ดๆ–ฐใ•ใ‚Œใพใ—ใŸ", - "updateError": "ๅ…ฑๆœ‰ใฎๆ›ดๆ–ฐใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "filesUpdateSuccess": "ใƒ•ใ‚กใ‚คใƒซใŒๆญฃๅธธใซๆ›ดๆ–ฐใ•ใ‚Œใพใ—ใŸ", - "filesUpdateError": "ใƒ•ใ‚กใ‚คใƒซใฎๆ›ดๆ–ฐใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "recipientsUpdateSuccess": "ๅ—ไฟก่€…ใŒๆญฃๅธธใซๆ›ดๆ–ฐใ•ใ‚Œใพใ—ใŸ", - "recipientsUpdateError": "ๅ—ไฟก่€…ใฎๆ›ดๆ–ฐใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "linkGenerateSuccess": "ๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใŒๆญฃๅธธใซ็”Ÿๆˆใ•ใ‚Œใพใ—ใŸ", - "linkGenerateError": "ๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใฎ็”Ÿๆˆใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "notifyLoading": "้€š็Ÿฅใ‚’้€ไฟกไธญ...", - "notifySuccess": "ๅ—ไฟก่€…ใซๆญฃๅธธใซ้€š็Ÿฅใ—ใพใ—ใŸ", - "notifyError": "ๅ—ไฟก่€…ใธใฎ้€š็Ÿฅใซๅคฑๆ•—ใ—ใพใ—ใŸ" - }, - "quickAccess": { - "files": { - "title": "ใƒžใ‚คใƒ•ใ‚กใ‚คใƒซ", - "description": "ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ•ใ‚ŒใŸใƒ•ใ‚กใ‚คใƒซใซใ‚ขใ‚ฏใ‚ปใ‚นใ—ใ€็ฎก็†ใ—ใพใ™" - }, - "shares": { - "title": "ใƒžใ‚คๅ…ฑๆœ‰", - "description": "ๅ…ฑๆœ‰ใ•ใ‚ŒใŸใƒ•ใ‚กใ‚คใƒซใ‚’่กจ็คบใŠใ‚ˆใณ็ฎก็†ใ—ใพใ™" - } - }, - "recentFiles": { - "title": "ๆœ€่ฟ‘ใฎใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", - "viewAll": "ใ™ในใฆ่กจ็คบ", - "uploadFile": "ใƒ•ใ‚กใ‚คใƒซใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", - "noFiles": "ใพใ ใƒ•ใ‚กใ‚คใƒซใŒใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ•ใ‚Œใฆใ„ใพใ›ใ‚“" - }, - "recentShares": { - "title": "ๆœ€่ฟ‘ใฎๅ…ฑๆœ‰", - "viewAll": "ใ™ในใฆ่กจ็คบ", - "createShare": "ๅ…ฑๆœ‰ใ‚’ไฝœๆˆ", - "noShares": "ใพใ ๅ…ฑๆœ‰ใŒไฝœๆˆใ•ใ‚Œใฆใ„ใพใ›ใ‚“", - "createFirst": "ๆœ€ๅˆใฎๅ…ฑๆœ‰ใ‚’ไฝœๆˆใ—ใฆใใ ใ•ใ„" - }, - "storageUsage": { - "title": "ใ‚นใƒˆใƒฌใƒผใ‚ธไฝฟ็”จ้‡", - "ariaLabel": "ใ‚นใƒˆใƒฌใƒผใ‚ธไฝฟ็”จ็Šถๆณใฎใƒ—ใƒญใ‚ฐใƒฌใ‚นใƒใƒผ", - "used": "{{size}} ไฝฟ็”จๆธˆใฟ", - "available": "{{size}} ๅˆฉ็”จๅฏ่ƒฝ" - }, - "dashboard": { - "loadError": "ใƒ€ใƒƒใ‚ทใƒฅใƒœใƒผใƒ‰ใƒ‡ใƒผใ‚ฟใฎ่ชญใฟ่พผใฟใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "linkCopied": "ใƒชใƒณใ‚ฏใŒใ‚ฏใƒชใƒƒใƒ—ใƒœใƒผใƒ‰ใซใ‚ณใƒ”ใƒผใ•ใ‚Œใพใ—ใŸ", - "pageTitle": "ใƒ€ใƒƒใ‚ทใƒฅใƒœใƒผใƒ‰", - "breadcrumb": "ใƒ€ใƒƒใ‚ทใƒฅใƒœใƒผใƒ‰" - }, - "emptyState": { - "noFiles": "ใพใ ใƒ•ใ‚กใ‚คใƒซใŒใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ•ใ‚Œใฆใ„ใพใ›ใ‚“", - "uploadFile": "ใƒ•ใ‚กใ‚คใƒซใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰" - }, - "files": { - "title": "ใ™ในใฆใฎใƒ•ใ‚กใ‚คใƒซ", - "uploadFile": "ใƒ•ใ‚กใ‚คใƒซใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", - "loadError": "ใƒ•ใ‚กใ‚คใƒซใฎ่ชญใฟ่พผใฟใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "pageTitle": "ใƒžใ‚คใƒ•ใ‚กใ‚คใƒซ", - "breadcrumb": "ใƒžใ‚คใƒ•ใ‚กใ‚คใƒซ" - }, - "searchBar": { - "placeholder": "ใƒ•ใ‚กใ‚คใƒซใ‚’ๆคœ็ดข...", - "results": "ๅ…จ{{total}}ไปถไธญ{{filtered}}ไปถใŒ่ฆ‹ใคใ‹ใ‚Šใพใ—ใŸ" - }, "forgotPassword": { "emailLabel": "ใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚น", "emailPlaceholder": "ใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚นใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", @@ -303,6 +116,20 @@ "resetInstructions": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใƒชใ‚ปใƒƒใƒˆใฎๆŒ‡็คบใŒใƒกใƒผใƒซใซ้€ไฟกใ•ใ‚Œใพใ—ใŸ", "pageTitle": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ใŠๅฟ˜ใ‚Œใงใ™ใ‹๏ผŸ" }, + "generateShareLink": { + "generateTitle": "ๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใ‚’็”Ÿๆˆ", + "updateTitle": "ๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใ‚’ๆ›ดๆ–ฐ", + "generateDescription": "ใƒ•ใ‚กใ‚คใƒซใ‚’ๅ…ฑๆœ‰ใ™ใ‚‹ใŸใ‚ใฎใƒชใƒณใ‚ฏใ‚’็”Ÿๆˆใ—ใพใ™", + "updateDescription": "ใ“ใฎๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใฎใ‚จใ‚คใƒชใ‚ขใ‚นใ‚’ๆ›ดๆ–ฐใ—ใพใ™", + "aliasPlaceholder": "ใ‚จใ‚คใƒชใ‚ขใ‚นใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", + "linkReady": "ๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใฎๆบ–ๅ‚™ใŒใงใใพใ—ใŸ:", + "generateButton": "ใƒชใƒณใ‚ฏใ‚’็”Ÿๆˆ", + "updateButton": "ใƒชใƒณใ‚ฏใ‚’ๆ›ดๆ–ฐ", + "copyButton": "ใƒชใƒณใ‚ฏใ‚’ใ‚ณใƒ”ใƒผ", + "success": "ใƒชใƒณใ‚ฏใŒๆญฃๅธธใซ็”Ÿๆˆใ•ใ‚Œใพใ—ใŸ", + "error": "ใƒชใƒณใ‚ฏใฎ็”Ÿๆˆใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "copied": "ใƒชใƒณใ‚ฏใŒใ‚ฏใƒชใƒƒใƒ—ใƒœใƒผใƒ‰ใซใ‚ณใƒ”ใƒผใ•ใ‚Œใพใ—ใŸ" + }, "home": { "description": "WeTransferใฎใ‚ชใƒผใƒ—ใƒณใ‚ฝใƒผใ‚นไปฃๆ›ฟใงใ™ใ€‚ใƒˆใƒฉใƒƒใ‚ญใƒณใ‚ฐใ‚„ๅˆถ้™ใชใ—ใซๅฎ‰ๅ…จใซใƒ•ใ‚กใ‚คใƒซใ‚’ๅ…ฑๆœ‰ใ—ใพใ™ใ€‚", "documentation": "ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ", @@ -314,6 +141,46 @@ }, "pageTitle": "ใƒ›ใƒผใƒ " }, + "login": { + "welcome": "ใ‚ˆใ†ใ“ใใธ", + "signInToContinue": "็ถš่กŒใ™ใ‚‹ใซใฏใ‚ตใ‚คใƒณใ‚คใƒณใ—ใฆใใ ใ•ใ„", + "emailLabel": "ใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚น", + "emailPlaceholder": "ใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚นใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", + "passwordLabel": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰", + "passwordPlaceholder": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", + "signIn": "ใ‚ตใ‚คใƒณใ‚คใƒณ", + "signingIn": "ใ‚ตใ‚คใƒณใ‚คใƒณไธญ...", + "forgotPassword": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ใŠๅฟ˜ใ‚Œใงใ™ใ‹๏ผŸ", + "pageTitle": "ใƒญใ‚ฐใ‚คใƒณ" + }, + "logo": { + "labels": { + "appLogo": "ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใƒญใ‚ด" + }, + "buttons": { + "upload": "ใƒญใ‚ดใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", + "remove": "ใƒญใ‚ดใ‚’ๅ‰Š้™ค" + }, + "messages": { + "uploadSuccess": "ใƒญใ‚ดใŒๆญฃๅธธใซใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ•ใ‚Œใพใ—ใŸ", + "removeSuccess": "ใƒญใ‚ดใŒๆญฃๅธธใซๅ‰Š้™คใ•ใ‚Œใพใ—ใŸ" + }, + "errors": { + "uploadFailed": "ใƒญใ‚ดใฎใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "removeFailed": "ใƒญใ‚ดใฎๅ‰Š้™คใซๅคฑๆ•—ใ—ใพใ—ใŸ" + } + }, + "navbar": { + "logoAlt": "ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใƒญใ‚ด", + "profileMenu": "ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใƒกใƒ‹ใƒฅใƒผ", + "profile": "ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซ", + "settings": "่จญๅฎš", + "usersManagement": "ใƒฆใƒผใ‚ถใƒผ็ฎก็†", + "logout": "ใƒญใ‚ฐใ‚ขใ‚ฆใƒˆ" + }, + "navigation": { + "dashboard": "ใƒ€ใƒƒใ‚ทใƒฅใƒœใƒผใƒ‰" + }, "profile": { "password": { "title": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅค‰ๆ›ด", @@ -356,6 +223,43 @@ }, "pageTitle": "ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซ" }, + "quickAccess": { + "files": { + "title": "ใƒžใ‚คใƒ•ใ‚กใ‚คใƒซ", + "description": "ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ•ใ‚ŒใŸใƒ•ใ‚กใ‚คใƒซใซใ‚ขใ‚ฏใ‚ปใ‚นใ—ใ€็ฎก็†ใ—ใพใ™" + }, + "shares": { + "title": "ใƒžใ‚คๅ…ฑๆœ‰", + "description": "ๅ…ฑๆœ‰ใ•ใ‚ŒใŸใƒ•ใ‚กใ‚คใƒซใ‚’่กจ็คบใŠใ‚ˆใณ็ฎก็†ใ—ใพใ™" + } + }, + "recentFiles": { + "title": "ๆœ€่ฟ‘ใฎใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", + "viewAll": "ใ™ในใฆ่กจ็คบ", + "uploadFile": "ใƒ•ใ‚กใ‚คใƒซใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", + "noFiles": "ใพใ ใƒ•ใ‚กใ‚คใƒซใŒใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ•ใ‚Œใฆใ„ใพใ›ใ‚“" + }, + "recentShares": { + "title": "ๆœ€่ฟ‘ใฎๅ…ฑๆœ‰", + "viewAll": "ใ™ในใฆ่กจ็คบ", + "createShare": "ๅ…ฑๆœ‰ใ‚’ไฝœๆˆ", + "noShares": "ใพใ ๅ…ฑๆœ‰ใŒไฝœๆˆใ•ใ‚Œใฆใ„ใพใ›ใ‚“", + "createFirst": "ๆœ€ๅˆใฎๅ…ฑๆœ‰ใ‚’ไฝœๆˆใ—ใฆใใ ใ•ใ„" + }, + "recipientSelector": { + "emailPlaceholder": "ๅ—ไฟก่€…ใฎใƒกใƒผใƒซใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", + "add": "่ฟฝๅŠ ", + "recipients": "ๅ—ไฟก่€… ({{count}})", + "notifyAll": "ๅ…จๅ“กใซ้€š็Ÿฅ", + "noRecipients": "ใพใ ๅ—ไฟก่€…ใŒ่ฟฝๅŠ ใ•ใ‚Œใฆใ„ใพใ›ใ‚“", + "addSuccess": "ๅ—ไฟก่€…ใŒๆญฃๅธธใซ่ฟฝๅŠ ใ•ใ‚Œใพใ—ใŸ", + "addError": "ๅ—ไฟก่€…ใฎ่ฟฝๅŠ ใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "removeSuccess": "ๅ—ไฟก่€…ใŒๆญฃๅธธใซๅ‰Š้™คใ•ใ‚Œใพใ—ใŸ", + "removeError": "ๅ—ไฟก่€…ใฎๅ‰Š้™คใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "sendingNotifications": "้€š็Ÿฅใ‚’้€ไฟกไธญ...", + "notifySuccess": "ๅ—ไฟก่€…ใซๆญฃๅธธใซ้€š็Ÿฅใ—ใพใ—ใŸ", + "notifyError": "ๅ—ไฟก่€…ใธใฎ้€š็Ÿฅใซๅคฑๆ•—ใ—ใพใ—ใŸ" + }, "resetPassword": { "pageTitle": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใƒชใ‚ปใƒƒใƒˆ", "header": { @@ -379,6 +283,10 @@ "invalidToken": "็„กๅŠนใชใƒชใ‚ปใƒƒใƒˆใƒˆใƒผใ‚ฏใƒณใ€ใพใŸใฏใƒˆใƒผใ‚ฏใƒณใŒๅญ˜ๅœจใ—ใพใ›ใ‚“" } }, + "searchBar": { + "placeholder": "ใƒ•ใ‚กใ‚คใƒซใ‚’ๆคœ็ดข...", + "results": "ๅ…จ{{total}}ไปถไธญ{{filtered}}ไปถใŒ่ฆ‹ใคใ‹ใ‚Šใพใ—ใŸ" + }, "settings": { "groups": { "defaultDescription": "ๆง‹ๆˆใ‚ชใƒ—ใ‚ทใƒงใƒณ", @@ -513,6 +421,61 @@ }, "pageTitle": "ๅ…ฑๆœ‰" }, + "shareActions": { + "deleteTitle": "ๅ…ฑๆœ‰ใ‚’ๅ‰Š้™ค", + "deleteConfirmation": "ใ“ใฎๅ…ฑๆœ‰ใ‚’ๅ‰Š้™คใ—ใฆใ‚‚ใ‚ˆใ‚ใ—ใ„ใงใ™ใ‹๏ผŸใ“ใฎๆ“ไฝœใฏๅ…ƒใซๆˆปใ›ใพใ›ใ‚“ใ€‚", + "editTitle": "ๅ…ฑๆœ‰ใ‚’็ทจ้›†", + "nameLabel": "ๅ…ฑๆœ‰ๅ", + "expirationLabel": "ๆœ‰ๅŠนๆœŸ้™", + "expirationPlaceholder": "MM/DD/YYYY HH:MM", + "maxViewsLabel": "ๆœ€ๅคงใƒ“ใƒฅใƒผๆ•ฐ", + "maxViewsPlaceholder": "็„กๅˆถ้™ใฎๅ ดๅˆใฏ็ฉบ็™ฝใฎใพใพใซใ™ใ‚‹", + "passwordProtection": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ไฟ่ญท", + "passwordLabel": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰", + "passwordPlaceholder": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", + "newPasswordLabel": "ๆ–ฐใ—ใ„ใƒ‘ใ‚นใƒฏใƒผใƒ‰๏ผˆ็พๅœจใฎใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ไฟๆŒใ™ใ‚‹ๅ ดๅˆใฏ็ฉบ็™ฝใฎใพใพ๏ผ‰", + "newPasswordPlaceholder": "ๆ–ฐใ—ใ„ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„", + "manageFilesTitle": "ใƒ•ใ‚กใ‚คใƒซใฎ็ฎก็†", + "manageRecipientsTitle": "ๅ—ไฟก่€…ใฎ็ฎก็†", + "editSuccess": "ๅ…ฑๆœ‰ใŒๆญฃๅธธใซๆ›ดๆ–ฐใ•ใ‚Œใพใ—ใŸ", + "editError": "ๅ…ฑๆœ‰ใฎๆ›ดๆ–ฐใซๅคฑๆ•—ใ—ใพใ—ใŸ" + }, + "shareDetails": { + "title": "ๅ…ฑๆœ‰ใฎ่ฉณ็ดฐ", + "subtitle": "ใ“ใฎๅ…ฑๆœ‰ใฎ่ฉณ็ดฐๆƒ…ๅ ฑ", + "basicInfo": "ๅŸบๆœฌๆƒ…ๅ ฑ", + "name": "ๅๅ‰", + "untitled": "็„ก้กŒ", + "views": "ใƒ“ใƒฅใƒผๆ•ฐ", + "dates": "ๆ—ฅไป˜", + "created": "ไฝœๆˆๆ—ฅ", + "expires": "ๆœ‰ๅŠนๆœŸ้™", + "never": "ใชใ—", + "security": "ใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃ", + "passwordProtected": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ไฟ่ญท", + "publicAccess": "ๅ…ฌ้–‹ใ‚ขใ‚ฏใ‚ปใ‚น", + "maxViews": "ๆœ€ๅคงใƒ“ใƒฅใƒผๆ•ฐ:", + "files": "ใƒ•ใ‚กใ‚คใƒซ", + "recipients": "ๅ—ไฟก่€…", + "notAvailable": "่ฉฒๅฝ“ใชใ—", + "invalidDate": "็„กๅŠนใชๆ—ฅไป˜ใงใ™", + "loadError": "ๅ…ฑๆœ‰ใฎ่ฉณ็ดฐใฎ่ชญใฟ่พผใฟใซๅคฑๆ•—ใ—ใพใ—ใŸ" + }, + "shareManager": { + "deleteSuccess": "ๅ…ฑๆœ‰ใŒๆญฃๅธธใซๅ‰Š้™คใ•ใ‚Œใพใ—ใŸ", + "deleteError": "ๅ…ฑๆœ‰ใฎๅ‰Š้™คใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "updateSuccess": "ๅ…ฑๆœ‰ใŒๆญฃๅธธใซๆ›ดๆ–ฐใ•ใ‚Œใพใ—ใŸ", + "updateError": "ๅ…ฑๆœ‰ใฎๆ›ดๆ–ฐใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "filesUpdateSuccess": "ใƒ•ใ‚กใ‚คใƒซใŒๆญฃๅธธใซๆ›ดๆ–ฐใ•ใ‚Œใพใ—ใŸ", + "filesUpdateError": "ใƒ•ใ‚กใ‚คใƒซใฎๆ›ดๆ–ฐใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "recipientsUpdateSuccess": "ๅ—ไฟก่€…ใŒๆญฃๅธธใซๆ›ดๆ–ฐใ•ใ‚Œใพใ—ใŸ", + "recipientsUpdateError": "ๅ—ไฟก่€…ใฎๆ›ดๆ–ฐใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "linkGenerateSuccess": "ๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใŒๆญฃๅธธใซ็”Ÿๆˆใ•ใ‚Œใพใ—ใŸ", + "linkGenerateError": "ๅ…ฑๆœ‰ใƒชใƒณใ‚ฏใฎ็”Ÿๆˆใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "notifyLoading": "้€š็Ÿฅใ‚’้€ไฟกไธญ...", + "notifySuccess": "ๅ—ไฟก่€…ใซๆญฃๅธธใซ้€š็Ÿฅใ—ใพใ—ใŸ", + "notifyError": "ๅ—ไฟก่€…ใธใฎ้€š็Ÿฅใซๅคฑๆ•—ใ—ใพใ—ใŸ" + }, "shares": { "errors": { "loadFailed": "ๅ…ฑๆœ‰ใฎ่ชญใฟ่พผใฟใซๅคฑๆ•—ใ—ใพใ—ใŸ", @@ -539,6 +502,64 @@ }, "pageTitle": "ๅ…ฑๆœ‰" }, + "sharesTable": { + "ariaLabel": "ๅ…ฑๆœ‰ใƒ†ใƒผใƒ–ใƒซ", + "never": "ใชใ—", + "columns": { + "name": "ๅๅ‰", + "createdAt": "ไฝœๆˆๆ—ฅ", + "expiresAt": "ๆœ‰ๅŠนๆœŸ้™", + "status": "ใ‚นใƒ†ใƒผใ‚ฟใ‚น", + "security": "ใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃ", + "files": "ใƒ•ใ‚กใ‚คใƒซ", + "recipients": "ๅ—ไฟก่€…", + "actions": "ๆ“ไฝœ" + }, + "status": { + "neverExpires": "็„กๆœŸ้™", + "active": "ใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ–", + "expired": "ๆœŸ้™ๅˆ‡ใ‚Œ" + }, + "security": { + "protected": "ไฟ่ญทๆธˆใฟ", + "public": "ๅ…ฌ้–‹" + }, + "filesCount": "ใƒ•ใ‚กใ‚คใƒซ", + "recipientsCount": "ๅ—ไฟก่€…", + "actions": { + "menu": "ๅ…ฑๆœ‰ๆ“ไฝœใƒกใƒ‹ใƒฅใƒผ", + "edit": "็ทจ้›†", + "manageFiles": "ใƒ•ใ‚กใ‚คใƒซ็ฎก็†", + "manageRecipients": "ๅ—ไฟก่€…็ฎก็†", + "viewDetails": "่ฉณ็ดฐใ‚’่กจ็คบ", + "generateLink": "ใƒชใƒณใ‚ฏใ‚’็”Ÿๆˆ", + "editLink": "ใƒชใƒณใ‚ฏใ‚’็ทจ้›†", + "copyLink": "ใƒชใƒณใ‚ฏใ‚’ใ‚ณใƒ”ใƒผ", + "notifyRecipients": "ๅ—ไฟก่€…ใซ้€š็Ÿฅ", + "delete": "ๅ‰Š้™ค" + } + }, + "storageUsage": { + "title": "ใ‚นใƒˆใƒฌใƒผใ‚ธไฝฟ็”จ้‡", + "ariaLabel": "ใ‚นใƒˆใƒฌใƒผใ‚ธไฝฟ็”จ็Šถๆณใฎใƒ—ใƒญใ‚ฐใƒฌใ‚นใƒใƒผ", + "used": "ไฝฟ็”จๆธˆใฟ", + "available": "ๅˆฉ็”จๅฏ่ƒฝ" + }, + "theme": { + "toggle": "ใƒ†ใƒผใƒžใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใ‚‹", + "light": "ใƒฉใ‚คใƒˆ", + "dark": "ใƒ€ใƒผใ‚ฏ", + "system": "ใ‚ทใ‚นใƒ†ใƒ " + }, + "uploadFile": { + "title": "ใƒ•ใ‚กใ‚คใƒซใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", + "selectFile": "ใƒ•ใ‚กใ‚คใƒซใ‚’้ธๆŠžใ™ใ‚‹ใซใฏใ‚ฏใƒชใƒƒใ‚ฏใ—ใฆใใ ใ•ใ„", + "preview": "ใƒ—ใƒฌใƒ“ใƒฅใƒผ", + "uploadProgress": "ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใฎ้€ฒ่กŒ็Šถๆณ", + "upload": "ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", + "success": "ใƒ•ใ‚กใ‚คใƒซใŒๆญฃๅธธใซใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ•ใ‚Œใพใ—ใŸ", + "error": "ใƒ•ใ‚กใ‚คใƒซใฎใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใซๅคฑๆ•—ใ—ใพใ—ใŸ" + }, "users": { "modes": { "create": "ไฝœๆˆ", @@ -608,29 +629,16 @@ "userr": "ใƒฆใƒผใ‚ถใƒผ" } }, - "logo": { - "labels": { - "appLogo": "ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใƒญใ‚ด" - }, - "buttons": { - "upload": "ใƒญใ‚ดใ‚’ใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰", - "remove": "ใƒญใ‚ดใ‚’ๅ‰Š้™ค" - }, - "messages": { - "uploadSuccess": "ใƒญใ‚ดใŒๆญฃๅธธใซใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ•ใ‚Œใพใ—ใŸ", - "removeSuccess": "ใƒญใ‚ดใŒๆญฃๅธธใซๅ‰Š้™คใ•ใ‚Œใพใ—ใŸ" - }, - "errors": { - "uploadFailed": "ใƒญใ‚ดใฎใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใซๅคฑๆ•—ใ—ใพใ—ใŸ", - "removeFailed": "ใƒญใ‚ดใฎๅ‰Š้™คใซๅคฑๆ•—ใ—ใพใ—ใŸ" - } - }, - "navbar": { - "logoAlt": "ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใƒญใ‚ด", - "profileMenu": "ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใƒกใƒ‹ใƒฅใƒผ", - "profile": "ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซ", - "settings": "่จญๅฎš", - "usersManagement": "ใƒฆใƒผใ‚ถใƒผ็ฎก็†", - "logout": "ใƒญใ‚ฐใ‚ขใ‚ฆใƒˆ" + "validation": { + "invalidEmail": "็„กๅŠนใชใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚นใงใ™", + "passwordMinLength": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใฏๆœ€ไฝŽ6ๆ–‡ๅญ—ๅฟ…่ฆใงใ™", + "firstNameRequired": "ๅใฏๅฟ…้ ˆใงใ™", + "lastNameRequired": "ๅง“ใฏๅฟ…้ ˆใงใ™", + "usernameLength": "ใƒฆใƒผใ‚ถใƒผๅใฏๆœ€ไฝŽ3ๆ–‡ๅญ—ๅฟ…่ฆใงใ™", + "usernameSpaces": "ใƒฆใƒผใ‚ถใƒผๅใซใ‚นใƒšใƒผใ‚นใฏไฝฟ็”จใงใใพใ›ใ‚“", + "passwordLength": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใฏๆœ€ไฝŽ8ๆ–‡ๅญ—ๅฟ…่ฆใงใ™", + "passwordsMatch": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใŒไธ€่‡ดใ—ใพใ›ใ‚“", + "emailRequired": "ใƒกใƒผใƒซใ‚ขใƒ‰ใƒฌใ‚นใฏๅฟ…้ ˆใงใ™", + "passwordRequired": "ใƒ‘ใ‚นใƒฏใƒผใƒ‰ใฏๅฟ…้ ˆใงใ™" } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/ko-KR.json b/apps/web/messages/ko-KR.json similarity index 97% rename from apps/web/src/locales/ko-KR.json rename to apps/web/messages/ko-KR.json index 5453131..030359b 100644 --- a/apps/web/src/locales/ko-KR.json +++ b/apps/web/messages/ko-KR.json @@ -1,58 +1,4 @@ { - "login": { - "welcome": "ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค", - "signInToContinue": "๊ณ„์†ํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•˜์„ธ์š”", - "emailLabel": "์ด๋ฉ”์ผ ์ฃผ์†Œ", - "emailPlaceholder": "์ด๋ฉ”์ผ์„ ์ž…๋ ฅํ•˜์„ธ์š”", - "passwordLabel": "๋น„๋ฐ€๋ฒˆํ˜ธ", - "passwordPlaceholder": "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”", - "signIn": "๋กœ๊ทธ์ธ", - "signingIn": "๋กœ๊ทธ์ธ ์ค‘...", - "forgotPassword": "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žŠ์œผ์…จ๋‚˜์š”?", - "pageTitle": "๋กœ๊ทธ์ธ" - }, - "errors": { - "invalidCredentials": "์ž˜๋ชป๋œ ์ด๋ฉ”์ผ ๋˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค", - "userNotFound": "์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", - "accountLocked": "๊ณ„์ •์ด ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”", - "unexpectedError": "์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”" - }, - "validation": { - "invalidEmail": "์œ ํšจํ•˜์ง€ ์•Š์€ ์ด๋ฉ”์ผ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค", - "passwordMinLength": "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ตœ์†Œ 6์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค", - "firstNameRequired": "์ด๋ฆ„์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค", - "lastNameRequired": "์„ฑ์„ ์ž…๋ ฅํ•˜์„ธ์š”", - "usernameLength": "์‚ฌ์šฉ์ž ์ด๋ฆ„์€ ์ตœ์†Œ 3์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค", - "usernameSpaces": "์‚ฌ์šฉ์ž ์ด๋ฆ„์—๋Š” ๊ณต๋ฐฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", - "passwordLength": "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ตœ์†Œ 8์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค", - "passwordsMatch": "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค" - }, - "fileSelector": { - "availableFiles": "์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ({{count}})", - "shareFiles": "ํŒŒ์ผ ๊ณต์œ  ({{count}})", - "searchPlaceholder": "ํŒŒ์ผ ๊ฒ€์ƒ‰...", - "noMatchingFiles": "์ผ์น˜ํ•˜๋Š” ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค", - "noAvailableFiles": "์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค", - "noFilesInShare": "๊ณต์œ ๋œ ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค", - "saveChanges": "๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ €์žฅ" - }, - "recipientSelector": { - "emailPlaceholder": "์ˆ˜์‹ ์ž ์ด๋ฉ”์ผ์„ ์ž…๋ ฅํ•˜์„ธ์š”", - "add": "์ถ”๊ฐ€", - "recipients": "์ˆ˜์‹ ์ž ({{count}})", - "notifyAll": "๋ชจ๋‘์—๊ฒŒ ์•Œ๋ฆผ", - "noRecipients": "์•„์ง ์ˆ˜์‹ ์ž๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค", - "addSuccess": "์ˆ˜์‹ ์ž๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "addError": "์ˆ˜์‹ ์ž ์ถ”๊ฐ€์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "removeSuccess": "์ˆ˜์‹ ์ž๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "removeError": "์ˆ˜์‹ ์ž ์ œ๊ฑฐ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "sendingNotifications": "์•Œ๋ฆผ ์ „์†ก ์ค‘...", - "notifySuccess": "์ˆ˜์‹ ์ž์—๊ฒŒ ์„ฑ๊ณต์ ์œผ๋กœ ์•Œ๋ ธ์Šต๋‹ˆ๋‹ค", - "notifyError": "์ˆ˜์‹ ์ž ์•Œ๋ฆผ ์ „์†ก์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" - }, - "navigation": { - "dashboard": "๋Œ€์‹œ๋ณด๋“œ" - }, "common": { "loading": "๋กœ๋”ฉ ์ค‘์ž…๋‹ˆ๋‹ค. ์ž ์‹œ ๊ธฐ๋‹ค๋ ค์ฃผ์„ธ์š”...", "cancel": "์ทจ์†Œ", @@ -78,6 +24,22 @@ "success": "๊ณต์œ ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", "error": "๊ณต์œ  ์ƒ์„ฑ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" }, + "dashboard": { + "loadError": "๋Œ€์‹œ๋ณด๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "linkCopied": "๋งํฌ๊ฐ€ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "pageTitle": "๋Œ€์‹œ๋ณด๋“œ", + "breadcrumb": "๋Œ€์‹œ๋ณด๋“œ" + }, + "emptyState": { + "noFiles": "์•„์ง ํŒŒ์ผ์ด ์—…๋กœ๋“œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค", + "uploadFile": "ํŒŒ์ผ ์—…๋กœ๋“œ" + }, + "errors": { + "invalidCredentials": "์ž˜๋ชป๋œ ์ด๋ฉ”์ผ ๋˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค", + "userNotFound": "์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", + "accountLocked": "๊ณ„์ •์ด ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”", + "unexpectedError": "์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”" + }, "fileActions": { "editFile": "ํŒŒ์ผ ํŽธ์ง‘", "nameLabel": "์ด๋ฆ„", @@ -86,9 +48,16 @@ "descriptionLabel": "์„ค๋ช…", "descriptionPlaceholder": "ํŒŒ์ผ ์„ค๋ช…์„ ์ž…๋ ฅํ•˜์„ธ์š”", "deleteFile": "ํŒŒ์ผ ์‚ญ์ œ", - "deleteConfirmation": "\"{{fileName}}\"์„(๋ฅผ) ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", + "deleteConfirmation": "์„(๋ฅผ) ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", "deleteWarning": "์ด ์ž‘์—…์€ ์ทจ์†Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." }, + "fileManager": { + "downloadError": "ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "updateSuccess": "ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "updateError": "ํŒŒ์ผ ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "deleteSuccess": "ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "deleteError": "ํŒŒ์ผ ์‚ญ์ œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" + }, "filePreview": { "loading": "๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘...", "notAvailable": "๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", @@ -98,68 +67,21 @@ "loadError": "๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", "downloadError": "ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" }, - "generateShareLink": { - "generateTitle": "๊ณต์œ  ๋งํฌ ์ƒ์„ฑ", - "updateTitle": "๊ณต์œ  ๋งํฌ ์—…๋ฐ์ดํŠธ", - "generateDescription": "ํŒŒ์ผ์„ ๊ณต์œ ํ•  ๋งํฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค", - "updateDescription": "์ด ๊ณต์œ  ๋งํฌ์˜ ๋ณ„์นญ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค", - "aliasPlaceholder": "๋ณ„์นญ์„ ์ž…๋ ฅํ•˜์„ธ์š”", - "linkReady": "๊ณต์œ  ๋งํฌ๊ฐ€ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค:", - "generateButton": "๋งํฌ ์ƒ์„ฑ", - "updateButton": "๋งํฌ ์—…๋ฐ์ดํŠธ", - "copyButton": "๋งํฌ ๋ณต์‚ฌ", - "success": "๋งํฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "error": "๋งํฌ ์ƒ์„ฑ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "copied": "๋งํฌ๊ฐ€ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค" + "fileSelector": { + "availableFiles": "์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ({{count}})", + "shareFiles": "ํŒŒ์ผ ๊ณต์œ  ({{count}})", + "searchPlaceholder": "ํŒŒ์ผ ๊ฒ€์ƒ‰...", + "noMatchingFiles": "์ผ์น˜ํ•˜๋Š” ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค", + "noAvailableFiles": "์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค", + "noFilesInShare": "๊ณต์œ ๋œ ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค", + "saveChanges": "๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ €์žฅ" }, - "shareActions": { - "deleteTitle": "๊ณต์œ  ์‚ญ์ œ", - "deleteConfirmation": "์ด ๊ณต์œ ๋ฅผ ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด ์ž‘์—…์€ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", - "editTitle": "๊ณต์œ  ํŽธ์ง‘", - "nameLabel": "๊ณต์œ  ์ด๋ฆ„", - "expirationLabel": "๋งŒ๋ฃŒ ๋‚ ์งœ", - "expirationPlaceholder": "MM/DD/YYYY HH:MM", - "maxViewsLabel": "์ตœ๋Œ€ ์กฐํšŒ์ˆ˜", - "maxViewsPlaceholder": "๋ฌด์ œํ•œ์ธ ๊ฒฝ์šฐ ๋น„์›Œ๋‘์„ธ์š”", - "passwordProtection": "๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณดํ˜ธ", - "passwordLabel": "๋น„๋ฐ€๋ฒˆํ˜ธ", - "passwordPlaceholder": "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”", - "newPasswordLabel": "์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ (ํ˜„์žฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ์œ ์ง€ ์‹œ ๋น„์›Œ๋‘์„ธ์š”)", - "newPasswordPlaceholder": "์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”", - "manageFilesTitle": "ํŒŒ์ผ ๊ด€๋ฆฌ", - "manageRecipientsTitle": "์ˆ˜์‹ ์ž ๊ด€๋ฆฌ", - "editSuccess": "๊ณต์œ ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "editError": "๊ณต์œ  ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" - }, - "shareDetails": { - "title": "๊ณต์œ  ์„ธ๋ถ€ ์ •๋ณด", - "subtitle": "์ด ๊ณต์œ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด", - "basicInfo": "๊ธฐ๋ณธ ์ •๋ณด", - "name": "์ด๋ฆ„", - "untitled": "์ œ๋ชฉ ์—†์Œ", - "views": "์กฐํšŒ์ˆ˜", - "dates": "๋‚ ์งœ", - "created": "์ƒ์„ฑ๋จ", - "expires": "๋งŒ๋ฃŒ๋จ", - "never": "์—†์Œ", - "security": "๋ณด์•ˆ", - "passwordProtected": "๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณดํ˜ธ๋จ", - "publicAccess": "๊ณต๊ฐœ ์ ‘๊ทผ", - "maxViews": "์ตœ๋Œ€ ์กฐํšŒ์ˆ˜: {{count}}", - "files": "ํŒŒ์ผ ({{count}})", - "recipients": "์ˆ˜์‹ ์ž ({{count}})", - "notAvailable": "ํ•ด๋‹น ์—†์Œ", - "invalidDate": "์œ ํšจํ•˜์ง€ ์•Š์€ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค", - "loadError": "๊ณต์œ  ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" - }, - "uploadFile": { - "title": "ํŒŒ์ผ ์—…๋กœ๋“œ", - "selectFile": "ํŒŒ์ผ ์„ ํƒ์„ ์œ„ํ•ด ํด๋ฆญํ•˜์„ธ์š”", - "preview": "๋ฏธ๋ฆฌ๋ณด๊ธฐ", - "uploadProgress": "์—…๋กœ๋“œ ์ง„ํ–‰", - "upload": "์—…๋กœ๋“œ", - "success": "ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "error": "ํŒŒ์ผ ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" + "files": { + "title": "๋ชจ๋“  ํŒŒ์ผ", + "uploadFile": "ํŒŒ์ผ ์—…๋กœ๋“œ", + "loadError": "ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "pageTitle": "๋‚ด ํŒŒ์ผ", + "breadcrumb": "๋‚ด ํŒŒ์ผ" }, "filesTable": { "ariaLabel": "ํŒŒ์ผ ํ…Œ์ด๋ธ”", @@ -179,119 +101,10 @@ "delete": "์‚ญ์ œ" } }, - "sharesTable": { - "ariaLabel": "๊ณต์œ  ํ…Œ์ด๋ธ”", - "never": "์—†์Œ", - "columns": { - "name": "์ด๋ฆ„", - "createdAt": "์ƒ์„ฑ์ผ", - "expiresAt": "๋งŒ๋ฃŒ์ผ", - "status": "์ƒํƒœ", - "security": "๋ณด์•ˆ", - "files": "ํŒŒ์ผ", - "recipients": "์ˆ˜์‹ ์ž", - "actions": "์ž‘์—…" - }, - "status": { - "neverExpires": "๋งŒ๋ฃŒ๋˜์ง€ ์•Š์Œ", - "active": "ํ™œ์„ฑ", - "expired": "๋งŒ๋ฃŒ๋จ" - }, - "security": { - "protected": "๋ณดํ˜ธ๋จ", - "public": "๊ณต๊ฐœ" - }, - "filesCount": "{{count}}๊ฐœ์˜ ํŒŒ์ผ", - "recipientsCount": "{{count}}๋ช…์˜ ์ˆ˜์‹ ์ž", - "actions": { - "menu": "๊ณต์œ  ์ž‘์—… ๋ฉ”๋‰ด", - "edit": "ํŽธ์ง‘", - "manageFiles": "ํŒŒ์ผ ๊ด€๋ฆฌ", - "manageRecipients": "์ˆ˜์‹ ์ž ๊ด€๋ฆฌ", - "viewDetails": "์„ธ๋ถ€ ์ •๋ณด ๋ณด๊ธฐ", - "generateLink": "๋งํฌ ์ƒ์„ฑ", - "editLink": "๋งํฌ ํŽธ์ง‘", - "copyLink": "๋งํฌ ๋ณต์‚ฌ", - "notifyRecipients": "์ˆ˜์‹ ์ž ์•Œ๋ฆผ", - "delete": "์‚ญ์ œ" - } - }, "footer": { "poweredBy": "์ œ๊ณต:", "kyanHomepage": "Kyantech ํ™ˆํŽ˜์ด์ง€" }, - "fileManager": { - "downloadError": "ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "updateSuccess": "ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "updateError": "ํŒŒ์ผ ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "deleteSuccess": "ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "deleteError": "ํŒŒ์ผ ์‚ญ์ œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" - }, - "shareManager": { - "deleteSuccess": "๊ณต์œ ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "deleteError": "๊ณต์œ  ์‚ญ์ œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "updateSuccess": "๊ณต์œ ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "updateError": "๊ณต์œ  ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "filesUpdateSuccess": "ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "filesUpdateError": "ํŒŒ์ผ ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "recipientsUpdateSuccess": "์ˆ˜์‹ ์ž๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "recipientsUpdateError": "์ˆ˜์‹ ์ž ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "linkGenerateSuccess": "๊ณต์œ  ๋งํฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "linkGenerateError": "๊ณต์œ  ๋งํฌ ์ƒ์„ฑ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "notifyLoading": "์•Œ๋ฆผ ์ „์†ก ์ค‘...", - "notifySuccess": "์ˆ˜์‹ ์ž์—๊ฒŒ ์„ฑ๊ณต์ ์œผ๋กœ ์•Œ๋ ธ์Šต๋‹ˆ๋‹ค", - "notifyError": "์ˆ˜์‹ ์ž ์•Œ๋ฆผ ์ „์†ก์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" - }, - "quickAccess": { - "files": { - "title": "๋‚ด ํŒŒ์ผ", - "description": "์—…๋กœ๋“œ๋œ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค" - }, - "shares": { - "title": "๋‚ด ๊ณต์œ ", - "description": "๊ณต์œ ๋œ ํŒŒ์ผ์„ ๋ณด๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค" - } - }, - "recentFiles": { - "title": "์ตœ๊ทผ ์—…๋กœ๋“œ", - "viewAll": "์ „์ฒด ๋ณด๊ธฐ", - "uploadFile": "ํŒŒ์ผ ์—…๋กœ๋“œ", - "noFiles": "์•„์ง ํŒŒ์ผ์ด ์—…๋กœ๋“œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค" - }, - "recentShares": { - "title": "์ตœ๊ทผ ๊ณต์œ ", - "viewAll": "์ „์ฒด ๋ณด๊ธฐ", - "createShare": "๊ณต์œ  ์ƒ์„ฑ", - "noShares": "์•„์ง ๊ณต์œ ๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค", - "createFirst": "์ฒซ ๋ฒˆ์งธ ๊ณต์œ ๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”" - }, - "storageUsage": { - "title": "์Šคํ† ๋ฆฌ์ง€ ์‚ฌ์šฉ๋Ÿ‰", - "ariaLabel": "์Šคํ† ๋ฆฌ์ง€ ์‚ฌ์šฉ๋Ÿ‰ ์ง„ํ–‰ ๋ฐ”", - "used": "{{size}} ์‚ฌ์šฉ๋จ", - "available": "{{size}} ์‚ฌ์šฉ ๊ฐ€๋Šฅ" - }, - "dashboard": { - "loadError": "๋Œ€์‹œ๋ณด๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "linkCopied": "๋งํฌ๊ฐ€ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "pageTitle": "๋Œ€์‹œ๋ณด๋“œ", - "breadcrumb": "๋Œ€์‹œ๋ณด๋“œ" - }, - "emptyState": { - "noFiles": "์•„์ง ํŒŒ์ผ์ด ์—…๋กœ๋“œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค", - "uploadFile": "ํŒŒ์ผ ์—…๋กœ๋“œ" - }, - "files": { - "title": "๋ชจ๋“  ํŒŒ์ผ", - "uploadFile": "ํŒŒ์ผ ์—…๋กœ๋“œ", - "loadError": "ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "pageTitle": "๋‚ด ํŒŒ์ผ", - "breadcrumb": "๋‚ด ํŒŒ์ผ" - }, - "searchBar": { - "placeholder": "ํŒŒ์ผ ๊ฒ€์ƒ‰...", - "results": "์ „์ฒด {{total}}๊ฐœ ์ค‘ {{filtered}}๊ฐœ ํŒŒ์ผ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค" - }, "forgotPassword": { "emailLabel": "์ด๋ฉ”์ผ ์ฃผ์†Œ", "emailPlaceholder": "์ด๋ฉ”์ผ์„ ์ž…๋ ฅํ•˜์„ธ์š”", @@ -303,6 +116,20 @@ "resetInstructions": "๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ์ง€์นจ์ด ์ด๋ฉ”์ผ๋กœ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค", "pageTitle": "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žŠ์œผ์…จ๋‚˜์š”?" }, + "generateShareLink": { + "generateTitle": "๊ณต์œ  ๋งํฌ ์ƒ์„ฑ", + "updateTitle": "๊ณต์œ  ๋งํฌ ์—…๋ฐ์ดํŠธ", + "generateDescription": "ํŒŒ์ผ์„ ๊ณต์œ ํ•  ๋งํฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค", + "updateDescription": "์ด ๊ณต์œ  ๋งํฌ์˜ ๋ณ„์นญ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค", + "aliasPlaceholder": "๋ณ„์นญ์„ ์ž…๋ ฅํ•˜์„ธ์š”", + "linkReady": "๊ณต์œ  ๋งํฌ๊ฐ€ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค:", + "generateButton": "๋งํฌ ์ƒ์„ฑ", + "updateButton": "๋งํฌ ์—…๋ฐ์ดํŠธ", + "copyButton": "๋งํฌ ๋ณต์‚ฌ", + "success": "๋งํฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "error": "๋งํฌ ์ƒ์„ฑ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "copied": "๋งํฌ๊ฐ€ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค" + }, "home": { "description": "WeTransfer์˜ ์˜คํ”ˆ์†Œ์Šค ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค. ์ถ”์ ์ด๋‚˜ ์ œํ•œ ์—†์ด ํŒŒ์ผ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ณต์œ ํ•˜์„ธ์š”.", "documentation": "๋ฌธ์„œ", @@ -314,6 +141,46 @@ }, "pageTitle": "ํ™ˆ" }, + "login": { + "welcome": "์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค", + "signInToContinue": "๊ณ„์†ํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•˜์„ธ์š”", + "emailLabel": "์ด๋ฉ”์ผ ์ฃผ์†Œ", + "emailPlaceholder": "์ด๋ฉ”์ผ์„ ์ž…๋ ฅํ•˜์„ธ์š”", + "passwordLabel": "๋น„๋ฐ€๋ฒˆํ˜ธ", + "passwordPlaceholder": "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”", + "signIn": "๋กœ๊ทธ์ธ", + "signingIn": "๋กœ๊ทธ์ธ ์ค‘...", + "forgotPassword": "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žŠ์œผ์…จ๋‚˜์š”?", + "pageTitle": "๋กœ๊ทธ์ธ" + }, + "logo": { + "labels": { + "appLogo": "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ณ " + }, + "buttons": { + "upload": "๋กœ๊ณ  ์—…๋กœ๋“œ", + "remove": "๋กœ๊ณ  ์‚ญ์ œ" + }, + "messages": { + "uploadSuccess": "๋กœ๊ณ ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "removeSuccess": "๋กœ๊ณ ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค" + }, + "errors": { + "uploadFailed": "๋กœ๊ณ  ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "removeFailed": "๋กœ๊ณ  ์‚ญ์ œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" + } + }, + "navbar": { + "logoAlt": "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ณ ", + "profileMenu": "ํ”„๋กœํ•„ ๋ฉ”๋‰ด", + "profile": "ํ”„๋กœํ•„", + "settings": "์„ค์ •", + "usersManagement": "์‚ฌ์šฉ์ž ๊ด€๋ฆฌ", + "logout": "๋กœ๊ทธ์•„์›ƒ" + }, + "navigation": { + "dashboard": "๋Œ€์‹œ๋ณด๋“œ" + }, "profile": { "password": { "title": "๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ", @@ -356,6 +223,43 @@ }, "pageTitle": "ํ”„๋กœํ•„" }, + "quickAccess": { + "files": { + "title": "๋‚ด ํŒŒ์ผ", + "description": "์—…๋กœ๋“œ๋œ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค" + }, + "shares": { + "title": "๋‚ด ๊ณต์œ ", + "description": "๊ณต์œ ๋œ ํŒŒ์ผ์„ ๋ณด๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค" + } + }, + "recentFiles": { + "title": "์ตœ๊ทผ ์—…๋กœ๋“œ", + "viewAll": "์ „์ฒด ๋ณด๊ธฐ", + "uploadFile": "ํŒŒ์ผ ์—…๋กœ๋“œ", + "noFiles": "์•„์ง ํŒŒ์ผ์ด ์—…๋กœ๋“œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค" + }, + "recentShares": { + "title": "์ตœ๊ทผ ๊ณต์œ ", + "viewAll": "์ „์ฒด ๋ณด๊ธฐ", + "createShare": "๊ณต์œ  ์ƒ์„ฑ", + "noShares": "์•„์ง ๊ณต์œ ๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค", + "createFirst": "์ฒซ ๋ฒˆ์งธ ๊ณต์œ ๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”" + }, + "recipientSelector": { + "emailPlaceholder": "์ˆ˜์‹ ์ž ์ด๋ฉ”์ผ์„ ์ž…๋ ฅํ•˜์„ธ์š”", + "add": "์ถ”๊ฐ€", + "recipients": "์ˆ˜์‹ ์ž ({{count}})", + "notifyAll": "๋ชจ๋‘์—๊ฒŒ ์•Œ๋ฆผ", + "noRecipients": "์•„์ง ์ˆ˜์‹ ์ž๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค", + "addSuccess": "์ˆ˜์‹ ์ž๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "addError": "์ˆ˜์‹ ์ž ์ถ”๊ฐ€์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "removeSuccess": "์ˆ˜์‹ ์ž๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "removeError": "์ˆ˜์‹ ์ž ์ œ๊ฑฐ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "sendingNotifications": "์•Œ๋ฆผ ์ „์†ก ์ค‘...", + "notifySuccess": "์ˆ˜์‹ ์ž์—๊ฒŒ ์„ฑ๊ณต์ ์œผ๋กœ ์•Œ๋ ธ์Šต๋‹ˆ๋‹ค", + "notifyError": "์ˆ˜์‹ ์ž ์•Œ๋ฆผ ์ „์†ก์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" + }, "resetPassword": { "pageTitle": "๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •", "header": { @@ -379,6 +283,10 @@ "invalidToken": "์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ˆ„๋ฝ๋œ ์žฌ์„ค์ • ํ† ํฐ" } }, + "searchBar": { + "placeholder": "ํŒŒ์ผ ๊ฒ€์ƒ‰...", + "results": "์ „์ฒด {{total}}๊ฐœ ์ค‘ {{filtered}}๊ฐœ ํŒŒ์ผ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค" + }, "settings": { "groups": { "defaultDescription": "๊ตฌ์„ฑ ์˜ต์…˜", @@ -513,6 +421,61 @@ }, "pageTitle": "๊ณต์œ " }, + "shareActions": { + "deleteTitle": "๊ณต์œ  ์‚ญ์ œ", + "deleteConfirmation": "์ด ๊ณต์œ ๋ฅผ ์‚ญ์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด ์ž‘์—…์€ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", + "editTitle": "๊ณต์œ  ํŽธ์ง‘", + "nameLabel": "๊ณต์œ  ์ด๋ฆ„", + "expirationLabel": "๋งŒ๋ฃŒ ๋‚ ์งœ", + "expirationPlaceholder": "MM/DD/YYYY HH:MM", + "maxViewsLabel": "์ตœ๋Œ€ ์กฐํšŒ์ˆ˜", + "maxViewsPlaceholder": "๋ฌด์ œํ•œ์ธ ๊ฒฝ์šฐ ๋น„์›Œ๋‘์„ธ์š”", + "passwordProtection": "๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณดํ˜ธ", + "passwordLabel": "๋น„๋ฐ€๋ฒˆํ˜ธ", + "passwordPlaceholder": "๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”", + "newPasswordLabel": "์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ (ํ˜„์žฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ์œ ์ง€ ์‹œ ๋น„์›Œ๋‘์„ธ์š”)", + "newPasswordPlaceholder": "์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”", + "manageFilesTitle": "ํŒŒ์ผ ๊ด€๋ฆฌ", + "manageRecipientsTitle": "์ˆ˜์‹ ์ž ๊ด€๋ฆฌ", + "editSuccess": "๊ณต์œ ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "editError": "๊ณต์œ  ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" + }, + "shareDetails": { + "title": "๊ณต์œ  ์„ธ๋ถ€ ์ •๋ณด", + "subtitle": "์ด ๊ณต์œ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด", + "basicInfo": "๊ธฐ๋ณธ ์ •๋ณด", + "name": "์ด๋ฆ„", + "untitled": "์ œ๋ชฉ ์—†์Œ", + "views": "์กฐํšŒ์ˆ˜", + "dates": "๋‚ ์งœ", + "created": "์ƒ์„ฑ๋จ", + "expires": "๋งŒ๋ฃŒ๋จ", + "never": "์—†์Œ", + "security": "๋ณด์•ˆ", + "passwordProtected": "๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณดํ˜ธ๋จ", + "publicAccess": "๊ณต๊ฐœ ์ ‘๊ทผ", + "maxViews": "์ตœ๋Œ€ ์กฐํšŒ์ˆ˜:", + "files": "ํŒŒ์ผ", + "recipients": "์ˆ˜์‹ ์ž", + "notAvailable": "ํ•ด๋‹น ์—†์Œ", + "invalidDate": "์œ ํšจํ•˜์ง€ ์•Š์€ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค", + "loadError": "๊ณต์œ  ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" + }, + "shareManager": { + "deleteSuccess": "๊ณต์œ ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "deleteError": "๊ณต์œ  ์‚ญ์ œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "updateSuccess": "๊ณต์œ ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "updateError": "๊ณต์œ  ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "filesUpdateSuccess": "ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "filesUpdateError": "ํŒŒ์ผ ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "recipientsUpdateSuccess": "์ˆ˜์‹ ์ž๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "recipientsUpdateError": "์ˆ˜์‹ ์ž ์—…๋ฐ์ดํŠธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "linkGenerateSuccess": "๊ณต์œ  ๋งํฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "linkGenerateError": "๊ณต์œ  ๋งํฌ ์ƒ์„ฑ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", + "notifyLoading": "์•Œ๋ฆผ ์ „์†ก ์ค‘...", + "notifySuccess": "์ˆ˜์‹ ์ž์—๊ฒŒ ์„ฑ๊ณต์ ์œผ๋กœ ์•Œ๋ ธ์Šต๋‹ˆ๋‹ค", + "notifyError": "์ˆ˜์‹ ์ž ์•Œ๋ฆผ ์ „์†ก์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" + }, "shares": { "errors": { "loadFailed": "๊ณต์œ  ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", @@ -539,6 +502,64 @@ }, "pageTitle": "๊ณต์œ " }, + "sharesTable": { + "ariaLabel": "๊ณต์œ  ํ…Œ์ด๋ธ”", + "never": "์—†์Œ", + "columns": { + "name": "์ด๋ฆ„", + "createdAt": "์ƒ์„ฑ์ผ", + "expiresAt": "๋งŒ๋ฃŒ์ผ", + "status": "์ƒํƒœ", + "security": "๋ณด์•ˆ", + "files": "ํŒŒ์ผ", + "recipients": "์ˆ˜์‹ ์ž", + "actions": "์ž‘์—…" + }, + "status": { + "neverExpires": "๋งŒ๋ฃŒ๋˜์ง€ ์•Š์Œ", + "active": "ํ™œ์„ฑ", + "expired": "๋งŒ๋ฃŒ๋จ" + }, + "security": { + "protected": "๋ณดํ˜ธ๋จ", + "public": "๊ณต๊ฐœ" + }, + "filesCount": "๊ฐœ์˜ ํŒŒ์ผ", + "recipientsCount": "๋ช…์˜ ์ˆ˜์‹ ์ž", + "actions": { + "menu": "๊ณต์œ  ์ž‘์—… ๋ฉ”๋‰ด", + "edit": "ํŽธ์ง‘", + "manageFiles": "ํŒŒ์ผ ๊ด€๋ฆฌ", + "manageRecipients": "์ˆ˜์‹ ์ž ๊ด€๋ฆฌ", + "viewDetails": "์„ธ๋ถ€ ์ •๋ณด ๋ณด๊ธฐ", + "generateLink": "๋งํฌ ์ƒ์„ฑ", + "editLink": "๋งํฌ ํŽธ์ง‘", + "copyLink": "๋งํฌ ๋ณต์‚ฌ", + "notifyRecipients": "์ˆ˜์‹ ์ž ์•Œ๋ฆผ", + "delete": "์‚ญ์ œ" + } + }, + "storageUsage": { + "title": "์Šคํ† ๋ฆฌ์ง€ ์‚ฌ์šฉ๋Ÿ‰", + "ariaLabel": "์Šคํ† ๋ฆฌ์ง€ ์‚ฌ์šฉ๋Ÿ‰ ์ง„ํ–‰ ๋ฐ”", + "used": "์‚ฌ์šฉ๋จ", + "available": "์‚ฌ์šฉ ๊ฐ€๋Šฅ" + }, + "theme": { + "toggle": "ํ…Œ๋งˆ ์ „ํ™˜", + "light": "๋ผ์ดํŠธ", + "dark": "๋‹คํฌ", + "system": "์‹œ์Šคํ…œ" + }, + "uploadFile": { + "title": "ํŒŒ์ผ ์—…๋กœ๋“œ", + "selectFile": "ํŒŒ์ผ ์„ ํƒ์„ ์œ„ํ•ด ํด๋ฆญํ•˜์„ธ์š”", + "preview": "๋ฏธ๋ฆฌ๋ณด๊ธฐ", + "uploadProgress": "์—…๋กœ๋“œ ์ง„ํ–‰", + "upload": "์—…๋กœ๋“œ", + "success": "ํŒŒ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "error": "ํŒŒ์ผ ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" + }, "users": { "modes": { "create": "์ƒ์„ฑ", @@ -608,29 +629,16 @@ "userr": "์‚ฌ์šฉ์ž" } }, - "logo": { - "labels": { - "appLogo": "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ณ " - }, - "buttons": { - "upload": "๋กœ๊ณ  ์—…๋กœ๋“œ", - "remove": "๋กœ๊ณ  ์‚ญ์ œ" - }, - "messages": { - "uploadSuccess": "๋กœ๊ณ ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋กœ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", - "removeSuccess": "๋กœ๊ณ ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค" - }, - "errors": { - "uploadFailed": "๋กœ๊ณ  ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค", - "removeFailed": "๋กœ๊ณ  ์‚ญ์ œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค" - } - }, - "navbar": { - "logoAlt": "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ณ ", - "profileMenu": "ํ”„๋กœํ•„ ๋ฉ”๋‰ด", - "profile": "ํ”„๋กœํ•„", - "settings": "์„ค์ •", - "usersManagement": "์‚ฌ์šฉ์ž ๊ด€๋ฆฌ", - "logout": "๋กœ๊ทธ์•„์›ƒ" + "validation": { + "invalidEmail": "์œ ํšจํ•˜์ง€ ์•Š์€ ์ด๋ฉ”์ผ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค", + "passwordMinLength": "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ตœ์†Œ 6์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค", + "firstNameRequired": "์ด๋ฆ„์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค", + "lastNameRequired": "์„ฑ์„ ์ž…๋ ฅํ•˜์„ธ์š”", + "usernameLength": "์‚ฌ์šฉ์ž ์ด๋ฆ„์€ ์ตœ์†Œ 3์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค", + "usernameSpaces": "์‚ฌ์šฉ์ž ์ด๋ฆ„์—๋Š” ๊ณต๋ฐฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", + "passwordLength": "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ตœ์†Œ 8์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค", + "passwordsMatch": "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค", + "emailRequired": "์ด๋ฉ”์ผ์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค", + "passwordRequired": "๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค" } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/pt-BR.json b/apps/web/messages/pt-BR.json similarity index 97% rename from apps/web/src/locales/pt-BR.json rename to apps/web/messages/pt-BR.json index 27ef35a..c90d1e5 100644 --- a/apps/web/src/locales/pt-BR.json +++ b/apps/web/messages/pt-BR.json @@ -1,58 +1,4 @@ { - "login": { - "welcome": "Bem-vindo", - "signInToContinue": "Entre para continuar", - "emailLabel": "Endereรงo de E-mail", - "emailPlaceholder": "Digite seu e-mail", - "passwordLabel": "Senha", - "passwordPlaceholder": "Digite sua senha", - "signIn": "Entrar", - "signingIn": "Entrando...", - "forgotPassword": "Esqueceu a senha?", - "pageTitle": "Entrar" - }, - "errors": { - "invalidCredentials": "E-mail ou senha invรกlidos", - "userNotFound": "Usuรกrio nรฃo encontrado", - "accountLocked": "Conta bloqueada. Tente novamente mais tarde", - "unexpectedError": "Ocorreu um erro inesperado. Por favor, tente novamente" - }, - "validation": { - "invalidEmail": "Endereรงo de email invรกlido", - "passwordMinLength": "A senha deve ter pelo menos 6 caracteres", - "firstNameRequired": "Nome รฉ obrigatรณrio", - "lastNameRequired": "Sobrenome รฉ obrigatรณrio", - "usernameLength": "Nome de usuรกrio deve ter pelo menos 3 caracteres", - "usernameSpaces": "Nome de usuรกrio nรฃo pode conter espaรงos", - "passwordLength": "A senha deve ter pelo menos 8 caracteres", - "passwordsMatch": "As senhas nรฃo coincidem" - }, - "fileSelector": { - "availableFiles": "Arquivos Disponรญveis ({{count}})", - "shareFiles": "Arquivos Compartilhados ({{count}})", - "searchPlaceholder": "Buscar arquivos...", - "noMatchingFiles": "Nenhum arquivo encontrado", - "noAvailableFiles": "Nenhum arquivo disponรญvel", - "noFilesInShare": "Nenhum arquivo compartilhado", - "saveChanges": "Salvar Alteraรงรตes" - }, - "recipientSelector": { - "emailPlaceholder": "Digite o e-mail do destinatรกrio", - "add": "Adicionar", - "recipients": "Destinatรกrios ({{count}})", - "notifyAll": "Notificar Todos", - "noRecipients": "Nenhum destinatรกrio adicionado", - "addSuccess": "Destinatรกrio adicionado com sucesso", - "addError": "Falha ao adicionar destinatรกrio", - "removeSuccess": "Destinatรกrio removido com sucesso", - "removeError": "Falha ao remover destinatรกrio", - "sendingNotifications": "Enviando notificaรงรตes...", - "notifySuccess": "Destinatรกrios notificados com sucesso", - "notifyError": "Falha ao notificar destinatรกrios" - }, - "navigation": { - "dashboard": "Painel" - }, "common": { "loading": "Carregando, aguarde...", "cancel": "Cancelar", @@ -78,6 +24,22 @@ "success": "Compartilhamento criado com sucesso", "error": "Falha ao criar compartilhamento" }, + "dashboard": { + "loadError": "Falha ao carregar dados do painel", + "linkCopied": "Link copiado para a รกrea de transferรชncia", + "pageTitle": "Painel", + "breadcrumb": "Painel" + }, + "emptyState": { + "noFiles": "Nenhum arquivo enviado ainda", + "uploadFile": "Enviar Arquivo" + }, + "errors": { + "invalidCredentials": "E-mail ou senha invรกlidos", + "userNotFound": "Usuรกrio nรฃo encontrado", + "accountLocked": "Conta bloqueada. Tente novamente mais tarde", + "unexpectedError": "Ocorreu um erro inesperado. Por favor, tente novamente" + }, "fileActions": { "editFile": "Editar Arquivo", "nameLabel": "Nome", @@ -86,9 +48,16 @@ "descriptionLabel": "Descriรงรฃo", "descriptionPlaceholder": "Digite a descriรงรฃo do arquivo", "deleteFile": "Excluir Arquivo", - "deleteConfirmation": "Tem certeza que deseja excluir \"{{fileName}}\"?", + "deleteConfirmation": "Tem certeza que deseja excluir ?", "deleteWarning": "Esta aรงรฃo nรฃo pode ser desfeita." }, + "fileManager": { + "downloadError": "Falha ao baixar arquivo", + "updateSuccess": "Arquivo atualizado com sucesso", + "updateError": "Falha ao atualizar arquivo", + "deleteSuccess": "Arquivo excluรญdo com sucesso", + "deleteError": "Falha ao excluir arquivo" + }, "filePreview": { "loading": "Carregando visualizaรงรฃo...", "notAvailable": "Visualizaรงรฃo nรฃo disponรญvel", @@ -98,68 +67,21 @@ "loadError": "Falha ao carregar a visualizaรงรฃo", "downloadError": "Falha ao baixar o arquivo" }, - "generateShareLink": { - "generateTitle": "Gerar Link de Compartilhamento", - "updateTitle": "Atualizar Link de Compartilhamento", - "generateDescription": "Gere um link para compartilhar seus arquivos", - "updateDescription": "Atualize o alias deste link de compartilhamento", - "aliasPlaceholder": "Digite o alias", - "linkReady": "Seu link de compartilhamento estรก pronto:", - "generateButton": "Gerar Link", - "updateButton": "Atualizar Link", - "copyButton": "Copiar Link", - "success": "Link gerado com sucesso", - "error": "Erro ao gerar link", - "copied": "Link copiado para a รกrea de transferรชncia" + "fileSelector": { + "availableFiles": "Arquivos Disponรญveis ({{count}})", + "shareFiles": "Arquivos Compartilhados ({{count}})", + "searchPlaceholder": "Buscar arquivos...", + "noMatchingFiles": "Nenhum arquivo encontrado", + "noAvailableFiles": "Nenhum arquivo disponรญvel", + "noFilesInShare": "Nenhum arquivo compartilhado", + "saveChanges": "Salvar Alteraรงรตes" }, - "shareActions": { - "deleteTitle": "Excluir Compartilhamento", - "deleteConfirmation": "Tem certeza que deseja excluir este compartilhamento? Esta aรงรฃo nรฃo pode ser desfeita.", - "editTitle": "Editar Compartilhamento", - "nameLabel": "Nome do Compartilhamento", - "expirationLabel": "Data de Expiraรงรฃo", - "expirationPlaceholder": "DD/MM/AAAA HH:MM", - "maxViewsLabel": "Mรกximo de Visualizaรงรตes", - "maxViewsPlaceholder": "Deixe vazio para ilimitado", - "passwordProtection": "Protegido por Senha", - "passwordLabel": "Senha", - "passwordPlaceholder": "Digite a senha", - "newPasswordLabel": "Nova Senha (deixe vazio para manter a atual)", - "newPasswordPlaceholder": "Digite a nova senha", - "manageFilesTitle": "Gerenciar Arquivos", - "manageRecipientsTitle": "Gerenciar Destinatรกrios", - "editSuccess": "Compartilhamento atualizado com sucesso", - "editError": "Falha ao atualizar compartilhamento" - }, - "shareDetails": { - "title": "Detalhes do Compartilhamento", - "subtitle": "Informaรงรตes detalhadas sobre este compartilhamento", - "basicInfo": "Informaรงรตes Bรกsicas", - "name": "Nome", - "untitled": "Compartilhamento sem tรญtulo", - "views": "Visualizaรงรตes", - "dates": "Datas", - "created": "Criado em: {{date}}", - "expires": "Expira em: {{date}}", - "never": "Nunca", - "security": "Seguranรงa", - "passwordProtected": "Protegido por Senha", - "publicAccess": "Acesso Pรบblico", - "maxViews": "Mรกximo de Visualizaรงรตes: {{count}}", - "files": "Arquivos ({{count}})", - "recipients": "Destinatรกrios ({{count}})", - "notAvailable": "N/A", - "invalidDate": "Data invรกlida", - "loadError": "Falha ao carregar detalhes do compartilhamento" - }, - "uploadFile": { - "title": "Enviar Arquivo", - "selectFile": "Clique para selecionar um arquivo", - "preview": "Prรฉ-visualizaรงรฃo", - "uploadProgress": "Progresso do upload", - "upload": "Enviar", - "success": "Arquivo enviado com sucesso", - "error": "Falha ao enviar arquivo" + "files": { + "title": "Todos os Arquivos", + "uploadFile": "Enviar Arquivo", + "loadError": "Falha ao carregar arquivos", + "pageTitle": "Meus Arquivos", + "breadcrumb": "Meus Arquivos" }, "filesTable": { "ariaLabel": "Tabela de arquivos", @@ -179,119 +101,10 @@ "delete": "Excluir" } }, - "sharesTable": { - "ariaLabel": "Tabela de compartilhamentos", - "never": "Nunca", - "columns": { - "name": "NOME", - "createdAt": "CRIADO EM", - "expiresAt": "EXPIRA EM", - "status": "STATUS", - "security": "SEGURANร‡A", - "files": "ARQUIVOS", - "recipients": "DESTINATรRIOS", - "actions": "Aร‡ร•ES" - }, - "status": { - "neverExpires": "Nunca Expira", - "active": "Ativo", - "expired": "Expirado" - }, - "security": { - "protected": "Protegido", - "public": "Pรบblico" - }, - "filesCount": "{{count}} arquivos", - "recipientsCount": "{{count}} destinatรกrios", - "actions": { - "menu": "Menu de aรงรตes do compartilhamento", - "edit": "Editar", - "manageFiles": "Gerenciar Arquivos", - "manageRecipients": "Gerenciar Destinatรกrios", - "viewDetails": "Ver Detalhes", - "generateLink": "Gerar Link", - "editLink": "Editar Link", - "copyLink": "Copiar Link", - "notifyRecipients": "Notificar Destinatรกrios", - "delete": "Excluir" - } - }, "footer": { "poweredBy": "Desenvolvido por", "kyanHomepage": "Pรกgina inicial da Kyantech" }, - "fileManager": { - "downloadError": "Falha ao baixar arquivo", - "updateSuccess": "Arquivo atualizado com sucesso", - "updateError": "Falha ao atualizar arquivo", - "deleteSuccess": "Arquivo excluรญdo com sucesso", - "deleteError": "Falha ao excluir arquivo" - }, - "shareManager": { - "deleteSuccess": "Compartilhamento excluรญdo com sucesso", - "deleteError": "Falha ao excluir compartilhamento", - "updateSuccess": "Compartilhamento atualizado com sucesso", - "updateError": "Falha ao atualizar compartilhamento", - "filesUpdateSuccess": "Arquivos atualizados com sucesso", - "filesUpdateError": "Falha ao atualizar arquivos", - "recipientsUpdateSuccess": "Destinatรกrios atualizados com sucesso", - "recipientsUpdateError": "Falha ao atualizar destinatรกrios", - "linkGenerateSuccess": "Link de compartilhamento gerado com sucesso", - "linkGenerateError": "Falha ao gerar link de compartilhamento", - "notifyLoading": "Enviando notificaรงรตes...", - "notifySuccess": "Destinatรกrios notificados com sucesso", - "notifyError": "Falha ao notificar destinatรกrios" - }, - "quickAccess": { - "files": { - "title": "Meus Arquivos", - "description": "Acesse e gerencie seus arquivos enviados" - }, - "shares": { - "title": "Meus Compartilhamentos", - "description": "Visualize e gerencie seus arquivos compartilhados" - } - }, - "recentFiles": { - "title": "Uploads Recentes", - "viewAll": "Ver Todos", - "uploadFile": "Enviar Arquivo", - "noFiles": "Nenhum arquivo enviado ainda" - }, - "recentShares": { - "title": "Compartilhamentos Recentes", - "viewAll": "Ver Todos", - "createShare": "Criar Compartilhamento", - "noShares": "Nenhum compartilhamento criado ainda", - "createFirst": "Criar seu primeiro compartilhamento" - }, - "storageUsage": { - "title": "Uso de Armazenamento", - "ariaLabel": "Barra de progresso do uso de armazenamento", - "used": "{{size}} usado", - "available": "{{size}} disponรญvel" - }, - "dashboard": { - "loadError": "Falha ao carregar dados do painel", - "linkCopied": "Link copiado para a รกrea de transferรชncia", - "pageTitle": "Painel", - "breadcrumb": "Painel" - }, - "emptyState": { - "noFiles": "Nenhum arquivo enviado ainda", - "uploadFile": "Enviar Arquivo" - }, - "files": { - "title": "Todos os Arquivos", - "uploadFile": "Enviar Arquivo", - "loadError": "Falha ao carregar arquivos", - "pageTitle": "Meus Arquivos", - "breadcrumb": "Meus Arquivos" - }, - "searchBar": { - "placeholder": "Buscar arquivos...", - "results": "Encontrados {{filtered}} de {{total}} arquivos" - }, "forgotPassword": { "emailLabel": "Endereรงo de Email", "emailPlaceholder": "Digite seu email", @@ -303,6 +116,20 @@ "resetInstructions": "Instruรงรตes de redefiniรงรฃo enviadas para seu email", "pageTitle": "Esqueceu a Senha" }, + "generateShareLink": { + "generateTitle": "Gerar Link de Compartilhamento", + "updateTitle": "Atualizar Link de Compartilhamento", + "generateDescription": "Gere um link para compartilhar seus arquivos", + "updateDescription": "Atualize o alias deste link de compartilhamento", + "aliasPlaceholder": "Digite o alias", + "linkReady": "Seu link de compartilhamento estรก pronto:", + "generateButton": "Gerar Link", + "updateButton": "Atualizar Link", + "copyButton": "Copiar Link", + "success": "Link gerado com sucesso", + "error": "Erro ao gerar link", + "copied": "Link copiado para a รกrea de transferรชncia" + }, "home": { "description": "A alternativa open-source ao WeTransfer. Compartilhe arquivos com seguranรงa, sem rastreamento ou limitaรงรตes.", "documentation": "Documentaรงรฃo", @@ -314,6 +141,46 @@ }, "pageTitle": "Inรญcio" }, + "login": { + "welcome": "Bem-vindo ao", + "signInToContinue": "Entre para continuar", + "emailLabel": "Endereรงo de E-mail", + "emailPlaceholder": "Digite seu e-mail", + "passwordLabel": "Senha", + "passwordPlaceholder": "Digite sua senha", + "signIn": "Entrar", + "signingIn": "Entrando...", + "forgotPassword": "Esqueceu a senha?", + "pageTitle": "Entrar" + }, + "logo": { + "labels": { + "appLogo": "Logo do Aplicativo" + }, + "buttons": { + "upload": "Enviar Logo", + "remove": "Remover Logo" + }, + "messages": { + "uploadSuccess": "Logo enviado com sucesso", + "removeSuccess": "Logo removido com sucesso" + }, + "errors": { + "uploadFailed": "Falha ao enviar logo", + "removeFailed": "Falha ao remover logo" + } + }, + "navbar": { + "logoAlt": "Logo do Aplicativo", + "profileMenu": "Menu do Perfil", + "profile": "Perfil", + "settings": "Configuraรงรตes", + "usersManagement": "Gerenciar Usuรกrios", + "logout": "Sair" + }, + "navigation": { + "dashboard": "Painel" + }, "profile": { "password": { "title": "Alterar Senha", @@ -356,6 +223,43 @@ }, "pageTitle": "Perfil" }, + "quickAccess": { + "files": { + "title": "Meus Arquivos", + "description": "Acesse e gerencie seus arquivos enviados" + }, + "shares": { + "title": "Meus Compartilhamentos", + "description": "Visualize e gerencie seus arquivos compartilhados" + } + }, + "recentFiles": { + "title": "Uploads Recentes", + "viewAll": "Ver Todos", + "uploadFile": "Enviar Arquivo", + "noFiles": "Nenhum arquivo enviado ainda" + }, + "recentShares": { + "title": "Compartilhamentos Recentes", + "viewAll": "Ver Todos", + "createShare": "Criar Compartilhamento", + "noShares": "Nenhum compartilhamento criado ainda", + "createFirst": "Criar seu primeiro compartilhamento" + }, + "recipientSelector": { + "emailPlaceholder": "Digite o e-mail do destinatรกrio", + "add": "Adicionar", + "recipients": "Destinatรกrios ({{count}})", + "notifyAll": "Notificar Todos", + "noRecipients": "Nenhum destinatรกrio adicionado", + "addSuccess": "Destinatรกrio adicionado com sucesso", + "addError": "Falha ao adicionar destinatรกrio", + "removeSuccess": "Destinatรกrio removido com sucesso", + "removeError": "Falha ao remover destinatรกrio", + "sendingNotifications": "Enviando notificaรงรตes...", + "notifySuccess": "Destinatรกrios notificados com sucesso", + "notifyError": "Falha ao notificar destinatรกrios" + }, "resetPassword": { "pageTitle": "Redefinir Senha", "header": { @@ -379,6 +283,10 @@ "invalidToken": "Token de redefiniรงรฃo invรกlido ou ausente" } }, + "searchBar": { + "placeholder": "Buscar arquivos...", + "results": "Encontrados {{filtered}} de {{total}} arquivos" + }, "settings": { "groups": { "defaultDescription": "Opรงรตes de configuraรงรฃo", @@ -513,6 +421,61 @@ }, "pageTitle": "Compartilhamento" }, + "shareActions": { + "deleteTitle": "Excluir Compartilhamento", + "deleteConfirmation": "Tem certeza que deseja excluir este compartilhamento? Esta aรงรฃo nรฃo pode ser desfeita.", + "editTitle": "Editar Compartilhamento", + "nameLabel": "Nome do Compartilhamento", + "expirationLabel": "Data de Expiraรงรฃo", + "expirationPlaceholder": "DD/MM/AAAA HH:MM", + "maxViewsLabel": "Mรกximo de Visualizaรงรตes", + "maxViewsPlaceholder": "Deixe vazio para ilimitado", + "passwordProtection": "Protegido por Senha", + "passwordLabel": "Senha", + "passwordPlaceholder": "Digite a senha", + "newPasswordLabel": "Nova Senha (deixe vazio para manter a atual)", + "newPasswordPlaceholder": "Digite a nova senha", + "manageFilesTitle": "Gerenciar Arquivos", + "manageRecipientsTitle": "Gerenciar Destinatรกrios", + "editSuccess": "Compartilhamento atualizado com sucesso", + "editError": "Falha ao atualizar compartilhamento" + }, + "shareDetails": { + "title": "Detalhes do Compartilhamento", + "subtitle": "Informaรงรตes detalhadas sobre este compartilhamento", + "basicInfo": "Informaรงรตes Bรกsicas", + "name": "Nome", + "untitled": "Compartilhamento sem tรญtulo", + "views": "Visualizaรงรตes", + "dates": "Datas", + "created": "Criado em: {{date}}", + "expires": "Expira em: {{date}}", + "never": "Nunca", + "security": "Seguranรงa", + "passwordProtected": "Protegido por Senha", + "publicAccess": "Acesso Pรบblico", + "maxViews": "Mรกximo de Visualizaรงรตes:", + "files": "Arquivos", + "recipients": "Destinatรกrios", + "notAvailable": "N/A", + "invalidDate": "Data invรกlida", + "loadError": "Falha ao carregar detalhes do compartilhamento" + }, + "shareManager": { + "deleteSuccess": "Compartilhamento excluรญdo com sucesso", + "deleteError": "Falha ao excluir compartilhamento", + "updateSuccess": "Compartilhamento atualizado com sucesso", + "updateError": "Falha ao atualizar compartilhamento", + "filesUpdateSuccess": "Arquivos atualizados com sucesso", + "filesUpdateError": "Falha ao atualizar arquivos", + "recipientsUpdateSuccess": "Destinatรกrios atualizados com sucesso", + "recipientsUpdateError": "Falha ao atualizar destinatรกrios", + "linkGenerateSuccess": "Link de compartilhamento gerado com sucesso", + "linkGenerateError": "Falha ao gerar link de compartilhamento", + "notifyLoading": "Enviando notificaรงรตes...", + "notifySuccess": "Destinatรกrios notificados com sucesso", + "notifyError": "Falha ao notificar destinatรกrios" + }, "shares": { "errors": { "loadFailed": "Falha ao carregar compartilhamentos", @@ -539,6 +502,64 @@ }, "pageTitle": "Compartilhamentos" }, + "sharesTable": { + "ariaLabel": "Tabela de compartilhamentos", + "never": "Nunca", + "columns": { + "name": "NOME", + "createdAt": "CRIADO EM", + "expiresAt": "EXPIRA EM", + "status": "STATUS", + "security": "SEGURANร‡A", + "files": "ARQUIVOS", + "recipients": "DESTINATรRIOS", + "actions": "Aร‡ร•ES" + }, + "status": { + "neverExpires": "Nunca Expira", + "active": "Ativo", + "expired": "Expirado" + }, + "security": { + "protected": "Protegido", + "public": "Pรบblico" + }, + "filesCount": "arquivos", + "recipientsCount": "destinatรกrios", + "actions": { + "menu": "Menu de aรงรตes do compartilhamento", + "edit": "Editar", + "manageFiles": "Gerenciar Arquivos", + "manageRecipients": "Gerenciar Destinatรกrios", + "viewDetails": "Ver Detalhes", + "generateLink": "Gerar Link", + "editLink": "Editar Link", + "copyLink": "Copiar Link", + "notifyRecipients": "Notificar Destinatรกrios", + "delete": "Excluir" + } + }, + "storageUsage": { + "title": "Uso de Armazenamento", + "ariaLabel": "Barra de progresso do uso de armazenamento", + "used": "usado", + "available": "disponรญvel" + }, + "theme": { + "toggle": "Alternar tema", + "light": "Claro", + "dark": "Escuro", + "system": "Sistema" + }, + "uploadFile": { + "title": "Enviar Arquivo", + "selectFile": "Clique para selecionar um arquivo", + "preview": "Prรฉ-visualizaรงรฃo", + "uploadProgress": "Progresso do upload", + "upload": "Enviar", + "success": "Arquivo enviado com sucesso", + "error": "Falha ao enviar arquivo" + }, "users": { "modes": { "create": "criar", @@ -608,29 +629,16 @@ "userr": "Usuรกrio" } }, - "logo": { - "labels": { - "appLogo": "Logo do Aplicativo" - }, - "buttons": { - "upload": "Enviar Logo", - "remove": "Remover Logo" - }, - "messages": { - "uploadSuccess": "Logo enviado com sucesso", - "removeSuccess": "Logo removido com sucesso" - }, - "errors": { - "uploadFailed": "Falha ao enviar logo", - "removeFailed": "Falha ao remover logo" - } - }, - "navbar": { - "logoAlt": "Logo do Aplicativo", - "profileMenu": "Menu do Perfil", - "profile": "Perfil", - "settings": "Configuraรงรตes", - "usersManagement": "Gerenciar Usuรกrios", - "logout": "Sair" + "validation": { + "invalidEmail": "Endereรงo de email invรกlido", + "passwordMinLength": "A senha deve ter pelo menos 6 caracteres", + "firstNameRequired": "Nome รฉ obrigatรณrio", + "lastNameRequired": "Sobrenome รฉ obrigatรณrio", + "usernameLength": "Nome de usuรกrio deve ter pelo menos 3 caracteres", + "usernameSpaces": "Nome de usuรกrio nรฃo pode conter espaรงos", + "passwordLength": "A senha deve ter pelo menos 8 caracteres", + "passwordsMatch": "As senhas nรฃo coincidem", + "emailRequired": "Email รฉ obrigatรณrio", + "passwordRequired": "Senha รฉ obrigatรณria" } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/ru-RU.json b/apps/web/messages/ru-RU.json similarity index 97% rename from apps/web/src/locales/ru-RU.json rename to apps/web/messages/ru-RU.json index 767dfbe..ca62fdd 100644 --- a/apps/web/src/locales/ru-RU.json +++ b/apps/web/messages/ru-RU.json @@ -1,58 +1,4 @@ { - "login": { - "welcome": "ะ”ะพะฑั€ะพ ะฟะพะถะฐะปะพะฒะฐั‚ัŒ", - "signInToContinue": "ะ’ะพะนะดะธั‚ะต, ั‡ั‚ะพะฑั‹ ะฟั€ะพะดะพะปะถะธั‚ัŒ", - "emailLabel": "ะะดั€ะตั ัะปะตะบั‚ั€ะพะฝะฝะพะน ะฟะพั‡ั‚ั‹", - "emailPlaceholder": "ะ’ะฒะตะดะธั‚ะต ะฒะฐัˆัƒ ัะปะตะบั‚ั€ะพะฝะฝัƒัŽ ะฟะพั‡ั‚ัƒ", - "passwordLabel": "ะŸะฐั€ะพะปัŒ", - "passwordPlaceholder": "ะ’ะฒะตะดะธั‚ะต ะฒะฐัˆ ะฟะฐั€ะพะปัŒ", - "signIn": "ะ’ะพะนั‚ะธ", - "signingIn": "ะ’ั…ะพะด...", - "forgotPassword": "ะ—ะฐะฑั‹ะปะธ ะฟะฐั€ะพะปัŒ?", - "pageTitle": "ะ’ั…ะพะด" - }, - "errors": { - "invalidCredentials": "ะะตะฒะตั€ะฝั‹ะน ะฐะดั€ะตั ัะปะตะบั‚ั€ะพะฝะฝะพะน ะฟะพั‡ั‚ั‹ ะธะปะธ ะฟะฐั€ะพะปัŒ", - "userNotFound": "ะŸะพะปัŒะทะพะฒะฐั‚ะตะปัŒ ะฝะต ะฝะฐะนะดะตะฝ", - "accountLocked": "ะะบะบะฐัƒะฝั‚ ะทะฐะฑะปะพะบะธั€ะพะฒะฐะฝ. ะŸะพะถะฐะปัƒะนัั‚ะฐ, ะฟะพะฟั€ะพะฑัƒะนั‚ะต ะฟะพะทะถะต", - "unexpectedError": "ะŸั€ะพะธะทะพัˆะปะฐ ะฝะตะฟั€ะตะดะฒะธะดะตะฝะฝะฐั ะพัˆะธะฑะบะฐ. ะŸะพะถะฐะปัƒะนัั‚ะฐ, ะฟะพะฟั€ะพะฑัƒะนั‚ะต ะตั‰ะต ั€ะฐะท" - }, - "validation": { - "invalidEmail": "ะะตะฒะตั€ะฝั‹ะน ะฐะดั€ะตั ัะปะตะบั‚ั€ะพะฝะฝะพะน ะฟะพั‡ั‚ั‹", - "passwordMinLength": "ะŸะฐั€ะพะปัŒ ะดะพะปะถะตะฝ ัะพะดะตั€ะถะฐั‚ัŒ ะฝะต ะผะตะฝะตะต 6 ัะธะผะฒะพะปะพะฒ", - "firstNameRequired": "ะ˜ะผั ะพะฑัะทะฐั‚ะตะปัŒะฝะพ", - "lastNameRequired": "ะคะฐะผะธะปะธั ะพะฑัะทะฐั‚ะตะปัŒะฝะฐ", - "usernameLength": "ะ˜ะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั ะดะพะปะถะฝะพ ัะพะดะตั€ะถะฐั‚ัŒ ะฝะต ะผะตะฝะตะต 3 ัะธะผะฒะพะปะพะฒ", - "usernameSpaces": "ะ˜ะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั ะฝะต ะผะพะถะตั‚ ัะพะดะตั€ะถะฐั‚ัŒ ะฟั€ะพะฑะตะปะพะฒ", - "passwordLength": "ะŸะฐั€ะพะปัŒ ะดะพะปะถะตะฝ ัะพะดะตั€ะถะฐั‚ัŒ ะฝะต ะผะตะฝะตะต 8 ัะธะผะฒะพะปะพะฒ", - "passwordsMatch": "ะŸะฐั€ะพะปะธ ะฝะต ัะพะฒะฟะฐะดะฐัŽั‚" - }, - "fileSelector": { - "availableFiles": "ะ”ะพัั‚ัƒะฟะฝั‹ะต ั„ะฐะนะปั‹ ({{count}})", - "shareFiles": "ะŸะพะดะตะปะธั‚ัŒัั ั„ะฐะนะปะฐะผะธ ({{count}})", - "searchPlaceholder": "ะŸะพะธัะบ ั„ะฐะนะปะพะฒ...", - "noMatchingFiles": "ะะตั‚ ั„ะฐะนะปะพะฒ, ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒัŽั‰ะธั… ะทะฐะฟั€ะพััƒ", - "noAvailableFiles": "ะะตั‚ ะดะพัั‚ัƒะฟะฝั‹ั… ั„ะฐะนะปะพะฒ", - "noFilesInShare": "ะะตั‚ ั„ะฐะนะปะพะฒ ะดะปั ัะพะฒะผะตัั‚ะฝะพะณะพ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั", - "saveChanges": "ะกะพั…ั€ะฐะฝะธั‚ัŒ ะธะทะผะตะฝะตะฝะธั" - }, - "recipientSelector": { - "emailPlaceholder": "ะ’ะฒะตะดะธั‚ะต ัะปะตะบั‚ั€ะพะฝะฝัƒัŽ ะฟะพั‡ั‚ัƒ ะฟะพะปัƒั‡ะฐั‚ะตะปั", - "add": "ะ”ะพะฑะฐะฒะธั‚ัŒ", - "recipients": "ะŸะพะปัƒั‡ะฐั‚ะตะปะธ ({{count}})", - "notifyAll": "ะฃะฒะตะดะพะผะธั‚ัŒ ะฒัะตั…", - "noRecipients": "ะŸะพะบะฐ ะฝะตั‚ ะดะพะฑะฐะฒะปะตะฝะฝั‹ั… ะฟะพะปัƒั‡ะฐั‚ะตะปะตะน", - "addSuccess": "ะŸะพะปัƒั‡ะฐั‚ะตะปัŒ ัƒัะฟะตัˆะฝะพ ะดะพะฑะฐะฒะปะตะฝ", - "addError": "ะะต ัƒะดะฐะปะพััŒ ะดะพะฑะฐะฒะธั‚ัŒ ะฟะพะปัƒั‡ะฐั‚ะตะปั", - "removeSuccess": "ะŸะพะปัƒั‡ะฐั‚ะตะปัŒ ัƒัะฟะตัˆะฝะพ ัƒะดะฐะปั‘ะฝ", - "removeError": "ะะต ัƒะดะฐะปะพััŒ ัƒะดะฐะปะธั‚ัŒ ะฟะพะปัƒั‡ะฐั‚ะตะปั", - "sendingNotifications": "ะžั‚ะฟั€ะฐะฒะบะฐ ัƒะฒะตะดะพะผะปะตะฝะธะน...", - "notifySuccess": "ะŸะพะปัƒั‡ะฐั‚ะตะปะธ ัƒัะฟะตัˆะฝะพ ัƒะฒะตะดะพะผะปะตะฝั‹", - "notifyError": "ะะต ัƒะดะฐะปะพััŒ ัƒะฒะตะดะพะผะธั‚ัŒ ะฟะพะปัƒั‡ะฐั‚ะตะปะตะน" - }, - "navigation": { - "dashboard": "ะŸะฐะฝะตะปัŒ ัƒะฟั€ะฐะฒะปะตะฝะธั" - }, "common": { "loading": "ะ—ะฐะณั€ัƒะทะบะฐ, ะฟะพะถะฐะปัƒะนัั‚ะฐ, ะฟะพะดะพะถะดะธั‚ะต...", "cancel": "ะžั‚ะผะตะฝะฐ", @@ -78,6 +24,22 @@ "success": "ะžะฑั‰ะธะน ะดะพัั‚ัƒะฟ ัƒัะฟะตัˆะฝะพ ัะพะทะดะฐะฝ", "error": "ะะต ัƒะดะฐะปะพััŒ ัะพะทะดะฐั‚ัŒ ะพะฑั‰ะธะน ะดะพัั‚ัƒะฟ" }, + "dashboard": { + "loadError": "ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ะดะฐะฝะฝั‹ั… ะฟะฐะฝะตะปะธ ัƒะฟั€ะฐะฒะปะตะฝะธั", + "linkCopied": "ะกัั‹ะปะบะฐ ัะบะพะฟะธั€ะพะฒะฐะฝะฐ ะฒ ะฑัƒั„ะตั€ ะพะฑะผะตะฝะฐ", + "pageTitle": "ะŸะฐะฝะตะปัŒ ัƒะฟั€ะฐะฒะปะตะฝะธั", + "breadcrumb": "ะŸะฐะฝะตะปัŒ ัƒะฟั€ะฐะฒะปะตะฝะธั" + }, + "emptyState": { + "noFiles": "ะคะฐะนะปั‹ ะตั‰ะต ะฝะต ะทะฐะณั€ัƒะถะตะฝั‹", + "uploadFile": "ะ—ะฐะณั€ัƒะทะธั‚ัŒ ั„ะฐะนะป" + }, + "errors": { + "invalidCredentials": "ะะตะฒะตั€ะฝั‹ะน ะฐะดั€ะตั ัะปะตะบั‚ั€ะพะฝะฝะพะน ะฟะพั‡ั‚ั‹ ะธะปะธ ะฟะฐั€ะพะปัŒ", + "userNotFound": "ะŸะพะปัŒะทะพะฒะฐั‚ะตะปัŒ ะฝะต ะฝะฐะนะดะตะฝ", + "accountLocked": "ะะบะบะฐัƒะฝั‚ ะทะฐะฑะปะพะบะธั€ะพะฒะฐะฝ. ะŸะพะถะฐะปัƒะนัั‚ะฐ, ะฟะพะฟั€ะพะฑัƒะนั‚ะต ะฟะพะทะถะต", + "unexpectedError": "ะŸั€ะพะธะทะพัˆะปะฐ ะฝะตะฟั€ะตะดะฒะธะดะตะฝะฝะฐั ะพัˆะธะฑะบะฐ. ะŸะพะถะฐะปัƒะนัั‚ะฐ, ะฟะพะฟั€ะพะฑัƒะนั‚ะต ะตั‰ะต ั€ะฐะท" + }, "fileActions": { "editFile": "ะ ะตะดะฐะบั‚ะธั€ะพะฒะฐั‚ัŒ ั„ะฐะนะป", "nameLabel": "ะ˜ะผั", @@ -86,9 +48,16 @@ "descriptionLabel": "ะžะฟะธัะฐะฝะธะต", "descriptionPlaceholder": "ะ’ะฒะตะดะธั‚ะต ะพะฟะธัะฐะฝะธะต ั„ะฐะนะปะฐ", "deleteFile": "ะฃะดะฐะปะธั‚ัŒ ั„ะฐะนะป", - "deleteConfirmation": "ะ’ั‹ ัƒะฒะตั€ะตะฝั‹, ั‡ั‚ะพ ั…ะพั‚ะธั‚ะต ัƒะดะฐะปะธั‚ัŒ \"{{fileName}}\"?", + "deleteConfirmation": "ะ’ั‹ ัƒะฒะตั€ะตะฝั‹, ั‡ั‚ะพ ั…ะพั‚ะธั‚ะต ัƒะดะฐะปะธั‚ัŒ ?", "deleteWarning": "ะญั‚ะพ ะดะตะนัั‚ะฒะธะต ะฝะตะพะฑั€ะฐั‚ะธะผะพ." }, + "fileManager": { + "downloadError": "ะžัˆะธะฑะบะฐ ัะบะฐั‡ะธะฒะฐะฝะธั ั„ะฐะนะปะฐ", + "updateSuccess": "ะคะฐะนะป ัƒัะฟะตัˆะฝะพ ะพะฑะฝะพะฒะปะตะฝ", + "updateError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ะพะฑะฝะพะฒะปะตะฝะธะธ ั„ะฐะนะปะฐ", + "deleteSuccess": "ะคะฐะนะป ัƒัะฟะตัˆะฝะพ ัƒะดะฐะปะตะฝ", + "deleteError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ัƒะดะฐะปะตะฝะธะธ ั„ะฐะนะปะฐ" + }, "filePreview": { "loading": "ะ—ะฐะณั€ัƒะทะบะฐ ะฟั€ะตะดะฟั€ะพัะผะพั‚ั€ะฐ...", "notAvailable": "ะŸั€ะตะดะฟั€ะพัะผะพั‚ั€ ะฝะตะดะพัั‚ัƒะฟะตะฝ", @@ -98,68 +67,21 @@ "loadError": "ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ะฟั€ะตะดะฟั€ะพัะผะพั‚ั€ะฐ", "downloadError": "ะžัˆะธะฑะบะฐ ัะบะฐั‡ะธะฒะฐะฝะธั ั„ะฐะนะปะฐ" }, - "generateShareLink": { - "generateTitle": "ะกะพะทะดะฐั‚ัŒ ััั‹ะปะบัƒ ะดะปั ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", - "updateTitle": "ะžะฑะฝะพะฒะธั‚ัŒ ััั‹ะปะบัƒ ะดะปั ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", - "generateDescription": "ะกะพะทะดะฐะนั‚ะต ััั‹ะปะบัƒ ะดะปั ะพะฑะผะตะฝะฐ ั„ะฐะนะปะฐะผะธ", - "updateDescription": "ะžะฑะฝะพะฒะธั‚ะต ะฟัะตะฒะดะพะฝะธะผ ะดะปั ัั‚ะพะน ััั‹ะปะบะธ", - "aliasPlaceholder": "ะ’ะฒะตะดะธั‚ะต ะฟัะตะฒะดะพะฝะธะผ", - "linkReady": "ะ’ะฐัˆะฐ ััั‹ะปะบะฐ ะณะพั‚ะพะฒะฐ:", - "generateButton": "ะกะพะทะดะฐั‚ัŒ ััั‹ะปะบัƒ", - "updateButton": "ะžะฑะฝะพะฒะธั‚ัŒ ััั‹ะปะบัƒ", - "copyButton": "ะกะบะพะฟะธั€ะพะฒะฐั‚ัŒ ััั‹ะปะบัƒ", - "success": "ะกัั‹ะปะบะฐ ัƒัะฟะตัˆะฝะพ ัะพะทะดะฐะฝะฐ", - "error": "ะะต ัƒะดะฐะปะพััŒ ัะพะทะดะฐั‚ัŒ ััั‹ะปะบัƒ", - "copied": "ะกัั‹ะปะบะฐ ัะบะพะฟะธั€ะพะฒะฐะฝะฐ ะฒ ะฑัƒั„ะตั€ ะพะฑะผะตะฝะฐ" + "fileSelector": { + "availableFiles": "ะ”ะพัั‚ัƒะฟะฝั‹ะต ั„ะฐะนะปั‹ ({{count}})", + "shareFiles": "ะŸะพะดะตะปะธั‚ัŒัั ั„ะฐะนะปะฐะผะธ ({{count}})", + "searchPlaceholder": "ะŸะพะธัะบ ั„ะฐะนะปะพะฒ...", + "noMatchingFiles": "ะะตั‚ ั„ะฐะนะปะพะฒ, ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒัŽั‰ะธั… ะทะฐะฟั€ะพััƒ", + "noAvailableFiles": "ะะตั‚ ะดะพัั‚ัƒะฟะฝั‹ั… ั„ะฐะนะปะพะฒ", + "noFilesInShare": "ะะตั‚ ั„ะฐะนะปะพะฒ ะดะปั ัะพะฒะผะตัั‚ะฝะพะณะพ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั", + "saveChanges": "ะกะพั…ั€ะฐะฝะธั‚ัŒ ะธะทะผะตะฝะตะฝะธั" }, - "shareActions": { - "deleteTitle": "ะฃะดะฐะปะธั‚ัŒ ะพะฑั‰ะธะน ะดะพัั‚ัƒะฟ", - "deleteConfirmation": "ะ’ั‹ ัƒะฒะตั€ะตะฝั‹, ั‡ั‚ะพ ั…ะพั‚ะธั‚ะต ัƒะดะฐะปะธั‚ัŒ ัั‚ะพั‚ ะพะฑั‰ะธะน ะดะพัั‚ัƒะฟ? ะญั‚ะพ ะดะตะนัั‚ะฒะธะต ะฝะตะพะฑั€ะฐั‚ะธะผะพ.", - "editTitle": "ะ ะตะดะฐะบั‚ะธั€ะพะฒะฐั‚ัŒ ะพะฑั‰ะธะน ะดะพัั‚ัƒะฟ", - "nameLabel": "ะะฐะทะฒะฐะฝะธะต ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", - "expirationLabel": "ะ”ะฐั‚ะฐ ะธัั‚ะตั‡ะตะฝะธั", - "expirationPlaceholder": "MM/DD/YYYY ะงะง:ะœะœ", - "maxViewsLabel": "ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะฟั€ะพัะผะพั‚ั€ะพะฒ", - "maxViewsPlaceholder": "ะžัั‚ะฐะฒัŒั‚ะต ะฟัƒัั‚ั‹ะผ ะดะปั ะฝะตะพะณั€ะฐะฝะธั‡ะตะฝะฝะพะณะพ ะดะพัั‚ัƒะฟะฐ", - "passwordProtection": "ะ—ะฐั‰ะธั‰ะตะฝะพ ะฟะฐั€ะพะปะตะผ", - "passwordLabel": "ะŸะฐั€ะพะปัŒ", - "passwordPlaceholder": "ะ’ะฒะตะดะธั‚ะต ะฟะฐั€ะพะปัŒ", - "newPasswordLabel": "ะะพะฒั‹ะน ะฟะฐั€ะพะปัŒ (ะพัั‚ะฐะฒัŒั‚ะต ะฟัƒัั‚ั‹ะผ, ั‡ั‚ะพะฑั‹ ัะพั…ั€ะฐะฝะธั‚ัŒ ั‚ะตะบัƒั‰ะธะน)", - "newPasswordPlaceholder": "ะ’ะฒะตะดะธั‚ะต ะฝะพะฒั‹ะน ะฟะฐั€ะพะปัŒ", - "manageFilesTitle": "ะฃะฟั€ะฐะฒะปะตะฝะธะต ั„ะฐะนะปะฐะผะธ", - "manageRecipientsTitle": "ะฃะฟั€ะฐะฒะปะตะฝะธะต ะฟะพะปัƒั‡ะฐั‚ะตะปัะผะธ", - "editSuccess": "ะžะฑั‰ะธะน ะดะพัั‚ัƒะฟ ัƒัะฟะตัˆะฝะพ ะพะฑะฝะพะฒะปั‘ะฝ", - "editError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ะพะฑะฝะพะฒะปะตะฝะธะธ ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ" - }, - "shareDetails": { - "title": "ะ”ะตั‚ะฐะปะธ ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", - "subtitle": "ะŸะพะดั€ะพะฑะฝะฐั ะธะฝั„ะพั€ะผะฐั†ะธั ะพะฑ ัั‚ะพะผ ะพะฑั‰ะตะผ ะดะพัั‚ัƒะฟะต", - "basicInfo": "ะžัะฝะพะฒะฝะฐั ะธะฝั„ะพั€ะผะฐั†ะธั", - "name": "ะะฐะทะฒะฐะฝะธะต", - "untitled": "ะ‘ะตะท ะฝะฐะทะฒะฐะฝะธั", - "views": "ะŸั€ะพัะผะพั‚ั€ั‹", - "dates": "ะ”ะฐั‚ั‹", - "created": "ะกะพะทะดะฐะฝะพ", - "expires": "ะ˜ัั‚ะตะบะฐะตั‚", - "never": "ะะธะบะพะณะดะฐ", - "security": "ะ‘ะตะทะพะฟะฐัะฝะพัั‚ัŒ", - "passwordProtected": "ะ—ะฐั‰ะธั‰ะตะฝะพ ะฟะฐั€ะพะปะตะผ", - "publicAccess": "ะŸัƒะฑะปะธั‡ะฝั‹ะน ะดะพัั‚ัƒะฟ", - "maxViews": "ะœะฐะบัะธะผัƒะผ ะฟั€ะพัะผะพั‚ั€ะพะฒ: {{count}}", - "files": "ะคะฐะนะปั‹ ({{count}})", - "recipients": "ะŸะพะปัƒั‡ะฐั‚ะตะปะธ ({{count}})", - "notAvailable": "ะ/ะ”", - "invalidDate": "ะะตะฒะตั€ะฝะฐั ะดะฐั‚ะฐ", - "loadError": "ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ะดะตั‚ะฐะปะตะน ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ" - }, - "uploadFile": { - "title": "ะ—ะฐะณั€ัƒะทะธั‚ัŒ ั„ะฐะนะป", - "selectFile": "ะะฐะถะผะธั‚ะต, ั‡ั‚ะพะฑั‹ ะฒั‹ะฑั€ะฐั‚ัŒ ั„ะฐะนะป", - "preview": "ะŸั€ะตะดะฟั€ะพัะผะพั‚ั€", - "uploadProgress": "ะŸั€ะพะณั€ะตัั ะทะฐะณั€ัƒะทะบะธ", - "upload": "ะ—ะฐะณั€ัƒะทะธั‚ัŒ", - "success": "ะคะฐะนะป ัƒัะฟะตัˆะฝะพ ะทะฐะณั€ัƒะถะตะฝ", - "error": "ะะต ัƒะดะฐะปะพััŒ ะทะฐะณั€ัƒะทะธั‚ัŒ ั„ะฐะนะป" + "files": { + "title": "ะ’ัะต ั„ะฐะนะปั‹", + "uploadFile": "ะ—ะฐะณั€ัƒะทะธั‚ัŒ ั„ะฐะนะป", + "loadError": "ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ั„ะฐะนะปะพะฒ", + "pageTitle": "ะœะพะธ ั„ะฐะนะปั‹", + "breadcrumb": "ะœะพะธ ั„ะฐะนะปั‹" }, "filesTable": { "ariaLabel": "ะขะฐะฑะปะธั†ะฐ ั„ะฐะนะปะพะฒ", @@ -179,119 +101,10 @@ "delete": "ะฃะดะฐะปะธั‚ัŒ" } }, - "sharesTable": { - "ariaLabel": "ะขะฐะฑะปะธั†ะฐ ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", - "never": "ะะธะบะพะณะดะฐ", - "columns": { - "name": "ะ˜ะœะฏ", - "createdAt": "ะกะžะ—ะ”ะะะž", - "expiresAt": "ะ˜ะกะขะ•ะšะะ•ะข", - "status": "ะกะขะะขะฃะก", - "security": "ะ‘ะ•ะ—ะžะŸะะกะะžะกะขะฌ", - "files": "ะคะะ™ะ›ะซ", - "recipients": "ะŸะžะ›ะฃะงะะขะ•ะ›ะ˜", - "actions": "ะ”ะ•ะ™ะกะขะ’ะ˜ะฏ" - }, - "status": { - "neverExpires": "ะะต ะธัั‚ะตะบะฐะตั‚", - "active": "ะะบั‚ะธะฒะฝะพ", - "expired": "ะ˜ัั‚ะตะบะปะพ" - }, - "security": { - "protected": "ะ—ะฐั‰ะธั‰ะตะฝะพ", - "public": "ะŸัƒะฑะปะธั‡ะฝะพ" - }, - "filesCount": "{{count}} ั„ะฐะนะปะพะฒ", - "recipientsCount": "{{count}} ะฟะพะปัƒั‡ะฐั‚ะตะปะตะน", - "actions": { - "menu": "ะœะตะฝัŽ ะดะตะนัั‚ะฒะธะน ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", - "edit": "ะ ะตะดะฐะบั‚ะธั€ะพะฒะฐั‚ัŒ", - "manageFiles": "ะฃะฟั€ะฐะฒะปะตะฝะธะต ั„ะฐะนะปะฐะผะธ", - "manageRecipients": "ะฃะฟั€ะฐะฒะปะตะฝะธะต ะฟะพะปัƒั‡ะฐั‚ะตะปัะผะธ", - "viewDetails": "ะŸั€ะพัะผะพั‚ั€ะตั‚ัŒ ะดะตั‚ะฐะปะธ", - "generateLink": "ะกะพะทะดะฐั‚ัŒ ััั‹ะปะบัƒ", - "editLink": "ะ ะตะดะฐะบั‚ะธั€ะพะฒะฐั‚ัŒ ััั‹ะปะบัƒ", - "copyLink": "ะกะบะพะฟะธั€ะพะฒะฐั‚ัŒ ััั‹ะปะบัƒ", - "notifyRecipients": "ะฃะฒะตะดะพะผะธั‚ัŒ ะฟะพะปัƒั‡ะฐั‚ะตะปะตะน", - "delete": "ะฃะดะฐะปะธั‚ัŒ" - } - }, "footer": { "poweredBy": "ะŸั€ะธ ะฟะพะดะดะตั€ะถะบะต", "kyanHomepage": "ะ”ะพะผะฐัˆะฝัั ัั‚ั€ะฐะฝะธั†ะฐ Kyantech" }, - "fileManager": { - "downloadError": "ะžัˆะธะฑะบะฐ ัะบะฐั‡ะธะฒะฐะฝะธั ั„ะฐะนะปะฐ", - "updateSuccess": "ะคะฐะนะป ัƒัะฟะตัˆะฝะพ ะพะฑะฝะพะฒะปะตะฝ", - "updateError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ะพะฑะฝะพะฒะปะตะฝะธะธ ั„ะฐะนะปะฐ", - "deleteSuccess": "ะคะฐะนะป ัƒัะฟะตัˆะฝะพ ัƒะดะฐะปะตะฝ", - "deleteError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ัƒะดะฐะปะตะฝะธะธ ั„ะฐะนะปะฐ" - }, - "shareManager": { - "deleteSuccess": "ะžะฑั‰ะธะน ะดะพัั‚ัƒะฟ ัƒัะฟะตัˆะฝะพ ัƒะดะฐะปะตะฝ", - "deleteError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ัƒะดะฐะปะตะฝะธะธ ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", - "updateSuccess": "ะžะฑั‰ะธะน ะดะพัั‚ัƒะฟ ัƒัะฟะตัˆะฝะพ ะพะฑะฝะพะฒะปะตะฝ", - "updateError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ะพะฑะฝะพะฒะปะตะฝะธะธ ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", - "filesUpdateSuccess": "ะคะฐะนะปั‹ ัƒัะฟะตัˆะฝะพ ะพะฑะฝะพะฒะปะตะฝั‹", - "filesUpdateError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ะพะฑะฝะพะฒะปะตะฝะธะธ ั„ะฐะนะปะพะฒ", - "recipientsUpdateSuccess": "ะŸะพะปัƒั‡ะฐั‚ะตะปะธ ัƒัะฟะตัˆะฝะพ ะพะฑะฝะพะฒะปะตะฝั‹", - "recipientsUpdateError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ะพะฑะฝะพะฒะปะตะฝะธะธ ะฟะพะปัƒั‡ะฐั‚ะตะปะตะน", - "linkGenerateSuccess": "ะกัั‹ะปะบะฐ ะดะปั ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ ัƒัะฟะตัˆะฝะพ ัะพะทะดะฐะฝะฐ", - "linkGenerateError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ัะพะทะดะฐะฝะธะธ ััั‹ะปะบะธ ะดะปั ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", - "notifyLoading": "ะžั‚ะฟั€ะฐะฒะบะฐ ัƒะฒะตะดะพะผะปะตะฝะธะน...", - "notifySuccess": "ะŸะพะปัƒั‡ะฐั‚ะตะปะธ ัƒัะฟะตัˆะฝะพ ัƒะฒะตะดะพะผะปะตะฝั‹", - "notifyError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ัƒะฒะตะดะพะผะปะตะฝะธะธ ะฟะพะปัƒั‡ะฐั‚ะตะปะตะน" - }, - "quickAccess": { - "files": { - "title": "ะœะพะธ ั„ะฐะนะปั‹", - "description": "ะ”ะพัั‚ัƒะฟ ะธ ัƒะฟั€ะฐะฒะปะตะฝะธะต ะทะฐะณั€ัƒะถะตะฝะฝั‹ะผะธ ั„ะฐะนะปะฐะผะธ" - }, - "shares": { - "title": "ะœะพะธ ะพะฑั‰ะธะต ะดะพัั‚ัƒะฟั‹", - "description": "ะŸั€ะพัะผะพั‚ั€ ะธ ัƒะฟั€ะฐะฒะปะตะฝะธะต ั„ะฐะนะปะฐะผะธ ะดะปั ัะพะฒะผะตัั‚ะฝะพะณะพ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั" - } - }, - "recentFiles": { - "title": "ะŸะพัะปะตะดะฝะธะต ะทะฐะณั€ัƒะทะบะธ", - "viewAll": "ะŸะพะบะฐะทะฐั‚ัŒ ะฒัะต", - "uploadFile": "ะ—ะฐะณั€ัƒะทะธั‚ัŒ ั„ะฐะนะป", - "noFiles": "ะคะฐะนะปั‹ ะตั‰ะต ะฝะต ะทะฐะณั€ัƒะถะตะฝั‹" - }, - "recentShares": { - "title": "ะŸะพัะปะตะดะฝะธะต ะพะฑั‰ะธะต ะดะพัั‚ัƒะฟั‹", - "viewAll": "ะŸะพะบะฐะทะฐั‚ัŒ ะฒัะต", - "createShare": "ะกะพะทะดะฐั‚ัŒ ะพะฑั‰ะธะน ะดะพัั‚ัƒะฟ", - "noShares": "ะžะฑั‰ะธะต ะดะพัั‚ัƒะฟั‹ ะตั‰ะต ะฝะต ัะพะทะดะฐะฝั‹", - "createFirst": "ะกะพะทะดะฐะนั‚ะต ะฒะฐัˆ ะฟะตั€ะฒั‹ะน ะพะฑั‰ะธะน ะดะพัั‚ัƒะฟ" - }, - "storageUsage": { - "title": "ะ˜ัะฟะพะปัŒะทะพะฒะฐะฝะธะต ั…ั€ะฐะฝะธะปะธั‰ะฐ", - "ariaLabel": "ะ˜ะฝะดะธะบะฐั‚ะพั€ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั ั…ั€ะฐะฝะธะปะธั‰ะฐ", - "used": "ะ˜ัะฟะพะปัŒะทะพะฒะฐะฝะพ: {{size}}", - "available": "ะ”ะพัั‚ัƒะฟะฝะพ: {{size}}" - }, - "dashboard": { - "loadError": "ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ะดะฐะฝะฝั‹ั… ะฟะฐะฝะตะปะธ ัƒะฟั€ะฐะฒะปะตะฝะธั", - "linkCopied": "ะกัั‹ะปะบะฐ ัะบะพะฟะธั€ะพะฒะฐะฝะฐ ะฒ ะฑัƒั„ะตั€ ะพะฑะผะตะฝะฐ", - "pageTitle": "ะŸะฐะฝะตะปัŒ ัƒะฟั€ะฐะฒะปะตะฝะธั", - "breadcrumb": "ะŸะฐะฝะตะปัŒ ัƒะฟั€ะฐะฒะปะตะฝะธั" - }, - "emptyState": { - "noFiles": "ะคะฐะนะปั‹ ะตั‰ะต ะฝะต ะทะฐะณั€ัƒะถะตะฝั‹", - "uploadFile": "ะ—ะฐะณั€ัƒะทะธั‚ัŒ ั„ะฐะนะป" - }, - "files": { - "title": "ะ’ัะต ั„ะฐะนะปั‹", - "uploadFile": "ะ—ะฐะณั€ัƒะทะธั‚ัŒ ั„ะฐะนะป", - "loadError": "ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ั„ะฐะนะปะพะฒ", - "pageTitle": "ะœะพะธ ั„ะฐะนะปั‹", - "breadcrumb": "ะœะพะธ ั„ะฐะนะปั‹" - }, - "searchBar": { - "placeholder": "ะŸะพะธัะบ ั„ะฐะนะปะพะฒ...", - "results": "ะะฐะนะดะตะฝะพ {{filtered}} ะธะท {{total}} ั„ะฐะนะปะพะฒ" - }, "forgotPassword": { "emailLabel": "ะะดั€ะตั ัะปะตะบั‚ั€ะพะฝะฝะพะน ะฟะพั‡ั‚ั‹", "emailPlaceholder": "ะ’ะฒะตะดะธั‚ะต ะฒะฐัˆ ะฐะดั€ะตั ัะปะตะบั‚ั€ะพะฝะฝะพะน ะฟะพั‡ั‚ั‹", @@ -303,6 +116,20 @@ "resetInstructions": "ะ˜ะฝัั‚ั€ัƒะบั†ะธะธ ะฟะพ ัะฑั€ะพััƒ ะพั‚ะฟั€ะฐะฒะปะตะฝั‹ ะฝะฐ ะฒะฐัˆัƒ ัะปะตะบั‚ั€ะพะฝะฝัƒัŽ ะฟะพั‡ั‚ัƒ", "pageTitle": "ะ—ะฐะฑั‹ะปะธ ะฟะฐั€ะพะปัŒ" }, + "generateShareLink": { + "generateTitle": "ะกะพะทะดะฐั‚ัŒ ััั‹ะปะบัƒ ะดะปั ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", + "updateTitle": "ะžะฑะฝะพะฒะธั‚ัŒ ััั‹ะปะบัƒ ะดะปั ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", + "generateDescription": "ะกะพะทะดะฐะนั‚ะต ััั‹ะปะบัƒ ะดะปั ะพะฑะผะตะฝะฐ ั„ะฐะนะปะฐะผะธ", + "updateDescription": "ะžะฑะฝะพะฒะธั‚ะต ะฟัะตะฒะดะพะฝะธะผ ะดะปั ัั‚ะพะน ััั‹ะปะบะธ", + "aliasPlaceholder": "ะ’ะฒะตะดะธั‚ะต ะฟัะตะฒะดะพะฝะธะผ", + "linkReady": "ะ’ะฐัˆะฐ ััั‹ะปะบะฐ ะณะพั‚ะพะฒะฐ:", + "generateButton": "ะกะพะทะดะฐั‚ัŒ ััั‹ะปะบัƒ", + "updateButton": "ะžะฑะฝะพะฒะธั‚ัŒ ััั‹ะปะบัƒ", + "copyButton": "ะกะบะพะฟะธั€ะพะฒะฐั‚ัŒ ััั‹ะปะบัƒ", + "success": "ะกัั‹ะปะบะฐ ัƒัะฟะตัˆะฝะพ ัะพะทะดะฐะฝะฐ", + "error": "ะะต ัƒะดะฐะปะพััŒ ัะพะทะดะฐั‚ัŒ ััั‹ะปะบัƒ", + "copied": "ะกัั‹ะปะบะฐ ัะบะพะฟะธั€ะพะฒะฐะฝะฐ ะฒ ะฑัƒั„ะตั€ ะพะฑะผะตะฝะฐ" + }, "home": { "description": "ะžั‚ะบั€ั‹ั‚ะฐั ะฐะปัŒั‚ะตั€ะฝะฐั‚ะธะฒะฐ WeTransfer. ะ”ะตะปะธั‚ะตััŒ ั„ะฐะนะปะฐะผะธ ะฑะตะทะพะฟะฐัะฝะพ, ะฑะตะท ะพั‚ัะปะตะถะธะฒะฐะฝะธั ะธ ะพะณั€ะฐะฝะธั‡ะตะฝะธะน.", "documentation": "ะ”ะพะบัƒะผะตะฝั‚ะฐั†ะธั", @@ -314,6 +141,46 @@ }, "pageTitle": "ะ“ะปะฐะฒะฝะฐั" }, + "login": { + "welcome": "ะ”ะพะฑั€ะพ ะฟะพะถะฐะปะพะฒะฐั‚ัŒ ะฒ", + "signInToContinue": "ะ’ะพะนะดะธั‚ะต, ั‡ั‚ะพะฑั‹ ะฟั€ะพะดะพะปะถะธั‚ัŒ", + "emailLabel": "ะะดั€ะตั ัะปะตะบั‚ั€ะพะฝะฝะพะน ะฟะพั‡ั‚ั‹", + "emailPlaceholder": "ะ’ะฒะตะดะธั‚ะต ะฒะฐัˆัƒ ัะปะตะบั‚ั€ะพะฝะฝัƒัŽ ะฟะพั‡ั‚ัƒ", + "passwordLabel": "ะŸะฐั€ะพะปัŒ", + "passwordPlaceholder": "ะ’ะฒะตะดะธั‚ะต ะฒะฐัˆ ะฟะฐั€ะพะปัŒ", + "signIn": "ะ’ะพะนั‚ะธ", + "signingIn": "ะ’ั…ะพะด...", + "forgotPassword": "ะ—ะฐะฑั‹ะปะธ ะฟะฐั€ะพะปัŒ?", + "pageTitle": "ะ’ั…ะพะด" + }, + "logo": { + "labels": { + "appLogo": "ะ›ะพะณะพั‚ะธะฟ ะฟั€ะธะปะพะถะตะฝะธั" + }, + "buttons": { + "upload": "ะ—ะฐะณั€ัƒะทะธั‚ัŒ ะปะพะณะพั‚ะธะฟ", + "remove": "ะฃะดะฐะปะธั‚ัŒ ะปะพะณะพั‚ะธะฟ" + }, + "messages": { + "uploadSuccess": "ะ›ะพะณะพั‚ะธะฟ ัƒัะฟะตัˆะฝะพ ะทะฐะณั€ัƒะถะตะฝ", + "removeSuccess": "ะ›ะพะณะพั‚ะธะฟ ัƒัะฟะตัˆะฝะพ ัƒะดะฐะปะตะฝ" + }, + "errors": { + "uploadFailed": "ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ะปะพะณะพั‚ะธะฟะฐ", + "removeFailed": "ะžัˆะธะฑะบะฐ ัƒะดะฐะปะตะฝะธั ะปะพะณะพั‚ะธะฟะฐ" + } + }, + "navbar": { + "logoAlt": "ะ›ะพะณะพั‚ะธะฟ ะฟั€ะธะปะพะถะตะฝะธั", + "profileMenu": "ะœะตะฝัŽ ะฟั€ะพั„ะธะปั", + "profile": "ะŸั€ะพั„ะธะปัŒ", + "settings": "ะะฐัั‚ั€ะพะนะบะธ", + "usersManagement": "ะฃะฟั€ะฐะฒะปะตะฝะธะต ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัะผะธ", + "logout": "ะ’ั‹ะนั‚ะธ" + }, + "navigation": { + "dashboard": "ะŸะฐะฝะตะปัŒ ัƒะฟั€ะฐะฒะปะตะฝะธั" + }, "profile": { "password": { "title": "ะ˜ะทะผะตะฝะธั‚ัŒ ะฟะฐั€ะพะปัŒ", @@ -356,6 +223,43 @@ }, "pageTitle": "ะŸั€ะพั„ะธะปัŒ" }, + "quickAccess": { + "files": { + "title": "ะœะพะธ ั„ะฐะนะปั‹", + "description": "ะ”ะพัั‚ัƒะฟ ะธ ัƒะฟั€ะฐะฒะปะตะฝะธะต ะทะฐะณั€ัƒะถะตะฝะฝั‹ะผะธ ั„ะฐะนะปะฐะผะธ" + }, + "shares": { + "title": "ะœะพะธ ะพะฑั‰ะธะต ะดะพัั‚ัƒะฟั‹", + "description": "ะŸั€ะพัะผะพั‚ั€ ะธ ัƒะฟั€ะฐะฒะปะตะฝะธะต ั„ะฐะนะปะฐะผะธ ะดะปั ัะพะฒะผะตัั‚ะฝะพะณะพ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั" + } + }, + "recentFiles": { + "title": "ะŸะพัะปะตะดะฝะธะต ะทะฐะณั€ัƒะทะบะธ", + "viewAll": "ะŸะพะบะฐะทะฐั‚ัŒ ะฒัะต", + "uploadFile": "ะ—ะฐะณั€ัƒะทะธั‚ัŒ ั„ะฐะนะป", + "noFiles": "ะคะฐะนะปั‹ ะตั‰ะต ะฝะต ะทะฐะณั€ัƒะถะตะฝั‹" + }, + "recentShares": { + "title": "ะŸะพัะปะตะดะฝะธะต ะพะฑั‰ะธะต ะดะพัั‚ัƒะฟั‹", + "viewAll": "ะŸะพะบะฐะทะฐั‚ัŒ ะฒัะต", + "createShare": "ะกะพะทะดะฐั‚ัŒ ะพะฑั‰ะธะน ะดะพัั‚ัƒะฟ", + "noShares": "ะžะฑั‰ะธะต ะดะพัั‚ัƒะฟั‹ ะตั‰ะต ะฝะต ัะพะทะดะฐะฝั‹", + "createFirst": "ะกะพะทะดะฐะนั‚ะต ะฒะฐัˆ ะฟะตั€ะฒั‹ะน ะพะฑั‰ะธะน ะดะพัั‚ัƒะฟ" + }, + "recipientSelector": { + "emailPlaceholder": "ะ’ะฒะตะดะธั‚ะต ัะปะตะบั‚ั€ะพะฝะฝัƒัŽ ะฟะพั‡ั‚ัƒ ะฟะพะปัƒั‡ะฐั‚ะตะปั", + "add": "ะ”ะพะฑะฐะฒะธั‚ัŒ", + "recipients": "ะŸะพะปัƒั‡ะฐั‚ะตะปะธ ({{count}})", + "notifyAll": "ะฃะฒะตะดะพะผะธั‚ัŒ ะฒัะตั…", + "noRecipients": "ะŸะพะบะฐ ะฝะตั‚ ะดะพะฑะฐะฒะปะตะฝะฝั‹ั… ะฟะพะปัƒั‡ะฐั‚ะตะปะตะน", + "addSuccess": "ะŸะพะปัƒั‡ะฐั‚ะตะปัŒ ัƒัะฟะตัˆะฝะพ ะดะพะฑะฐะฒะปะตะฝ", + "addError": "ะะต ัƒะดะฐะปะพััŒ ะดะพะฑะฐะฒะธั‚ัŒ ะฟะพะปัƒั‡ะฐั‚ะตะปั", + "removeSuccess": "ะŸะพะปัƒั‡ะฐั‚ะตะปัŒ ัƒัะฟะตัˆะฝะพ ัƒะดะฐะปั‘ะฝ", + "removeError": "ะะต ัƒะดะฐะปะพััŒ ัƒะดะฐะปะธั‚ัŒ ะฟะพะปัƒั‡ะฐั‚ะตะปั", + "sendingNotifications": "ะžั‚ะฟั€ะฐะฒะบะฐ ัƒะฒะตะดะพะผะปะตะฝะธะน...", + "notifySuccess": "ะŸะพะปัƒั‡ะฐั‚ะตะปะธ ัƒัะฟะตัˆะฝะพ ัƒะฒะตะดะพะผะปะตะฝั‹", + "notifyError": "ะะต ัƒะดะฐะปะพััŒ ัƒะฒะตะดะพะผะธั‚ัŒ ะฟะพะปัƒั‡ะฐั‚ะตะปะตะน" + }, "resetPassword": { "pageTitle": "ะกะฑั€ะพัะธั‚ัŒ ะฟะฐั€ะพะปัŒ", "header": { @@ -379,6 +283,10 @@ "invalidToken": "ะะตะฒะตั€ะฝั‹ะน ะธะปะธ ะพั‚ััƒั‚ัั‚ะฒัƒัŽั‰ะธะน ั‚ะพะบะตะฝ ัะฑั€ะพัะฐ" } }, + "searchBar": { + "placeholder": "ะŸะพะธัะบ ั„ะฐะนะปะพะฒ...", + "results": "ะะฐะนะดะตะฝะพ {{filtered}} ะธะท {{total}} ั„ะฐะนะปะพะฒ" + }, "settings": { "groups": { "defaultDescription": "ะะฐัั‚ั€ะพะนะบะธ ะบะพะฝั„ะธะณัƒั€ะฐั†ะธะธ", @@ -513,6 +421,61 @@ }, "pageTitle": "ะžะฑั‰ะธะน ะดะพัั‚ัƒะฟ" }, + "shareActions": { + "deleteTitle": "ะฃะดะฐะปะธั‚ัŒ ะพะฑั‰ะธะน ะดะพัั‚ัƒะฟ", + "deleteConfirmation": "ะ’ั‹ ัƒะฒะตั€ะตะฝั‹, ั‡ั‚ะพ ั…ะพั‚ะธั‚ะต ัƒะดะฐะปะธั‚ัŒ ัั‚ะพั‚ ะพะฑั‰ะธะน ะดะพัั‚ัƒะฟ? ะญั‚ะพ ะดะตะนัั‚ะฒะธะต ะฝะตะพะฑั€ะฐั‚ะธะผะพ.", + "editTitle": "ะ ะตะดะฐะบั‚ะธั€ะพะฒะฐั‚ัŒ ะพะฑั‰ะธะน ะดะพัั‚ัƒะฟ", + "nameLabel": "ะะฐะทะฒะฐะฝะธะต ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", + "expirationLabel": "ะ”ะฐั‚ะฐ ะธัั‚ะตั‡ะตะฝะธั", + "expirationPlaceholder": "MM/DD/YYYY ะงะง:ะœะœ", + "maxViewsLabel": "ะœะฐะบัะธะผะฐะปัŒะฝะพะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะฟั€ะพัะผะพั‚ั€ะพะฒ", + "maxViewsPlaceholder": "ะžัั‚ะฐะฒัŒั‚ะต ะฟัƒัั‚ั‹ะผ ะดะปั ะฝะตะพะณั€ะฐะฝะธั‡ะตะฝะฝะพะณะพ ะดะพัั‚ัƒะฟะฐ", + "passwordProtection": "ะ—ะฐั‰ะธั‰ะตะฝะพ ะฟะฐั€ะพะปะตะผ", + "passwordLabel": "ะŸะฐั€ะพะปัŒ", + "passwordPlaceholder": "ะ’ะฒะตะดะธั‚ะต ะฟะฐั€ะพะปัŒ", + "newPasswordLabel": "ะะพะฒั‹ะน ะฟะฐั€ะพะปัŒ (ะพัั‚ะฐะฒัŒั‚ะต ะฟัƒัั‚ั‹ะผ, ั‡ั‚ะพะฑั‹ ัะพั…ั€ะฐะฝะธั‚ัŒ ั‚ะตะบัƒั‰ะธะน)", + "newPasswordPlaceholder": "ะ’ะฒะตะดะธั‚ะต ะฝะพะฒั‹ะน ะฟะฐั€ะพะปัŒ", + "manageFilesTitle": "ะฃะฟั€ะฐะฒะปะตะฝะธะต ั„ะฐะนะปะฐะผะธ", + "manageRecipientsTitle": "ะฃะฟั€ะฐะฒะปะตะฝะธะต ะฟะพะปัƒั‡ะฐั‚ะตะปัะผะธ", + "editSuccess": "ะžะฑั‰ะธะน ะดะพัั‚ัƒะฟ ัƒัะฟะตัˆะฝะพ ะพะฑะฝะพะฒะปั‘ะฝ", + "editError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ะพะฑะฝะพะฒะปะตะฝะธะธ ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ" + }, + "shareDetails": { + "title": "ะ”ะตั‚ะฐะปะธ ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", + "subtitle": "ะŸะพะดั€ะพะฑะฝะฐั ะธะฝั„ะพั€ะผะฐั†ะธั ะพะฑ ัั‚ะพะผ ะพะฑั‰ะตะผ ะดะพัั‚ัƒะฟะต", + "basicInfo": "ะžัะฝะพะฒะฝะฐั ะธะฝั„ะพั€ะผะฐั†ะธั", + "name": "ะะฐะทะฒะฐะฝะธะต", + "untitled": "ะ‘ะตะท ะฝะฐะทะฒะฐะฝะธั", + "views": "ะŸั€ะพัะผะพั‚ั€ั‹", + "dates": "ะ”ะฐั‚ั‹", + "created": "ะกะพะทะดะฐะฝะพ", + "expires": "ะ˜ัั‚ะตะบะฐะตั‚", + "never": "ะะธะบะพะณะดะฐ", + "security": "ะ‘ะตะทะพะฟะฐัะฝะพัั‚ัŒ", + "passwordProtected": "ะ—ะฐั‰ะธั‰ะตะฝะพ ะฟะฐั€ะพะปะตะผ", + "publicAccess": "ะŸัƒะฑะปะธั‡ะฝั‹ะน ะดะพัั‚ัƒะฟ", + "maxViews": "ะœะฐะบัะธะผัƒะผ ะฟั€ะพัะผะพั‚ั€ะพะฒ:", + "files": "ะคะฐะนะปั‹", + "recipients": "ะŸะพะปัƒั‡ะฐั‚ะตะปะธ", + "notAvailable": "ะ/ะ”", + "invalidDate": "ะะตะฒะตั€ะฝะฐั ะดะฐั‚ะฐ", + "loadError": "ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ะดะตั‚ะฐะปะตะน ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ" + }, + "shareManager": { + "deleteSuccess": "ะžะฑั‰ะธะน ะดะพัั‚ัƒะฟ ัƒัะฟะตัˆะฝะพ ัƒะดะฐะปะตะฝ", + "deleteError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ัƒะดะฐะปะตะฝะธะธ ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", + "updateSuccess": "ะžะฑั‰ะธะน ะดะพัั‚ัƒะฟ ัƒัะฟะตัˆะฝะพ ะพะฑะฝะพะฒะปะตะฝ", + "updateError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ะพะฑะฝะพะฒะปะตะฝะธะธ ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", + "filesUpdateSuccess": "ะคะฐะนะปั‹ ัƒัะฟะตัˆะฝะพ ะพะฑะฝะพะฒะปะตะฝั‹", + "filesUpdateError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ะพะฑะฝะพะฒะปะตะฝะธะธ ั„ะฐะนะปะพะฒ", + "recipientsUpdateSuccess": "ะŸะพะปัƒั‡ะฐั‚ะตะปะธ ัƒัะฟะตัˆะฝะพ ะพะฑะฝะพะฒะปะตะฝั‹", + "recipientsUpdateError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ะพะฑะฝะพะฒะปะตะฝะธะธ ะฟะพะปัƒั‡ะฐั‚ะตะปะตะน", + "linkGenerateSuccess": "ะกัั‹ะปะบะฐ ะดะปั ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ ัƒัะฟะตัˆะฝะพ ัะพะทะดะฐะฝะฐ", + "linkGenerateError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ัะพะทะดะฐะฝะธะธ ััั‹ะปะบะธ ะดะปั ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", + "notifyLoading": "ะžั‚ะฟั€ะฐะฒะบะฐ ัƒะฒะตะดะพะผะปะตะฝะธะน...", + "notifySuccess": "ะŸะพะปัƒั‡ะฐั‚ะตะปะธ ัƒัะฟะตัˆะฝะพ ัƒะฒะตะดะพะผะปะตะฝั‹", + "notifyError": "ะžัˆะธะฑะบะฐ ะฟั€ะธ ัƒะฒะตะดะพะผะปะตะฝะธะธ ะฟะพะปัƒั‡ะฐั‚ะตะปะตะน" + }, "shares": { "errors": { "loadFailed": "ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ะพะฑั‰ะธั… ะดะพัั‚ัƒะฟะพะฒ", @@ -539,6 +502,64 @@ }, "pageTitle": "ะžะฑั‰ะธะต ะดะพัั‚ัƒะฟั‹" }, + "sharesTable": { + "ariaLabel": "ะขะฐะฑะปะธั†ะฐ ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", + "never": "ะะธะบะพะณะดะฐ", + "columns": { + "name": "ะ˜ะœะฏ", + "createdAt": "ะกะžะ—ะ”ะะะž", + "expiresAt": "ะ˜ะกะขะ•ะšะะ•ะข", + "status": "ะกะขะะขะฃะก", + "security": "ะ‘ะ•ะ—ะžะŸะะกะะžะกะขะฌ", + "files": "ะคะะ™ะ›ะซ", + "recipients": "ะŸะžะ›ะฃะงะะขะ•ะ›ะ˜", + "actions": "ะ”ะ•ะ™ะกะขะ’ะ˜ะฏ" + }, + "status": { + "neverExpires": "ะะต ะธัั‚ะตะบะฐะตั‚", + "active": "ะะบั‚ะธะฒะฝะพ", + "expired": "ะ˜ัั‚ะตะบะปะพ" + }, + "security": { + "protected": "ะ—ะฐั‰ะธั‰ะตะฝะพ", + "public": "ะŸัƒะฑะปะธั‡ะฝะพ" + }, + "filesCount": "ั„ะฐะนะปะพะฒ", + "recipientsCount": "ะฟะพะปัƒั‡ะฐั‚ะตะปะตะน", + "actions": { + "menu": "ะœะตะฝัŽ ะดะตะนัั‚ะฒะธะน ะพะฑั‰ะตะณะพ ะดะพัั‚ัƒะฟะฐ", + "edit": "ะ ะตะดะฐะบั‚ะธั€ะพะฒะฐั‚ัŒ", + "manageFiles": "ะฃะฟั€ะฐะฒะปะตะฝะธะต ั„ะฐะนะปะฐะผะธ", + "manageRecipients": "ะฃะฟั€ะฐะฒะปะตะฝะธะต ะฟะพะปัƒั‡ะฐั‚ะตะปัะผะธ", + "viewDetails": "ะŸั€ะพัะผะพั‚ั€ะตั‚ัŒ ะดะตั‚ะฐะปะธ", + "generateLink": "ะกะพะทะดะฐั‚ัŒ ััั‹ะปะบัƒ", + "editLink": "ะ ะตะดะฐะบั‚ะธั€ะพะฒะฐั‚ัŒ ััั‹ะปะบัƒ", + "copyLink": "ะกะบะพะฟะธั€ะพะฒะฐั‚ัŒ ััั‹ะปะบัƒ", + "notifyRecipients": "ะฃะฒะตะดะพะผะธั‚ัŒ ะฟะพะปัƒั‡ะฐั‚ะตะปะตะน", + "delete": "ะฃะดะฐะปะธั‚ัŒ" + } + }, + "storageUsage": { + "title": "ะ˜ัะฟะพะปัŒะทะพะฒะฐะฝะธะต ั…ั€ะฐะฝะธะปะธั‰ะฐ", + "ariaLabel": "ะ˜ะฝะดะธะบะฐั‚ะพั€ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั ั…ั€ะฐะฝะธะปะธั‰ะฐ", + "used": "ะ˜ัะฟะพะปัŒะทะพะฒะฐะฝะพ", + "available": "ะ”ะพัั‚ัƒะฟะฝะพ" + }, + "theme": { + "toggle": "ะŸะตั€ะตะบะปัŽั‡ะธั‚ัŒ ั‚ะตะผัƒ", + "light": "ะกะฒะตั‚ะปะฐั", + "dark": "ะขั‘ะผะฝะฐั", + "system": "ะกะธัั‚ะตะผะฝะฐั" + }, + "uploadFile": { + "title": "ะ—ะฐะณั€ัƒะทะธั‚ัŒ ั„ะฐะนะป", + "selectFile": "ะะฐะถะผะธั‚ะต, ั‡ั‚ะพะฑั‹ ะฒั‹ะฑั€ะฐั‚ัŒ ั„ะฐะนะป", + "preview": "ะŸั€ะตะดะฟั€ะพัะผะพั‚ั€", + "uploadProgress": "ะŸั€ะพะณั€ะตัั ะทะฐะณั€ัƒะทะบะธ", + "upload": "ะ—ะฐะณั€ัƒะทะธั‚ัŒ", + "success": "ะคะฐะนะป ัƒัะฟะตัˆะฝะพ ะทะฐะณั€ัƒะถะตะฝ", + "error": "ะะต ัƒะดะฐะปะพััŒ ะทะฐะณั€ัƒะทะธั‚ัŒ ั„ะฐะนะป" + }, "users": { "modes": { "create": "ัะพะทะดะฐั‚ัŒ", @@ -608,29 +629,16 @@ "userr": "ะŸะพะปัŒะทะพะฒะฐั‚ะตะปัŒ" } }, - "logo": { - "labels": { - "appLogo": "ะ›ะพะณะพั‚ะธะฟ ะฟั€ะธะปะพะถะตะฝะธั" - }, - "buttons": { - "upload": "ะ—ะฐะณั€ัƒะทะธั‚ัŒ ะปะพะณะพั‚ะธะฟ", - "remove": "ะฃะดะฐะปะธั‚ัŒ ะปะพะณะพั‚ะธะฟ" - }, - "messages": { - "uploadSuccess": "ะ›ะพะณะพั‚ะธะฟ ัƒัะฟะตัˆะฝะพ ะทะฐะณั€ัƒะถะตะฝ", - "removeSuccess": "ะ›ะพะณะพั‚ะธะฟ ัƒัะฟะตัˆะฝะพ ัƒะดะฐะปะตะฝ" - }, - "errors": { - "uploadFailed": "ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ะปะพะณะพั‚ะธะฟะฐ", - "removeFailed": "ะžัˆะธะฑะบะฐ ัƒะดะฐะปะตะฝะธั ะปะพะณะพั‚ะธะฟะฐ" - } - }, - "navbar": { - "logoAlt": "ะ›ะพะณะพั‚ะธะฟ ะฟั€ะธะปะพะถะตะฝะธั", - "profileMenu": "ะœะตะฝัŽ ะฟั€ะพั„ะธะปั", - "profile": "ะŸั€ะพั„ะธะปัŒ", - "settings": "ะะฐัั‚ั€ะพะนะบะธ", - "usersManagement": "ะฃะฟั€ะฐะฒะปะตะฝะธะต ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัะผะธ", - "logout": "ะ’ั‹ะนั‚ะธ" + "validation": { + "invalidEmail": "ะะตะฒะตั€ะฝั‹ะน ะฐะดั€ะตั ัะปะตะบั‚ั€ะพะฝะฝะพะน ะฟะพั‡ั‚ั‹", + "passwordMinLength": "ะŸะฐั€ะพะปัŒ ะดะพะปะถะตะฝ ัะพะดะตั€ะถะฐั‚ัŒ ะฝะต ะผะตะฝะตะต 6 ัะธะผะฒะพะปะพะฒ", + "firstNameRequired": "ะ˜ะผั ะพะฑัะทะฐั‚ะตะปัŒะฝะพ", + "lastNameRequired": "ะคะฐะผะธะปะธั ะพะฑัะทะฐั‚ะตะปัŒะฝะฐ", + "usernameLength": "ะ˜ะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั ะดะพะปะถะฝะพ ัะพะดะตั€ะถะฐั‚ัŒ ะฝะต ะผะตะฝะตะต 3 ัะธะผะฒะพะปะพะฒ", + "usernameSpaces": "ะ˜ะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั ะฝะต ะผะพะถะตั‚ ัะพะดะตั€ะถะฐั‚ัŒ ะฟั€ะพะฑะตะปะพะฒ", + "passwordLength": "ะŸะฐั€ะพะปัŒ ะดะพะปะถะตะฝ ัะพะดะตั€ะถะฐั‚ัŒ ะฝะต ะผะตะฝะตะต 8 ัะธะผะฒะพะปะพะฒ", + "passwordsMatch": "ะŸะฐั€ะพะปะธ ะฝะต ัะพะฒะฟะฐะดะฐัŽั‚", + "emailRequired": "ะขั€ะตะฑัƒะตั‚ัั ัะปะตะบั‚ั€ะพะฝะฝะฐั ะฟะพั‡ั‚ะฐ", + "passwordRequired": "ะขั€ะตะฑัƒะตั‚ัั ะฟะฐั€ะพะปัŒ" } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/tr-TR.json b/apps/web/messages/tr-TR.json similarity index 97% rename from apps/web/src/locales/tr-TR.json rename to apps/web/messages/tr-TR.json index 81881e7..1bc42ec 100644 --- a/apps/web/src/locales/tr-TR.json +++ b/apps/web/messages/tr-TR.json @@ -1,58 +1,4 @@ { - "login": { - "welcome": "HoลŸ geldiniz", - "signInToContinue": "Devam etmek iรงin oturum aรงฤฑn", - "emailLabel": "E-posta Adresi", - "emailPlaceholder": "E-posta adresinizi girin", - "passwordLabel": "ลžifre", - "passwordPlaceholder": "ลžifrenizi girin", - "signIn": "Oturum Aรง", - "signingIn": "Oturum aรงฤฑlฤฑyor...", - "forgotPassword": "ลžifrenizi mi unuttunuz?", - "pageTitle": "GiriลŸ" - }, - "errors": { - "invalidCredentials": "Geรงersiz e-posta veya ลŸifre", - "userNotFound": "Kullanฤฑcฤฑ bulunamadฤฑ", - "accountLocked": "Hesap kilitlendi. Lรผtfen daha sonra tekrar deneyin", - "unexpectedError": "Beklenmeyen bir hata oluลŸtu. Lรผtfen tekrar deneyin" - }, - "validation": { - "invalidEmail": "Geรงersiz e-posta adresi", - "passwordMinLength": "ลžifre en az 6 karakter olmalฤฑdฤฑr", - "firstNameRequired": "Ad gerekli", - "lastNameRequired": "Soyad gerekli", - "usernameLength": "Kullanฤฑcฤฑ adฤฑ en az 3 karakter olmalฤฑdฤฑr", - "usernameSpaces": "Kullanฤฑcฤฑ adฤฑnda boลŸluk olamaz", - "passwordLength": "ลžifre en az 8 karakter olmalฤฑdฤฑr", - "passwordsMatch": "ลžifreler eลŸleลŸmiyor" - }, - "fileSelector": { - "availableFiles": "Kullanฤฑlabilir Dosyalar ({{count}})", - "shareFiles": "Dosyalarฤฑ PaylaลŸ ({{count}})", - "searchPlaceholder": "Dosya ara...", - "noMatchingFiles": "EลŸleลŸen dosya bulunamadฤฑ", - "noAvailableFiles": "Kullanฤฑlabilir dosya yok", - "noFilesInShare": "PaylaลŸฤฑmda dosya yok", - "saveChanges": "DeฤŸiลŸiklikleri Kaydet" - }, - "recipientSelector": { - "emailPlaceholder": "Alฤฑcฤฑnฤฑn e-postasฤฑnฤฑ girin", - "add": "Ekle", - "recipients": "Alฤฑcฤฑlar ({{count}})", - "notifyAll": "Hepsini Bildir", - "noRecipients": "Henรผz alฤฑcฤฑ eklenmedi", - "addSuccess": "Alฤฑcฤฑ baลŸarฤฑyla eklendi", - "addError": "Alฤฑcฤฑ eklenemedi", - "removeSuccess": "Alฤฑcฤฑ baลŸarฤฑyla kaldฤฑrฤฑldฤฑ", - "removeError": "Alฤฑcฤฑ kaldฤฑrฤฑlamadฤฑ", - "sendingNotifications": "Bildirimler gรถnderiliyor...", - "notifySuccess": "Alฤฑcฤฑlar baลŸarฤฑyla bildirildi", - "notifyError": "Alฤฑcฤฑlara bildirim gรถnderilemedi" - }, - "navigation": { - "dashboard": "Gรถsterge Paneli" - }, "common": { "loading": "Yรผkleniyor, lรผtfen bekleyin...", "cancel": "ฤฐptal", @@ -78,6 +24,22 @@ "success": "PaylaลŸฤฑm baลŸarฤฑyla oluลŸturuldu", "error": "PaylaลŸฤฑm oluลŸturulamadฤฑ" }, + "dashboard": { + "loadError": "Gรถsterge paneli verileri yรผklenemedi", + "linkCopied": "BaฤŸlantฤฑ panoya kopyalandฤฑ", + "pageTitle": "Gรถsterge Paneli", + "breadcrumb": "Gรถsterge Paneli" + }, + "emptyState": { + "noFiles": "Henรผz dosya yรผklenmedi", + "uploadFile": "Dosya Yรผkle" + }, + "errors": { + "invalidCredentials": "Geรงersiz e-posta veya ลŸifre", + "userNotFound": "Kullanฤฑcฤฑ bulunamadฤฑ", + "accountLocked": "Hesap kilitlendi. Lรผtfen daha sonra tekrar deneyin", + "unexpectedError": "Beklenmeyen bir hata oluลŸtu. Lรผtfen tekrar deneyin" + }, "fileActions": { "editFile": "Dosyayฤฑ Dรผzenle", "nameLabel": "Ad", @@ -86,9 +48,16 @@ "descriptionLabel": "Aรงฤฑklama", "descriptionPlaceholder": "Dosya aรงฤฑklamasฤฑnฤฑ girin", "deleteFile": "Dosyayฤฑ Sil", - "deleteConfirmation": "\"{{fileName}}\" dosyasฤฑnฤฑ silmek istediฤŸinize emin misiniz?", + "deleteConfirmation": " dosyasฤฑnฤฑ silmek istediฤŸinize emin misiniz?", "deleteWarning": "Bu iลŸlem geri alฤฑnamaz." }, + "fileManager": { + "downloadError": "Dosya indirilemedi", + "updateSuccess": "Dosya baลŸarฤฑyla gรผncellendi", + "updateError": "Dosya gรผncellenemedi", + "deleteSuccess": "Dosya baลŸarฤฑyla silindi", + "deleteError": "Dosya silinemedi" + }, "filePreview": { "loading": "ร–nizleme yรผkleniyor...", "notAvailable": "ร–nizleme mevcut deฤŸil", @@ -98,68 +67,21 @@ "loadError": "ร–nizleme yรผklenemedi", "downloadError": "Dosya indirilemedi" }, - "generateShareLink": { - "generateTitle": "PaylaลŸฤฑm BaฤŸlantฤฑsฤฑ OluลŸtur", - "updateTitle": "PaylaลŸฤฑm BaฤŸlantฤฑsฤฑnฤฑ Gรผncelle", - "generateDescription": "Dosyalarฤฑnฤฑzฤฑ paylaลŸmak iรงin bir baฤŸlantฤฑ oluลŸturun", - "updateDescription": "Bu paylaลŸฤฑm baฤŸlantฤฑsฤฑ iรงin takma ad gรผncelleyin", - "aliasPlaceholder": "Takma ad girin", - "linkReady": "PaylaลŸฤฑm baฤŸlantฤฑnฤฑz hazฤฑr:", - "generateButton": "BaฤŸlantฤฑyฤฑ OluลŸtur", - "updateButton": "BaฤŸlantฤฑyฤฑ Gรผncelle", - "copyButton": "BaฤŸlantฤฑyฤฑ Kopyala", - "success": "BaฤŸlantฤฑ baลŸarฤฑyla oluลŸturuldu", - "error": "BaฤŸlantฤฑ oluลŸturulamadฤฑ", - "copied": "BaฤŸlantฤฑ panoya kopyalandฤฑ" + "fileSelector": { + "availableFiles": "Kullanฤฑlabilir Dosyalar ({{count}})", + "shareFiles": "Dosyalarฤฑ PaylaลŸ ({{count}})", + "searchPlaceholder": "Dosya ara...", + "noMatchingFiles": "EลŸleลŸen dosya bulunamadฤฑ", + "noAvailableFiles": "Kullanฤฑlabilir dosya yok", + "noFilesInShare": "PaylaลŸฤฑmda dosya yok", + "saveChanges": "DeฤŸiลŸiklikleri Kaydet" }, - "shareActions": { - "deleteTitle": "PaylaลŸฤฑmฤฑ Sil", - "deleteConfirmation": "Bu paylaลŸฤฑmฤฑ silmek istediฤŸinize emin misiniz? Bu iลŸlem geri alฤฑnamaz.", - "editTitle": "PaylaลŸฤฑmฤฑ Dรผzenle", - "nameLabel": "PaylaลŸฤฑm Adฤฑ", - "expirationLabel": "Son Kullanma Tarihi", - "expirationPlaceholder": "MM/GG/YYYY SS:DD", - "maxViewsLabel": "Maksimum Gรถrรผntรผleme", - "maxViewsPlaceholder": "Sฤฑnฤฑrsฤฑz iรงin boลŸ bฤฑrakฤฑn", - "passwordProtection": "ลžifre Korumalฤฑ", - "passwordLabel": "ลžifre", - "passwordPlaceholder": "ลžifreyi girin", - "newPasswordLabel": "Yeni ลžifre (mevcut ลŸifreyi korumak iรงin boลŸ bฤฑrakฤฑn)", - "newPasswordPlaceholder": "Yeni ลŸifreyi girin", - "manageFilesTitle": "Dosyalarฤฑ Yรถnet", - "manageRecipientsTitle": "Alฤฑcฤฑlarฤฑ Yรถnet", - "editSuccess": "PaylaลŸฤฑm baลŸarฤฑyla gรผncellendi", - "editError": "PaylaลŸฤฑm gรผncellenemedi" - }, - "shareDetails": { - "title": "PaylaลŸฤฑm Detaylarฤฑ", - "subtitle": "Bu paylaลŸฤฑm hakkฤฑnda ayrฤฑntฤฑlฤฑ bilgi", - "basicInfo": "Temel Bilgiler", - "name": "Ad", - "untitled": "Adsฤฑz", - "views": "Gรถrรผntรผleme", - "dates": "Tarihler", - "created": "OluลŸturuldu", - "expires": "Sona Eriyor", - "never": "Asla", - "security": "Gรผvenlik", - "passwordProtected": "ลžifre ile Korunuyor", - "publicAccess": "Genel EriลŸim", - "maxViews": "Maksimum Gรถrรผntรผleme: {{count}}", - "files": "Dosyalar ({{count}})", - "recipients": "Alฤฑcฤฑlar ({{count}})", - "notAvailable": "Mevcut DeฤŸil", - "invalidDate": "Geรงersiz tarih", - "loadError": "PaylaลŸฤฑm detaylarฤฑ yรผklenemedi" - }, - "uploadFile": { - "title": "Dosya Yรผkle", - "selectFile": "Dosya seรงmek iรงin tฤฑklayฤฑn", - "preview": "ร–nizleme", - "uploadProgress": "Yรผkleme ฤฐlerlemesi", - "upload": "Yรผkle", - "success": "Dosya baลŸarฤฑyla yรผklendi", - "error": "Dosya yรผklenemedi" + "files": { + "title": "Tรผm Dosyalar", + "uploadFile": "Dosya Yรผkle", + "loadError": "Dosyalar yรผklenemedi", + "pageTitle": "Benim Dosyalarฤฑm", + "breadcrumb": "Benim Dosyalarฤฑm" }, "filesTable": { "ariaLabel": "Dosya Tablosu", @@ -179,119 +101,10 @@ "delete": "Sil" } }, - "sharesTable": { - "ariaLabel": "PaylaลŸฤฑm Tablosu", - "never": "Asla", - "columns": { - "name": "Ad", - "createdAt": "OluลŸturulma Tarihi", - "expiresAt": "Son Kullanma Tarihi", - "status": "Durum", - "security": "Gรผvenlik", - "files": "Dosyalar", - "recipients": "Alฤฑcฤฑlar", - "actions": "ฤฐลŸlemler" - }, - "status": { - "neverExpires": "Sona Ermez", - "active": "Aktif", - "expired": "Sona Erdi" - }, - "security": { - "protected": "Korunuyor", - "public": "Genel" - }, - "filesCount": "{{count}} dosya", - "recipientsCount": "{{count}} alฤฑcฤฑ", - "actions": { - "menu": "PaylaลŸฤฑm ฤฐลŸlem Menรผsรผ", - "edit": "Dรผzenle", - "manageFiles": "Dosyalarฤฑ Yรถnet", - "manageRecipients": "Alฤฑcฤฑlarฤฑ Yรถnet", - "viewDetails": "Detaylarฤฑ Gรถrรผntรผle", - "generateLink": "BaฤŸlantฤฑ OluลŸtur", - "editLink": "BaฤŸlantฤฑyฤฑ Dรผzenle", - "copyLink": "BaฤŸlantฤฑyฤฑ Kopyala", - "notifyRecipients": "Alฤฑcฤฑlarฤฑ Bildir", - "delete": "Sil" - } - }, "footer": { "poweredBy": "Tarafฤฑndan destekleniyor:", "kyanHomepage": "Kyantech Ana Sayfasฤฑ" }, - "fileManager": { - "downloadError": "Dosya indirilemedi", - "updateSuccess": "Dosya baลŸarฤฑyla gรผncellendi", - "updateError": "Dosya gรผncellenemedi", - "deleteSuccess": "Dosya baลŸarฤฑyla silindi", - "deleteError": "Dosya silinemedi" - }, - "shareManager": { - "deleteSuccess": "PaylaลŸฤฑm baลŸarฤฑyla silindi", - "deleteError": "PaylaลŸฤฑm silinemedi", - "updateSuccess": "PaylaลŸฤฑm baลŸarฤฑyla gรผncellendi", - "updateError": "PaylaลŸฤฑm gรผncellenemedi", - "filesUpdateSuccess": "Dosyalar baลŸarฤฑyla gรผncellendi", - "filesUpdateError": "Dosyalar gรผncellenemedi", - "recipientsUpdateSuccess": "Alฤฑcฤฑlar baลŸarฤฑyla gรผncellendi", - "recipientsUpdateError": "Alฤฑcฤฑlar gรผncellenemedi", - "linkGenerateSuccess": "PaylaลŸฤฑm baฤŸlantฤฑsฤฑ baลŸarฤฑyla oluลŸturuldu", - "linkGenerateError": "PaylaลŸฤฑm baฤŸlantฤฑsฤฑ oluลŸturulamadฤฑ", - "notifyLoading": "Bildirimler gรถnderiliyor...", - "notifySuccess": "Alฤฑcฤฑlara baลŸarฤฑyla bildirildi", - "notifyError": "Alฤฑcฤฑlara bildirim gรถnderilemedi" - }, - "quickAccess": { - "files": { - "title": "Benim Dosyalarฤฑm", - "description": "Yรผklenen dosyalara eriลŸin ve yรถnetin" - }, - "shares": { - "title": "Benim PaylaลŸฤฑmlarฤฑm", - "description": "PaylaลŸฤฑlan dosyalarฤฑ gรถrรผntรผleyin ve yรถnetin" - } - }, - "recentFiles": { - "title": "Son Yรผklemeler", - "viewAll": "Tรผmรผnรผ Gรถrรผntรผle", - "uploadFile": "Dosya Yรผkle", - "noFiles": "Henรผz dosya yรผklenmedi" - }, - "recentShares": { - "title": "Son PaylaลŸฤฑmlar", - "viewAll": "Tรผmรผnรผ Gรถrรผntรผle", - "createShare": "PaylaลŸฤฑm OluลŸtur", - "noShares": "Henรผz paylaลŸฤฑm oluลŸturulmadฤฑ", - "createFirst": "ฤฐlk paylaลŸฤฑmฤฑnฤฑzฤฑ oluลŸturun" - }, - "storageUsage": { - "title": "Depolama Kullanฤฑmฤฑ", - "ariaLabel": "Depolama kullanฤฑm ilerleme รงubuฤŸu", - "used": "{{size}} kullanฤฑldฤฑ", - "available": "{{size}} kullanฤฑlabilir" - }, - "dashboard": { - "loadError": "Gรถsterge paneli verileri yรผklenemedi", - "linkCopied": "BaฤŸlantฤฑ panoya kopyalandฤฑ", - "pageTitle": "Gรถsterge Paneli", - "breadcrumb": "Gรถsterge Paneli" - }, - "emptyState": { - "noFiles": "Henรผz dosya yรผklenmedi", - "uploadFile": "Dosya Yรผkle" - }, - "files": { - "title": "Tรผm Dosyalar", - "uploadFile": "Dosya Yรผkle", - "loadError": "Dosyalar yรผklenemedi", - "pageTitle": "Benim Dosyalarฤฑm", - "breadcrumb": "Benim Dosyalarฤฑm" - }, - "searchBar": { - "placeholder": "Dosya ara...", - "results": "Toplam {{total}} dosya iรงinde {{filtered}} dosya bulundu" - }, "forgotPassword": { "emailLabel": "E-posta Adresi", "emailPlaceholder": "E-posta adresinizi girin", @@ -303,6 +116,20 @@ "resetInstructions": "ลžifre sฤฑfฤฑrlama talimatlarฤฑ e-posta adresinize gรถnderildi", "pageTitle": "ลžifrenizi mi Unuttunuz?" }, + "generateShareLink": { + "generateTitle": "PaylaลŸฤฑm BaฤŸlantฤฑsฤฑ OluลŸtur", + "updateTitle": "PaylaลŸฤฑm BaฤŸlantฤฑsฤฑnฤฑ Gรผncelle", + "generateDescription": "Dosyalarฤฑnฤฑzฤฑ paylaลŸmak iรงin bir baฤŸlantฤฑ oluลŸturun", + "updateDescription": "Bu paylaลŸฤฑm baฤŸlantฤฑsฤฑ iรงin takma ad gรผncelleyin", + "aliasPlaceholder": "Takma ad girin", + "linkReady": "PaylaลŸฤฑm baฤŸlantฤฑnฤฑz hazฤฑr:", + "generateButton": "BaฤŸlantฤฑyฤฑ OluลŸtur", + "updateButton": "BaฤŸlantฤฑyฤฑ Gรผncelle", + "copyButton": "BaฤŸlantฤฑyฤฑ Kopyala", + "success": "BaฤŸlantฤฑ baลŸarฤฑyla oluลŸturuldu", + "error": "BaฤŸlantฤฑ oluลŸturulamadฤฑ", + "copied": "BaฤŸlantฤฑ panoya kopyalandฤฑ" + }, "home": { "description": "WeTransfer'e aรงฤฑk kaynaklฤฑ alternatif. Takip veya kฤฑsฤฑtlama olmadan dosyalarฤฑnฤฑzฤฑ gรผvenle paylaลŸฤฑn.", "documentation": "Belgelendirme", @@ -314,6 +141,46 @@ }, "pageTitle": "Ana Sayfa" }, + "login": { + "welcome": "HoลŸ geldiniz'e", + "signInToContinue": "Devam etmek iรงin oturum aรงฤฑn", + "emailLabel": "E-posta Adresi", + "emailPlaceholder": "E-posta adresinizi girin", + "passwordLabel": "ลžifre", + "passwordPlaceholder": "ลžifrenizi girin", + "signIn": "Oturum Aรง", + "signingIn": "Oturum aรงฤฑlฤฑyor...", + "forgotPassword": "ลžifrenizi mi unuttunuz?", + "pageTitle": "GiriลŸ" + }, + "logo": { + "labels": { + "appLogo": "Uygulama Logosu" + }, + "buttons": { + "upload": "Logoyu Yรผkle", + "remove": "Logoyu Kaldฤฑr" + }, + "messages": { + "uploadSuccess": "Logo baลŸarฤฑyla yรผklendi", + "removeSuccess": "Logo baลŸarฤฑyla kaldฤฑrฤฑldฤฑ" + }, + "errors": { + "uploadFailed": "Logo yรผklenemedi", + "removeFailed": "Logo kaldฤฑrฤฑlamadฤฑ" + } + }, + "navbar": { + "logoAlt": "Uygulama Logosu", + "profileMenu": "Profil Menรผsรผ", + "profile": "Profil", + "settings": "Ayarlar", + "usersManagement": "Kullanฤฑcฤฑ Yรถnetimi", + "logout": "Oturumu Kapat" + }, + "navigation": { + "dashboard": "Gรถsterge Paneli" + }, "profile": { "password": { "title": "ลžifreyi DeฤŸiลŸtir", @@ -356,6 +223,43 @@ }, "pageTitle": "Profil" }, + "quickAccess": { + "files": { + "title": "Benim Dosyalarฤฑm", + "description": "Yรผklenen dosyalara eriลŸin ve yรถnetin" + }, + "shares": { + "title": "Benim PaylaลŸฤฑmlarฤฑm", + "description": "PaylaลŸฤฑlan dosyalarฤฑ gรถrรผntรผleyin ve yรถnetin" + } + }, + "recentFiles": { + "title": "Son Yรผklemeler", + "viewAll": "Tรผmรผnรผ Gรถrรผntรผle", + "uploadFile": "Dosya Yรผkle", + "noFiles": "Henรผz dosya yรผklenmedi" + }, + "recentShares": { + "title": "Son PaylaลŸฤฑmlar", + "viewAll": "Tรผmรผnรผ Gรถrรผntรผle", + "createShare": "PaylaลŸฤฑm OluลŸtur", + "noShares": "Henรผz paylaลŸฤฑm oluลŸturulmadฤฑ", + "createFirst": "ฤฐlk paylaลŸฤฑmฤฑnฤฑzฤฑ oluลŸturun" + }, + "recipientSelector": { + "emailPlaceholder": "Alฤฑcฤฑnฤฑn e-postasฤฑnฤฑ girin", + "add": "Ekle", + "recipients": "Alฤฑcฤฑlar ({{count}})", + "notifyAll": "Hepsini Bildir", + "noRecipients": "Henรผz alฤฑcฤฑ eklenmedi", + "addSuccess": "Alฤฑcฤฑ baลŸarฤฑyla eklendi", + "addError": "Alฤฑcฤฑ eklenemedi", + "removeSuccess": "Alฤฑcฤฑ baลŸarฤฑyla kaldฤฑrฤฑldฤฑ", + "removeError": "Alฤฑcฤฑ kaldฤฑrฤฑlamadฤฑ", + "sendingNotifications": "Bildirimler gรถnderiliyor...", + "notifySuccess": "Alฤฑcฤฑlar baลŸarฤฑyla bildirildi", + "notifyError": "Alฤฑcฤฑlara bildirim gรถnderilemedi" + }, "resetPassword": { "pageTitle": "ลžifreyi Sฤฑfฤฑrla", "header": { @@ -379,6 +283,10 @@ "invalidToken": "Geรงersiz veya eksik sฤฑfฤฑrlama belirteci" } }, + "searchBar": { + "placeholder": "Dosya ara...", + "results": "Toplam {{total}} dosya iรงinde {{filtered}} dosya bulundu" + }, "settings": { "groups": { "defaultDescription": "Yapฤฑlandฤฑrma seรงenekleri", @@ -513,6 +421,61 @@ }, "pageTitle": "PaylaลŸฤฑm" }, + "shareActions": { + "deleteTitle": "PaylaลŸฤฑmฤฑ Sil", + "deleteConfirmation": "Bu paylaลŸฤฑmฤฑ silmek istediฤŸinize emin misiniz? Bu iลŸlem geri alฤฑnamaz.", + "editTitle": "PaylaลŸฤฑmฤฑ Dรผzenle", + "nameLabel": "PaylaลŸฤฑm Adฤฑ", + "expirationLabel": "Son Kullanma Tarihi", + "expirationPlaceholder": "MM/GG/YYYY SS:DD", + "maxViewsLabel": "Maksimum Gรถrรผntรผleme", + "maxViewsPlaceholder": "Sฤฑnฤฑrsฤฑz iรงin boลŸ bฤฑrakฤฑn", + "passwordProtection": "ลžifre Korumalฤฑ", + "passwordLabel": "ลžifre", + "passwordPlaceholder": "ลžifreyi girin", + "newPasswordLabel": "Yeni ลžifre (mevcut ลŸifreyi korumak iรงin boลŸ bฤฑrakฤฑn)", + "newPasswordPlaceholder": "Yeni ลŸifreyi girin", + "manageFilesTitle": "Dosyalarฤฑ Yรถnet", + "manageRecipientsTitle": "Alฤฑcฤฑlarฤฑ Yรถnet", + "editSuccess": "PaylaลŸฤฑm baลŸarฤฑyla gรผncellendi", + "editError": "PaylaลŸฤฑm gรผncellenemedi" + }, + "shareDetails": { + "title": "PaylaลŸฤฑm Detaylarฤฑ", + "subtitle": "Bu paylaลŸฤฑm hakkฤฑnda ayrฤฑntฤฑlฤฑ bilgi", + "basicInfo": "Temel Bilgiler", + "name": "Ad", + "untitled": "Adsฤฑz", + "views": "Gรถrรผntรผleme", + "dates": "Tarihler", + "created": "OluลŸturuldu", + "expires": "Sona Eriyor", + "never": "Asla", + "security": "Gรผvenlik", + "passwordProtected": "ลžifre ile Korunuyor", + "publicAccess": "Genel EriลŸim", + "maxViews": "Maksimum Gรถrรผntรผleme:", + "files": "Dosyala", + "recipients": "Alฤฑcฤฑla", + "notAvailable": "Mevcut DeฤŸil", + "invalidDate": "Geรงersiz tarih", + "loadError": "PaylaลŸฤฑm detaylarฤฑ yรผklenemedi" + }, + "shareManager": { + "deleteSuccess": "PaylaลŸฤฑm baลŸarฤฑyla silindi", + "deleteError": "PaylaลŸฤฑm silinemedi", + "updateSuccess": "PaylaลŸฤฑm baลŸarฤฑyla gรผncellendi", + "updateError": "PaylaลŸฤฑm gรผncellenemedi", + "filesUpdateSuccess": "Dosyalar baลŸarฤฑyla gรผncellendi", + "filesUpdateError": "Dosyalar gรผncellenemedi", + "recipientsUpdateSuccess": "Alฤฑcฤฑlar baลŸarฤฑyla gรผncellendi", + "recipientsUpdateError": "Alฤฑcฤฑlar gรผncellenemedi", + "linkGenerateSuccess": "PaylaลŸฤฑm baฤŸlantฤฑsฤฑ baลŸarฤฑyla oluลŸturuldu", + "linkGenerateError": "PaylaลŸฤฑm baฤŸlantฤฑsฤฑ oluลŸturulamadฤฑ", + "notifyLoading": "Bildirimler gรถnderiliyor...", + "notifySuccess": "Alฤฑcฤฑlara baลŸarฤฑyla bildirildi", + "notifyError": "Alฤฑcฤฑlara bildirim gรถnderilemedi" + }, "shares": { "errors": { "loadFailed": "PaylaลŸฤฑmlar yรผklenemedi", @@ -539,6 +502,64 @@ }, "pageTitle": "PaylaลŸฤฑmlar" }, + "sharesTable": { + "ariaLabel": "PaylaลŸฤฑm Tablosu", + "never": "Asla", + "columns": { + "name": "Ad", + "createdAt": "OluลŸturulma Tarihi", + "expiresAt": "Son Kullanma Tarihi", + "status": "Durum", + "security": "Gรผvenlik", + "files": "Dosyalar", + "recipients": "Alฤฑcฤฑlar", + "actions": "ฤฐลŸlemler" + }, + "status": { + "neverExpires": "Sona Ermez", + "active": "Aktif", + "expired": "Sona Erdi" + }, + "security": { + "protected": "Korunuyor", + "public": "Genel" + }, + "filesCount": "dosya", + "recipientsCount": "alฤฑcฤฑ", + "actions": { + "menu": "PaylaลŸฤฑm ฤฐลŸlem Menรผsรผ", + "edit": "Dรผzenle", + "manageFiles": "Dosyalarฤฑ Yรถnet", + "manageRecipients": "Alฤฑcฤฑlarฤฑ Yรถnet", + "viewDetails": "Detaylarฤฑ Gรถrรผntรผle", + "generateLink": "BaฤŸlantฤฑ OluลŸtur", + "editLink": "BaฤŸlantฤฑyฤฑ Dรผzenle", + "copyLink": "BaฤŸlantฤฑyฤฑ Kopyala", + "notifyRecipients": "Alฤฑcฤฑlarฤฑ Bildir", + "delete": "Sil" + } + }, + "storageUsage": { + "title": "Depolama Kullanฤฑmฤฑ", + "ariaLabel": "Depolama kullanฤฑm ilerleme รงubuฤŸu", + "used": "kullanฤฑldฤฑ", + "available": "kullanฤฑlabilir" + }, + "theme": { + "toggle": "Temayฤฑ deฤŸiลŸtir", + "light": "Aรงฤฑk", + "dark": "Koyu", + "system": "Sistem" + }, + "uploadFile": { + "title": "Dosya Yรผkle", + "selectFile": "Dosya seรงmek iรงin tฤฑklayฤฑn", + "preview": "ร–nizleme", + "uploadProgress": "Yรผkleme ฤฐlerlemesi", + "upload": "Yรผkle", + "success": "Dosya baลŸarฤฑyla yรผklendi", + "error": "Dosya yรผklenemedi" + }, "users": { "modes": { "create": "OluลŸtur", @@ -608,29 +629,16 @@ "userr": "Kullanฤฑcฤฑ" } }, - "logo": { - "labels": { - "appLogo": "Uygulama Logosu" - }, - "buttons": { - "upload": "Logoyu Yรผkle", - "remove": "Logoyu Kaldฤฑr" - }, - "messages": { - "uploadSuccess": "Logo baลŸarฤฑyla yรผklendi", - "removeSuccess": "Logo baลŸarฤฑyla kaldฤฑrฤฑldฤฑ" - }, - "errors": { - "uploadFailed": "Logo yรผklenemedi", - "removeFailed": "Logo kaldฤฑrฤฑlamadฤฑ" - } - }, - "navbar": { - "logoAlt": "Uygulama Logosu", - "profileMenu": "Profil Menรผsรผ", - "profile": "Profil", - "settings": "Ayarlar", - "usersManagement": "Kullanฤฑcฤฑ Yรถnetimi", - "logout": "Oturumu Kapat" + "validation": { + "invalidEmail": "Geรงersiz e-posta adresi", + "passwordMinLength": "ลžifre en az 6 karakter olmalฤฑdฤฑr", + "firstNameRequired": "Ad gerekli", + "lastNameRequired": "Soyad gerekli", + "usernameLength": "Kullanฤฑcฤฑ adฤฑ en az 3 karakter olmalฤฑdฤฑr", + "usernameSpaces": "Kullanฤฑcฤฑ adฤฑnda boลŸluk olamaz", + "passwordLength": "ลžifre en az 8 karakter olmalฤฑdฤฑr", + "passwordsMatch": "ลžifreler eลŸleลŸmiyor", + "emailRequired": "E-posta gerekli", + "passwordRequired": "ลžifre gerekli" } -} \ No newline at end of file +} diff --git a/apps/web/src/locales/zh-CN.json b/apps/web/messages/zh-CN.json similarity index 97% rename from apps/web/src/locales/zh-CN.json rename to apps/web/messages/zh-CN.json index 19a4394..f6d4aaf 100644 --- a/apps/web/src/locales/zh-CN.json +++ b/apps/web/messages/zh-CN.json @@ -1,58 +1,4 @@ { - "login": { - "welcome": "ๆฌข่ฟŽ", - "signInToContinue": "่ฏท็™ปๅฝ•ไปฅ็ปง็ปญ", - "emailLabel": "็”ตๅญ้‚ฎไปถๅœฐๅ€", - "emailPlaceholder": "่ฏท่พ“ๅ…ฅๆ‚จ็š„็”ตๅญ้‚ฎไปถ", - "passwordLabel": "ๅฏ†็ ", - "passwordPlaceholder": "่ฏท่พ“ๅ…ฅๆ‚จ็š„ๅฏ†็ ", - "signIn": "็™ปๅฝ•", - "signingIn": "ๆญฃๅœจ็™ปๅฝ•...", - "forgotPassword": "ๅฟ˜่ฎฐๅฏ†็ ๏ผŸ", - "pageTitle": "็™ปๅฝ•" - }, - "errors": { - "invalidCredentials": "็”ตๅญ้‚ฎไปถๆˆ–ๅฏ†็ ้”™่ฏฏ", - "userNotFound": "ๆœชๆ‰พๅˆฐ็”จๆˆท", - "accountLocked": "่ดฆๆˆทๅทฒ้”ๅฎšใ€‚่ฏท็จๅŽๅ†่ฏ•", - "unexpectedError": "ๅ‘็”Ÿๆ„ๅค–้”™่ฏฏใ€‚่ฏท้‡่ฏ•" - }, - "validation": { - "invalidEmail": "ๆ— ๆ•ˆ็š„็”ตๅญ้‚ฎไปถๅœฐๅ€", - "passwordMinLength": "ๅฏ†็ ่‡ณๅฐ‘้œ€่ฆ6ไธชๅญ—็ฌฆ", - "firstNameRequired": "ๅๅญ—ไธบๅฟ…ๅกซ้กน", - "lastNameRequired": "ๅง“ๆฐไธบๅฟ…ๅกซ้กน", - "usernameLength": "็”จๆˆทๅ่‡ณๅฐ‘้œ€่ฆ3ไธชๅญ—็ฌฆ", - "usernameSpaces": "็”จๆˆทๅไธ่ƒฝๅŒ…ๅซ็ฉบๆ ผ", - "passwordLength": "ๅฏ†็ ่‡ณๅฐ‘้œ€่ฆ8ไธชๅญ—็ฌฆ", - "passwordsMatch": "ๅฏ†็ ไธๅŒน้…" - }, - "fileSelector": { - "availableFiles": "ๅฏ็”จๆ–‡ไปถ ({{count}})", - "shareFiles": "ๅ…ฑไบซๆ–‡ไปถ ({{count}})", - "searchPlaceholder": "ๆœ็ดขๆ–‡ไปถ...", - "noMatchingFiles": "ๆฒกๆœ‰ๅŒน้…็š„ๆ–‡ไปถ", - "noAvailableFiles": "ๆฒกๆœ‰ๅฏ็”จ็š„ๆ–‡ไปถ", - "noFilesInShare": "ๅ…ฑไบซไธญๆฒกๆœ‰ๆ–‡ไปถ", - "saveChanges": "ไฟๅญ˜ๆ›ดๆ”น" - }, - "recipientSelector": { - "emailPlaceholder": "่ฏท่พ“ๅ…ฅๆ”ถไปถไบบ็”ตๅญ้‚ฎไปถ", - "add": "ๆทปๅŠ ", - "recipients": "ๆ”ถไปถไบบ ({{count}})", - "notifyAll": "้€š็Ÿฅๆ‰€ๆœ‰ไบบ", - "noRecipients": "่ฟ˜ๆฒกๆœ‰ๆทปๅŠ ๆ”ถไปถไบบ", - "addSuccess": "ๆ”ถไปถไบบๆทปๅŠ ๆˆๅŠŸ", - "addError": "ๆทปๅŠ ๆ”ถไปถไบบๅคฑ่ดฅ", - "removeSuccess": "ๆ”ถไปถไบบๅˆ ้™คๆˆๅŠŸ", - "removeError": "ๅˆ ้™คๆ”ถไปถไบบๅคฑ่ดฅ", - "sendingNotifications": "ๆญฃๅœจๅ‘้€้€š็Ÿฅ...", - "notifySuccess": "ๆ”ถไปถไบบ้€š็ŸฅๆˆๅŠŸ", - "notifyError": "้€š็Ÿฅๆ”ถไปถไบบๅคฑ่ดฅ" - }, - "navigation": { - "dashboard": "ไปช่กจ็›˜" - }, "common": { "loading": "ๅŠ ่ฝฝไธญ๏ผŒ่ฏท็จๅ€™...", "cancel": "ๅ–ๆถˆ", @@ -78,6 +24,22 @@ "success": "ๅ…ฑไบซๅˆ›ๅปบๆˆๅŠŸ", "error": "ๅˆ›ๅปบๅ…ฑไบซๅคฑ่ดฅ" }, + "dashboard": { + "loadError": "ๅŠ ่ฝฝไปช่กจ็›˜ๆ•ฐๆฎๅคฑ่ดฅ", + "linkCopied": "้“พๆŽฅๅทฒๅคๅˆถๅˆฐๅ‰ช่ดดๆฟ", + "pageTitle": "ไปช่กจ็›˜", + "breadcrumb": "ไปช่กจ็›˜" + }, + "emptyState": { + "noFiles": "ๅฐšๆœชไธŠไผ ไปปไฝ•ๆ–‡ไปถ", + "uploadFile": "ไธŠไผ ๆ–‡ไปถ" + }, + "errors": { + "invalidCredentials": "็”ตๅญ้‚ฎไปถๆˆ–ๅฏ†็ ้”™่ฏฏ", + "userNotFound": "ๆœชๆ‰พๅˆฐ็”จๆˆท", + "accountLocked": "่ดฆๆˆทๅทฒ้”ๅฎšใ€‚่ฏท็จๅŽๅ†่ฏ•", + "unexpectedError": "ๅ‘็”Ÿๆ„ๅค–้”™่ฏฏใ€‚่ฏท้‡่ฏ•" + }, "fileActions": { "editFile": "็ผ–่พ‘ๆ–‡ไปถ", "nameLabel": "ๅ็งฐ", @@ -89,6 +51,13 @@ "deleteConfirmation": "ๆ‚จ็กฎๅฎš่ฆๅˆ ้™คโ€œ{{fileName}}โ€ๅ—๏ผŸ", "deleteWarning": "ๆญคๆ“ไฝœไธๅฏๆ’ค้”€ใ€‚" }, + "fileManager": { + "downloadError": "ๆ–‡ไปถไธ‹่ฝฝๅคฑ่ดฅ", + "updateSuccess": "ๆ–‡ไปถๆ›ดๆ–ฐๆˆๅŠŸ", + "updateError": "ๆ–‡ไปถๆ›ดๆ–ฐๅคฑ่ดฅ", + "deleteSuccess": "ๆ–‡ไปถๅˆ ้™คๆˆๅŠŸ", + "deleteError": "ๆ–‡ไปถๅˆ ้™คๅคฑ่ดฅ" + }, "filePreview": { "loading": "ๆญฃๅœจๅŠ ่ฝฝ้ข„่งˆ...", "notAvailable": "้ข„่งˆไธๅฏ็”จ", @@ -98,68 +67,21 @@ "loadError": "ๅŠ ่ฝฝ้ข„่งˆๅคฑ่ดฅ", "downloadError": "ไธ‹่ฝฝๆ–‡ไปถๅคฑ่ดฅ" }, - "generateShareLink": { - "generateTitle": "็”Ÿๆˆๅ…ฑไบซ้“พๆŽฅ", - "updateTitle": "ๆ›ดๆ–ฐๅ…ฑไบซ้“พๆŽฅ", - "generateDescription": "็”Ÿๆˆ็”จไบŽๅ…ฑไบซๆ–‡ไปถ็š„้“พๆŽฅ", - "updateDescription": "ๆ›ดๆ–ฐๆญคๅ…ฑไบซ้“พๆŽฅ็š„ๅˆซๅ", - "aliasPlaceholder": "่ฏท่พ“ๅ…ฅๅˆซๅ", - "linkReady": "ๆ‚จ็š„ๅ…ฑไบซ้“พๆŽฅๅทฒๅ‡†ๅค‡ๅฅฝ๏ผš", - "generateButton": "็”Ÿๆˆ้“พๆŽฅ", - "updateButton": "ๆ›ดๆ–ฐ้“พๆŽฅ", - "copyButton": "ๅคๅˆถ้“พๆŽฅ", - "success": "้“พๆŽฅ็”ŸๆˆๆˆๅŠŸ", - "error": "็”Ÿๆˆ้“พๆŽฅๅคฑ่ดฅ", - "copied": "้“พๆŽฅๅทฒๅคๅˆถๅˆฐๅ‰ช่ดดๆฟ" + "fileSelector": { + "availableFiles": "ๅฏ็”จๆ–‡ไปถ ({{count}})", + "shareFiles": "ๅ…ฑไบซๆ–‡ไปถ ({{count}})", + "searchPlaceholder": "ๆœ็ดขๆ–‡ไปถ...", + "noMatchingFiles": "ๆฒกๆœ‰ๅŒน้…็š„ๆ–‡ไปถ", + "noAvailableFiles": "ๆฒกๆœ‰ๅฏ็”จ็š„ๆ–‡ไปถ", + "noFilesInShare": "ๅ…ฑไบซไธญๆฒกๆœ‰ๆ–‡ไปถ", + "saveChanges": "ไฟๅญ˜ๆ›ดๆ”น" }, - "shareActions": { - "deleteTitle": "ๅˆ ้™คๅ…ฑไบซ", - "deleteConfirmation": "ๆ‚จ็กฎๅฎš่ฆๅˆ ้™คๆญคๅ…ฑไบซๅ—๏ผŸๆญคๆ“ไฝœไธๅฏๆ’ค้”€ใ€‚", - "editTitle": "็ผ–่พ‘ๅ…ฑไบซ", - "nameLabel": "ๅ…ฑไบซๅ็งฐ", - "expirationLabel": "่ฟ‡ๆœŸๆ—ฅๆœŸ", - "expirationPlaceholder": "MM/DD/YYYY HH:MM", - "maxViewsLabel": "ๆœ€ๅคงๆŸฅ็œ‹ๆฌกๆ•ฐ", - "maxViewsPlaceholder": "็•™็ฉบ่กจ็คบๆ— ้™", - "passwordProtection": "ๅฏ†็ ไฟๆŠค", - "passwordLabel": "ๅฏ†็ ", - "passwordPlaceholder": "่ฏท่พ“ๅ…ฅๅฏ†็ ", - "newPasswordLabel": "ๆ–ฐๅฏ†็ ๏ผˆ็•™็ฉบ่กจ็คบไฟๆŒๅฝ“ๅ‰ๅฏ†็ ๏ผ‰", - "newPasswordPlaceholder": "่ฏท่พ“ๅ…ฅๆ–ฐๅฏ†็ ", - "manageFilesTitle": "็ฎก็†ๆ–‡ไปถ", - "manageRecipientsTitle": "็ฎก็†ๆ”ถไปถไบบ", - "editSuccess": "ๅ…ฑไบซๆ›ดๆ–ฐๆˆๅŠŸ", - "editError": "ๆ›ดๆ–ฐๅ…ฑไบซๅคฑ่ดฅ" - }, - "shareDetails": { - "title": "ๅ…ฑไบซ่ฏฆๆƒ…", - "subtitle": "ๅ…ณไบŽๆญคๅ…ฑไบซ็š„่ฏฆ็ป†ไฟกๆฏ", - "basicInfo": "ๅŸบๆœฌไฟกๆฏ", - "name": "ๅ็งฐ", - "untitled": "ๆœชๅ‘ฝๅ", - "views": "ๆŸฅ็œ‹ๆฌกๆ•ฐ", - "dates": "ๆ—ฅๆœŸ", - "created": "ๅˆ›ๅปบไบŽ", - "expires": "่ฟ‡ๆœŸไบŽ", - "never": "ไปŽไธ", - "security": "ๅฎ‰ๅ…จๆ€ง", - "passwordProtected": "ๅ—ๅฏ†็ ไฟๆŠค", - "publicAccess": "ๅ…ฌๅผ€่ฎฟ้—ฎ", - "maxViews": "ๆœ€ๅคงๆŸฅ็œ‹ๆฌกๆ•ฐ๏ผš{{count}}", - "files": "ๆ–‡ไปถ ({{count}})", - "recipients": "ๆ”ถไปถไบบ ({{count}})", - "notAvailable": "ไธ้€‚็”จ", - "invalidDate": "ๆ— ๆ•ˆ็š„ๆ—ฅๆœŸ", - "loadError": "ๅŠ ่ฝฝๅ…ฑไบซ่ฏฆๆƒ…ๅคฑ่ดฅ" - }, - "uploadFile": { - "title": "ไธŠไผ ๆ–‡ไปถ", - "selectFile": "็‚นๅ‡ป้€‰ๆ‹ฉๆ–‡ไปถ", - "preview": "้ข„่งˆ", - "uploadProgress": "ไธŠไผ ่ฟ›ๅบฆ", - "upload": "ไธŠไผ ", - "success": "ๆ–‡ไปถไธŠไผ ๆˆๅŠŸ", - "error": "ๆ–‡ไปถไธŠไผ ๅคฑ่ดฅ" + "files": { + "title": "ๆ‰€ๆœ‰ๆ–‡ไปถ", + "uploadFile": "ไธŠไผ ๆ–‡ไปถ", + "loadError": "ๅŠ ่ฝฝๆ–‡ไปถๅคฑ่ดฅ", + "pageTitle": "ๆˆ‘็š„ๆ–‡ไปถ", + "breadcrumb": "ๆˆ‘็š„ๆ–‡ไปถ" }, "filesTable": { "ariaLabel": "ๆ–‡ไปถ่กจๆ ผ", @@ -179,119 +101,10 @@ "delete": "ๅˆ ้™ค" } }, - "sharesTable": { - "ariaLabel": "ๅ…ฑไบซ่กจๆ ผ", - "never": "ไปŽไธ", - "columns": { - "name": "ๅ็งฐ", - "createdAt": "ๅˆ›ๅปบๆ—ถ้—ด", - "expiresAt": "่ฟ‡ๆœŸๆ—ถ้—ด", - "status": "็Šถๆ€", - "security": "ๅฎ‰ๅ…จๆ€ง", - "files": "ๆ–‡ไปถ", - "recipients": "ๆ”ถไปถไบบ", - "actions": "ๆ“ไฝœ" - }, - "status": { - "neverExpires": "ๆฐธไธ่ฟ‡ๆœŸ", - "active": "ๆดป่ทƒ", - "expired": "ๅทฒ่ฟ‡ๆœŸ" - }, - "security": { - "protected": "ๅ—ไฟๆŠค", - "public": "ๅ…ฌๅผ€" - }, - "filesCount": "{{count}} ไธชๆ–‡ไปถ", - "recipientsCount": "{{count}} ไธชๆ”ถไปถไบบ", - "actions": { - "menu": "ๅ…ฑไบซๆ“ไฝœ่œๅ•", - "edit": "็ผ–่พ‘", - "manageFiles": "็ฎก็†ๆ–‡ไปถ", - "manageRecipients": "็ฎก็†ๆ”ถไปถไบบ", - "viewDetails": "ๆŸฅ็œ‹่ฏฆๆƒ…", - "generateLink": "็”Ÿๆˆ้“พๆŽฅ", - "editLink": "็ผ–่พ‘้“พๆŽฅ", - "copyLink": "ๅคๅˆถ้“พๆŽฅ", - "notifyRecipients": "้€š็Ÿฅๆ”ถไปถไบบ", - "delete": "ๅˆ ้™ค" - } - }, "footer": { "poweredBy": "ๆŠ€ๆœฏๆ”ฏๆŒ๏ผš", "kyanHomepage": "Kyantech ไธป้กต" }, - "fileManager": { - "downloadError": "ๆ–‡ไปถไธ‹่ฝฝๅคฑ่ดฅ", - "updateSuccess": "ๆ–‡ไปถๆ›ดๆ–ฐๆˆๅŠŸ", - "updateError": "ๆ–‡ไปถๆ›ดๆ–ฐๅคฑ่ดฅ", - "deleteSuccess": "ๆ–‡ไปถๅˆ ้™คๆˆๅŠŸ", - "deleteError": "ๆ–‡ไปถๅˆ ้™คๅคฑ่ดฅ" - }, - "shareManager": { - "deleteSuccess": "ๅ…ฑไบซๅˆ ้™คๆˆๅŠŸ", - "deleteError": "ๅ…ฑไบซๅˆ ้™คๅคฑ่ดฅ", - "updateSuccess": "ๅ…ฑไบซๆ›ดๆ–ฐๆˆๅŠŸ", - "updateError": "ๅ…ฑไบซๆ›ดๆ–ฐๅคฑ่ดฅ", - "filesUpdateSuccess": "ๆ–‡ไปถๆ›ดๆ–ฐๆˆๅŠŸ", - "filesUpdateError": "ๆ–‡ไปถๆ›ดๆ–ฐๅคฑ่ดฅ", - "recipientsUpdateSuccess": "ๆ”ถไปถไบบๆ›ดๆ–ฐๆˆๅŠŸ", - "recipientsUpdateError": "ๆ”ถไปถไบบๆ›ดๆ–ฐๅคฑ่ดฅ", - "linkGenerateSuccess": "ๅ…ฑไบซ้“พๆŽฅ็”ŸๆˆๆˆๅŠŸ", - "linkGenerateError": "ๅ…ฑไบซ้“พๆŽฅ็”Ÿๆˆๅคฑ่ดฅ", - "notifyLoading": "ๆญฃๅœจๅ‘้€้€š็Ÿฅ...", - "notifySuccess": "้€š็Ÿฅๆ”ถไปถไบบๆˆๅŠŸ", - "notifyError": "้€š็Ÿฅๆ”ถไปถไบบๅคฑ่ดฅ" - }, - "quickAccess": { - "files": { - "title": "ๆˆ‘็š„ๆ–‡ไปถ", - "description": "่ฎฟ้—ฎๅ’Œ็ฎก็†ๆ‚จไธŠไผ ็š„ๆ–‡ไปถ" - }, - "shares": { - "title": "ๆˆ‘็š„ๅ…ฑไบซ", - "description": "ๆŸฅ็œ‹ๅ’Œ็ฎก็†ๆ‚จๅ…ฑไบซ็š„ๆ–‡ไปถ" - } - }, - "recentFiles": { - "title": "ๆœ€่ฟ‘ไธŠไผ ", - "viewAll": "ๆŸฅ็œ‹ๅ…จ้ƒจ", - "uploadFile": "ไธŠไผ ๆ–‡ไปถ", - "noFiles": "ๅฐšๆœชไธŠไผ ๆ–‡ไปถ" - }, - "recentShares": { - "title": "ๆœ€่ฟ‘ๅ…ฑไบซ", - "viewAll": "ๆŸฅ็œ‹ๅ…จ้ƒจ", - "createShare": "ๅˆ›ๅปบๅ…ฑไบซ", - "noShares": "ๅฐšๆœชๅˆ›ๅปบๅ…ฑไบซ", - "createFirst": "่ฏทๅˆ›ๅปบๆ‚จ็š„็ฌฌไธ€ไธชๅ…ฑไบซ" - }, - "storageUsage": { - "title": "ๅญ˜ๅ‚จไฝฟ็”จๆƒ…ๅ†ต", - "ariaLabel": "ๅญ˜ๅ‚จไฝฟ็”จ่ฟ›ๅบฆๆก", - "used": "ๅทฒไฝฟ็”จ๏ผš{{size}}", - "available": "ๅฏ็”จ๏ผš{{size}}" - }, - "dashboard": { - "loadError": "ๅŠ ่ฝฝไปช่กจ็›˜ๆ•ฐๆฎๅคฑ่ดฅ", - "linkCopied": "้“พๆŽฅๅทฒๅคๅˆถๅˆฐๅ‰ช่ดดๆฟ", - "pageTitle": "ไปช่กจ็›˜", - "breadcrumb": "ไปช่กจ็›˜" - }, - "emptyState": { - "noFiles": "ๅฐšๆœชไธŠไผ ไปปไฝ•ๆ–‡ไปถ", - "uploadFile": "ไธŠไผ ๆ–‡ไปถ" - }, - "files": { - "title": "ๆ‰€ๆœ‰ๆ–‡ไปถ", - "uploadFile": "ไธŠไผ ๆ–‡ไปถ", - "loadError": "ๅŠ ่ฝฝๆ–‡ไปถๅคฑ่ดฅ", - "pageTitle": "ๆˆ‘็š„ๆ–‡ไปถ", - "breadcrumb": "ๆˆ‘็š„ๆ–‡ไปถ" - }, - "searchBar": { - "placeholder": "ๆœ็ดขๆ–‡ไปถ...", - "results": "ๅ…ฑ{{total}}ไธชๆ–‡ไปถ๏ผŒๆ‰พๅˆฐ{{filtered}}ไธช" - }, "forgotPassword": { "emailLabel": "็”ตๅญ้‚ฎไปถๅœฐๅ€", "emailPlaceholder": "่ฏท่พ“ๅ…ฅๆ‚จ็š„็”ตๅญ้‚ฎไปถ", @@ -303,6 +116,20 @@ "resetInstructions": "ๅฏ†็ ้‡็ฝฎๆŒ‡ไปคๅทฒๅ‘้€ๅˆฐๆ‚จ็š„็”ตๅญ้‚ฎไปถ", "pageTitle": "ๅฟ˜่ฎฐๅฏ†็ ๏ผŸ" }, + "generateShareLink": { + "generateTitle": "็”Ÿๆˆๅ…ฑไบซ้“พๆŽฅ", + "updateTitle": "ๆ›ดๆ–ฐๅ…ฑไบซ้“พๆŽฅ", + "generateDescription": "็”Ÿๆˆ็”จไบŽๅ…ฑไบซๆ–‡ไปถ็š„้“พๆŽฅ", + "updateDescription": "ๆ›ดๆ–ฐๆญคๅ…ฑไบซ้“พๆŽฅ็š„ๅˆซๅ", + "aliasPlaceholder": "่ฏท่พ“ๅ…ฅๅˆซๅ", + "linkReady": "ๆ‚จ็š„ๅ…ฑไบซ้“พๆŽฅๅทฒๅ‡†ๅค‡ๅฅฝ๏ผš", + "generateButton": "็”Ÿๆˆ้“พๆŽฅ", + "updateButton": "ๆ›ดๆ–ฐ้“พๆŽฅ", + "copyButton": "ๅคๅˆถ้“พๆŽฅ", + "success": "้“พๆŽฅ็”ŸๆˆๆˆๅŠŸ", + "error": "็”Ÿๆˆ้“พๆŽฅๅคฑ่ดฅ", + "copied": "้“พๆŽฅๅทฒๅคๅˆถๅˆฐๅ‰ช่ดดๆฟ" + }, "home": { "description": "WeTransfer็š„ๅผ€ๆบๆ›ฟไปฃๆ–นๆกˆใ€‚ๅฎ‰ๅ…จๅˆ†ไบซๆ–‡ไปถ๏ผŒๆ— ้œ€่ทŸ่ธชๆˆ–้™ๅˆถใ€‚", "documentation": "ๆ–‡ๆกฃ", @@ -314,6 +141,46 @@ }, "pageTitle": "้ฆ–้กต" }, + "login": { + "welcome": "ๆฌข่ฟŽๆ‚จ", + "signInToContinue": "่ฏท็™ปๅฝ•ไปฅ็ปง็ปญ", + "emailLabel": "็”ตๅญ้‚ฎไปถๅœฐๅ€", + "emailPlaceholder": "่ฏท่พ“ๅ…ฅๆ‚จ็š„็”ตๅญ้‚ฎไปถ", + "passwordLabel": "ๅฏ†็ ", + "passwordPlaceholder": "่ฏท่พ“ๅ…ฅๆ‚จ็š„ๅฏ†็ ", + "signIn": "็™ปๅฝ•", + "signingIn": "ๆญฃๅœจ็™ปๅฝ•...", + "forgotPassword": "ๅฟ˜่ฎฐๅฏ†็ ๏ผŸ", + "pageTitle": "็™ปๅฝ•" + }, + "logo": { + "labels": { + "appLogo": "ๅบ”็”จLogo" + }, + "buttons": { + "upload": "ไธŠไผ Logo", + "remove": "ๅˆ ้™คLogo" + }, + "messages": { + "uploadSuccess": "LogoไธŠไผ ๆˆๅŠŸ", + "removeSuccess": "Logoๅˆ ้™คๆˆๅŠŸ" + }, + "errors": { + "uploadFailed": "LogoไธŠไผ ๅคฑ่ดฅ", + "removeFailed": "Logoๅˆ ้™คๅคฑ่ดฅ" + } + }, + "navbar": { + "logoAlt": "ๅบ”็”จLogo", + "profileMenu": "ไธชไบบ่œๅ•", + "profile": "ไธชไบบ่ต„ๆ–™", + "settings": "่ฎพ็ฝฎ", + "usersManagement": "็”จๆˆท็ฎก็†", + "logout": "้€€ๅ‡บ็™ปๅฝ•" + }, + "navigation": { + "dashboard": "ไปช่กจ็›˜" + }, "profile": { "password": { "title": "ไฟฎๆ”นๅฏ†็ ", @@ -356,6 +223,43 @@ }, "pageTitle": "ไธชไบบ่ต„ๆ–™" }, + "quickAccess": { + "files": { + "title": "ๆˆ‘็š„ๆ–‡ไปถ", + "description": "่ฎฟ้—ฎๅ’Œ็ฎก็†ๆ‚จไธŠไผ ็š„ๆ–‡ไปถ" + }, + "shares": { + "title": "ๆˆ‘็š„ๅ…ฑไบซ", + "description": "ๆŸฅ็œ‹ๅ’Œ็ฎก็†ๆ‚จๅ…ฑไบซ็š„ๆ–‡ไปถ" + } + }, + "recentFiles": { + "title": "ๆœ€่ฟ‘ไธŠไผ ", + "viewAll": "ๆŸฅ็œ‹ๅ…จ้ƒจ", + "uploadFile": "ไธŠไผ ๆ–‡ไปถ", + "noFiles": "ๅฐšๆœชไธŠไผ ๆ–‡ไปถ" + }, + "recentShares": { + "title": "ๆœ€่ฟ‘ๅ…ฑไบซ", + "viewAll": "ๆŸฅ็œ‹ๅ…จ้ƒจ", + "createShare": "ๅˆ›ๅปบๅ…ฑไบซ", + "noShares": "ๅฐšๆœชๅˆ›ๅปบๅ…ฑไบซ", + "createFirst": "่ฏทๅˆ›ๅปบๆ‚จ็š„็ฌฌไธ€ไธชๅ…ฑไบซ" + }, + "recipientSelector": { + "emailPlaceholder": "่ฏท่พ“ๅ…ฅๆ”ถไปถไบบ็”ตๅญ้‚ฎไปถ", + "add": "ๆทปๅŠ ", + "recipients": "ๆ”ถไปถไบบ ({{count}})", + "notifyAll": "้€š็Ÿฅๆ‰€ๆœ‰ไบบ", + "noRecipients": "่ฟ˜ๆฒกๆœ‰ๆทปๅŠ ๆ”ถไปถไบบ", + "addSuccess": "ๆ”ถไปถไบบๆทปๅŠ ๆˆๅŠŸ", + "addError": "ๆทปๅŠ ๆ”ถไปถไบบๅคฑ่ดฅ", + "removeSuccess": "ๆ”ถไปถไบบๅˆ ้™คๆˆๅŠŸ", + "removeError": "ๅˆ ้™คๆ”ถไปถไบบๅคฑ่ดฅ", + "sendingNotifications": "ๆญฃๅœจๅ‘้€้€š็Ÿฅ...", + "notifySuccess": "ๆ”ถไปถไบบ้€š็ŸฅๆˆๅŠŸ", + "notifyError": "้€š็Ÿฅๆ”ถไปถไบบๅคฑ่ดฅ" + }, "resetPassword": { "pageTitle": "้‡็ฝฎๅฏ†็ ", "header": { @@ -379,6 +283,10 @@ "invalidToken": "ๆ— ๆ•ˆๆˆ–็ผบๅคฑ้‡็ฝฎไปค็‰Œ" } }, + "searchBar": { + "placeholder": "ๆœ็ดขๆ–‡ไปถ...", + "results": "ๅ…ฑ{{total}}ไธชๆ–‡ไปถ๏ผŒๆ‰พๅˆฐ{{filtered}}ไธช" + }, "settings": { "groups": { "defaultDescription": "้…็ฝฎ้€‰้กน", @@ -513,6 +421,61 @@ }, "pageTitle": "ๅ…ฑไบซ" }, + "shareActions": { + "deleteTitle": "ๅˆ ้™คๅ…ฑไบซ", + "deleteConfirmation": "ๆ‚จ็กฎๅฎš่ฆๅˆ ้™คๆญคๅ…ฑไบซๅ—๏ผŸๆญคๆ“ไฝœไธๅฏๆ’ค้”€ใ€‚", + "editTitle": "็ผ–่พ‘ๅ…ฑไบซ", + "nameLabel": "ๅ…ฑไบซๅ็งฐ", + "expirationLabel": "่ฟ‡ๆœŸๆ—ฅๆœŸ", + "expirationPlaceholder": "MM/DD/YYYY HH:MM", + "maxViewsLabel": "ๆœ€ๅคงๆŸฅ็œ‹ๆฌกๆ•ฐ", + "maxViewsPlaceholder": "็•™็ฉบ่กจ็คบๆ— ้™", + "passwordProtection": "ๅฏ†็ ไฟๆŠค", + "passwordLabel": "ๅฏ†็ ", + "passwordPlaceholder": "่ฏท่พ“ๅ…ฅๅฏ†็ ", + "newPasswordLabel": "ๆ–ฐๅฏ†็ ๏ผˆ็•™็ฉบ่กจ็คบไฟๆŒๅฝ“ๅ‰ๅฏ†็ ๏ผ‰", + "newPasswordPlaceholder": "่ฏท่พ“ๅ…ฅๆ–ฐๅฏ†็ ", + "manageFilesTitle": "็ฎก็†ๆ–‡ไปถ", + "manageRecipientsTitle": "็ฎก็†ๆ”ถไปถไบบ", + "editSuccess": "ๅ…ฑไบซๆ›ดๆ–ฐๆˆๅŠŸ", + "editError": "ๆ›ดๆ–ฐๅ…ฑไบซๅคฑ่ดฅ" + }, + "shareDetails": { + "title": "ๅ…ฑไบซ่ฏฆๆƒ…", + "subtitle": "ๅ…ณไบŽๆญคๅ…ฑไบซ็š„่ฏฆ็ป†ไฟกๆฏ", + "basicInfo": "ๅŸบๆœฌไฟกๆฏ", + "name": "ๅ็งฐ", + "untitled": "ๆœชๅ‘ฝๅ", + "views": "ๆŸฅ็œ‹ๆฌกๆ•ฐ", + "dates": "ๆ—ฅๆœŸ", + "created": "ๅˆ›ๅปบไบŽ", + "expires": "่ฟ‡ๆœŸไบŽ", + "never": "ไปŽไธ", + "security": "ๅฎ‰ๅ…จๆ€ง", + "passwordProtected": "ๅ—ๅฏ†็ ไฟๆŠค", + "publicAccess": "ๅ…ฌๅผ€่ฎฟ้—ฎ", + "maxViews": "ๆœ€ๅคงๆŸฅ็œ‹ๆฌกๆ•ฐ:", + "files": "ๆ–‡ไปถ", + "recipients": "ๆ”ถไปถไบบ", + "notAvailable": "ไธ้€‚็”จ", + "invalidDate": "ๆ— ๆ•ˆ็š„ๆ—ฅๆœŸ", + "loadError": "ๅŠ ่ฝฝๅ…ฑไบซ่ฏฆๆƒ…ๅคฑ่ดฅ" + }, + "shareManager": { + "deleteSuccess": "ๅ…ฑไบซๅˆ ้™คๆˆๅŠŸ", + "deleteError": "ๅ…ฑไบซๅˆ ้™คๅคฑ่ดฅ", + "updateSuccess": "ๅ…ฑไบซๆ›ดๆ–ฐๆˆๅŠŸ", + "updateError": "ๅ…ฑไบซๆ›ดๆ–ฐๅคฑ่ดฅ", + "filesUpdateSuccess": "ๆ–‡ไปถๆ›ดๆ–ฐๆˆๅŠŸ", + "filesUpdateError": "ๆ–‡ไปถๆ›ดๆ–ฐๅคฑ่ดฅ", + "recipientsUpdateSuccess": "ๆ”ถไปถไบบๆ›ดๆ–ฐๆˆๅŠŸ", + "recipientsUpdateError": "ๆ”ถไปถไบบๆ›ดๆ–ฐๅคฑ่ดฅ", + "linkGenerateSuccess": "ๅ…ฑไบซ้“พๆŽฅ็”ŸๆˆๆˆๅŠŸ", + "linkGenerateError": "ๅ…ฑไบซ้“พๆŽฅ็”Ÿๆˆๅคฑ่ดฅ", + "notifyLoading": "ๆญฃๅœจๅ‘้€้€š็Ÿฅ...", + "notifySuccess": "้€š็Ÿฅๆ”ถไปถไบบๆˆๅŠŸ", + "notifyError": "้€š็Ÿฅๆ”ถไปถไบบๅคฑ่ดฅ" + }, "shares": { "errors": { "loadFailed": "ๅŠ ่ฝฝๅ…ฑไบซๅคฑ่ดฅ", @@ -539,6 +502,64 @@ }, "pageTitle": "ๅ…ฑไบซ" }, + "sharesTable": { + "ariaLabel": "ๅ…ฑไบซ่กจๆ ผ", + "never": "ไปŽไธ", + "columns": { + "name": "ๅ็งฐ", + "createdAt": "ๅˆ›ๅปบๆ—ถ้—ด", + "expiresAt": "่ฟ‡ๆœŸๆ—ถ้—ด", + "status": "็Šถๆ€", + "security": "ๅฎ‰ๅ…จๆ€ง", + "files": "ๆ–‡ไปถ", + "recipients": "ๆ”ถไปถไบบ", + "actions": "ๆ“ไฝœ" + }, + "status": { + "neverExpires": "ๆฐธไธ่ฟ‡ๆœŸ", + "active": "ๆดป่ทƒ", + "expired": "ๅทฒ่ฟ‡ๆœŸ" + }, + "security": { + "protected": "ๅ—ไฟๆŠค", + "public": "ๅ…ฌๅผ€" + }, + "filesCount": "ไธชๆ–‡ไปถ", + "recipientsCount": "ไธชๆ”ถไปถไบบ", + "actions": { + "menu": "ๅ…ฑไบซๆ“ไฝœ่œๅ•", + "edit": "็ผ–่พ‘", + "manageFiles": "็ฎก็†ๆ–‡ไปถ", + "manageRecipients": "็ฎก็†ๆ”ถไปถไบบ", + "viewDetails": "ๆŸฅ็œ‹่ฏฆๆƒ…", + "generateLink": "็”Ÿๆˆ้“พๆŽฅ", + "editLink": "็ผ–่พ‘้“พๆŽฅ", + "copyLink": "ๅคๅˆถ้“พๆŽฅ", + "notifyRecipients": "้€š็Ÿฅๆ”ถไปถไบบ", + "delete": "ๅˆ ้™ค" + } + }, + "storageUsage": { + "title": "ๅญ˜ๅ‚จไฝฟ็”จๆƒ…ๅ†ต", + "ariaLabel": "ๅญ˜ๅ‚จไฝฟ็”จ่ฟ›ๅบฆๆก", + "used": "ๅทฒไฝฟ็”จ๏ผš", + "available": "ๅฏ็”จ๏ผš" + }, + "theme": { + "toggle": "ๅˆ‡ๆขไธป้ข˜", + "light": "ๆ˜Žไบฎ", + "dark": "ๆš—้ป‘", + "system": "็ณป็ปŸ" + }, + "uploadFile": { + "title": "ไธŠไผ ๆ–‡ไปถ", + "selectFile": "็‚นๅ‡ป้€‰ๆ‹ฉๆ–‡ไปถ", + "preview": "้ข„่งˆ", + "uploadProgress": "ไธŠไผ ่ฟ›ๅบฆ", + "upload": "ไธŠไผ ", + "success": "ๆ–‡ไปถไธŠไผ ๆˆๅŠŸ", + "error": "ๆ–‡ไปถไธŠไผ ๅคฑ่ดฅ" + }, "users": { "modes": { "create": "ๅˆ›ๅปบ", @@ -608,29 +629,16 @@ "userr": "็”จๆˆท" } }, - "logo": { - "labels": { - "appLogo": "ๅบ”็”จLogo" - }, - "buttons": { - "upload": "ไธŠไผ Logo", - "remove": "ๅˆ ้™คLogo" - }, - "messages": { - "uploadSuccess": "LogoไธŠไผ ๆˆๅŠŸ", - "removeSuccess": "Logoๅˆ ้™คๆˆๅŠŸ" - }, - "errors": { - "uploadFailed": "LogoไธŠไผ ๅคฑ่ดฅ", - "removeFailed": "Logoๅˆ ้™คๅคฑ่ดฅ" - } - }, - "navbar": { - "logoAlt": "ๅบ”็”จLogo", - "profileMenu": "ไธชไบบ่œๅ•", - "profile": "ไธชไบบ่ต„ๆ–™", - "settings": "่ฎพ็ฝฎ", - "usersManagement": "็”จๆˆท็ฎก็†", - "logout": "้€€ๅ‡บ็™ปๅฝ•" + "validation": { + "invalidEmail": "ๆ— ๆ•ˆ็š„็”ตๅญ้‚ฎไปถๅœฐๅ€", + "passwordMinLength": "ๅฏ†็ ่‡ณๅฐ‘้œ€่ฆ6ไธชๅญ—็ฌฆ", + "firstNameRequired": "ๅๅญ—ไธบๅฟ…ๅกซ้กน", + "lastNameRequired": "ๅง“ๆฐไธบๅฟ…ๅกซ้กน", + "usernameLength": "็”จๆˆทๅ่‡ณๅฐ‘้œ€่ฆ3ไธชๅญ—็ฌฆ", + "usernameSpaces": "็”จๆˆทๅไธ่ƒฝๅŒ…ๅซ็ฉบๆ ผ", + "passwordLength": "ๅฏ†็ ่‡ณๅฐ‘้œ€่ฆ8ไธชๅญ—็ฌฆ", + "passwordsMatch": "ๅฏ†็ ไธๅŒน้…", + "emailRequired": "็”ตๅญ้‚ฎไปถไธบๅฟ…ๅกซ้กน", + "passwordRequired": "ๅฏ†็ ไธบๅฟ…ๅกซ้กน" } -} \ No newline at end of file +} diff --git a/apps/web/next.config.ts b/apps/web/next.config.ts new file mode 100644 index 0000000..1747441 --- /dev/null +++ b/apps/web/next.config.ts @@ -0,0 +1,27 @@ +import { NextConfig } from "next"; +import createNextIntlPlugin from "next-intl/plugin"; + +const nextConfig: NextConfig = { + output: "standalone", + eslint: { + ignoreDuringBuilds: true, + }, + typescript: { + ignoreBuildErrors: true, + }, + images: { + remotePatterns: [ + { + protocol: 'https', + hostname: '**', + }, + { + protocol: 'http', + hostname: '**', + }, + ], + } +}; + +const withNextIntl = createNextIntlPlugin(); +export default withNextIntl(nextConfig); diff --git a/apps/web/orval.config.ts b/apps/web/orval.config.ts deleted file mode 100644 index fd62abd..0000000 --- a/apps/web/orval.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - "palmr-file": { - input: "./routes.json", - output: { - mode: "single", - target: "./src/http/endpoints/palmrAPI.ts", - schemas: "./src/http/models", - }, - }, -}; diff --git a/apps/web/package.json b/apps/web/package.json index 4982fb0..2b63acb 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,87 +1,68 @@ { - "name": "vite-template", + "name": "palmr-app-v2", + "version": "2.0.0", "private": true, - "version": "1.1.6", - "type": "module", "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "lint": "eslint -c .eslintrc.json ./src/**/**/*.{ts,tsx} --fix", - "preview": "vite preview", - "format": "prettier --write ." + "dev": "next dev --turbopack", + "build": "next build", + "start": "next start", + "lint": "eslint \"src/**/*.+(ts|tsx)\"", + "lint:fix": "eslint \"src/**/*.+(ts|tsx)\" --fix", + "format": "prettier . --write", + "format:check": "prettier . --check" }, "dependencies": { - "@heroui/avatar": "^2.2.7", - "@heroui/badge": "^2.2.6", - "@heroui/breadcrumbs": "^2.2.7", - "@heroui/button": "2.2.10", - "@heroui/card": "^2.2.10", - "@heroui/chip": "^2.2.7", - "@heroui/code": "2.2.7", - "@heroui/divider": "^2.2.6", - "@heroui/dropdown": "2.3.10", - "@heroui/form": "^2.1.14", - "@heroui/image": "^2.2.6", - "@heroui/input": "2.4.10", - "@heroui/kbd": "2.2.7", - "@heroui/link": "2.2.8", - "@heroui/modal": "^2.2.8", - "@heroui/navbar": "2.2.9", - "@heroui/progress": "^2.2.7", - "@heroui/select": "2.4.9", - "@heroui/snippet": "2.2.11", - "@heroui/spinner": "^2.2.12", - "@heroui/switch": "2.2.9", - "@heroui/system": "2.4.6", - "@heroui/table": "^2.2.9", - "@heroui/theme": "2.4.6", - "@hookform/resolvers": "^4.0.0", - "@react-aria/selection": "3.21.0", - "@react-aria/utils": "3.27.0", - "@react-aria/visually-hidden": "3.8.19", - "@react-types/shared": "3.27.0", - "axios": "^1.7.9", - "clsx": "2.1.1", + "@hookform/resolvers": "^5.0.1", + "@radix-ui/react-aspect-ratio": "^1.1.3", + "@radix-ui/react-avatar": "^1.1.4", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-dropdown-menu": "^2.1.6", + "@radix-ui/react-label": "^2.1.2", + "@radix-ui/react-progress": "^1.1.3", + "@radix-ui/react-scroll-area": "^1.2.4", + "@radix-ui/react-select": "^2.1.7", + "@radix-ui/react-separator": "^1.1.3", + "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-switch": "^1.1.4", + "@tabler/icons-react": "^3.31.0", + "axios": "^1.8.4", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", "date-fns": "^4.1.0", - "framer-motion": "12.4.1", - "i18next": "^24.2.2", - "i18next-browser-languagedetector": "^8.0.3", - "nanoid": "^5.0.9", - "react": "18.3.1", + "framer-motion": "^12.6.3", + "lucide-react": "^0.487.0", + "nanoid": "^5.1.5", + "next": "15.2.4", + "next-intl": "^4.0.2", + "next-themes": "^0.4.6", + "nookies": "^2.5.2", + "react": "^19.1.0", "react-country-flag": "^3.1.0", - "react-dom": "18.3.1", - "react-hook-form": "^7.54.2", - "react-i18next": "^15.4.1", - "react-icons": "^5.4.0", - "react-router-dom": "6.23.0", - "sonner": "^1.7.4", - "tailwind-variants": "0.3.1", - "tailwindcss": "3.4.16", - "zod": "^3.24.1" + "react-dom": "^19.1.0", + "react-hook-form": "^7.55.0", + "sonner": "^2.0.3", + "tailwind-merge": "^3.1.0", + "tw-animate-css": "^1.2.5", + "zod": "^3.24.2", + "zustand": "^5.0.3" }, "devDependencies": { - "@trivago/prettier-plugin-sort-imports": "^5.2.2", - "@types/node": "22.13.1", - "@types/react": "18.3.3", - "@types/react-dom": "18.3.0", - "@typescript-eslint/eslint-plugin": "8.23.0", - "@typescript-eslint/parser": "8.23.0", - "@vitejs/plugin-react": "^4.3.4", - "autoprefixer": "10.4.20", - "eslint": "^8.57.0", + "@eslint/eslintrc": "3.3.1", + "@eslint/js": "9.23.0", + "@ianvs/prettier-plugin-sort-imports": "4.4.1", + "@tailwindcss/postcss": "4.1.2", + "@types/node": "22.14.0", + "@types/react": "19.1.0", + "@types/react-dom": "19.1.1", + "@typescript-eslint/eslint-plugin": "8.29.0", + "@typescript-eslint/parser": "8.29.0", + "eslint": "9.23.0", + "eslint-config-next": "15.2.4", "eslint-config-prettier": "9.1.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "5.2.3", - "eslint-plugin-react": "^7.37.4", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-unused-imports": "4.1.4", - "orval": "^7.5.0", - "postcss": "8.5.1", - "prettier": "3.4.2", - "typescript": "5.7.3", - "vite": "^6.1.0", - "vite-tsconfig-paths": "^4.3.2" + "eslint-plugin-prettier": "5.2.6", + "prettier": "3.5.3", + "prettier-plugin-sort-json": "4.1.1", + "tailwindcss": "4.1.2", + "typescript": "5.8.2" } -} \ No newline at end of file +} diff --git a/apps/web/pnpm-lock.yaml b/apps/web/pnpm-lock.yaml index ea08d8e..d1a0b15 100644 --- a/apps/web/pnpm-lock.yaml +++ b/apps/web/pnpm-lock.yaml @@ -1,2535 +1,1737 @@ -lockfileVersion: '9.0' +lockfileVersion: "9.0" settings: autoInstallPeers: true excludeLinksFromLockfile: false importers: - .: dependencies: - '@heroui/avatar': - specifier: ^2.2.7 - version: 2.2.11(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/badge': - specifier: ^2.2.6 - version: 2.2.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/breadcrumbs': - specifier: ^2.2.7 - version: 2.2.11(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/button': - specifier: 2.2.10 - version: 2.2.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/card': - specifier: ^2.2.10 - version: 2.2.14(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/chip': - specifier: ^2.2.7 - version: 2.2.11(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/code': - specifier: 2.2.7 - version: 2.2.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/divider': - specifier: ^2.2.6 - version: 2.2.10(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/dropdown': - specifier: 2.3.10 - version: 2.3.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/form': - specifier: ^2.1.14 - version: 2.1.14(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/image': - specifier: ^2.2.6 - version: 2.2.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/input': - specifier: 2.4.10 - version: 2.4.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/kbd': - specifier: 2.2.7 - version: 2.2.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/link': - specifier: 2.2.8 - version: 2.2.8(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/modal': - specifier: ^2.2.8 - version: 2.2.12(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/navbar': - specifier: 2.2.9 - version: 2.2.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/progress': - specifier: ^2.2.7 - version: 2.2.11(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/select': - specifier: 2.4.9 - version: 2.4.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/snippet': - specifier: 2.2.11 - version: 2.2.11(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/spinner': - specifier: ^2.2.12 - version: 2.2.12(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/switch': - specifier: 2.2.9 - version: 2.2.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/system': - specifier: 2.4.6 - version: 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/table': - specifier: ^2.2.9 - version: 2.2.14(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': - specifier: 2.4.6 - version: 2.4.6(tailwindcss@3.4.16) - '@hookform/resolvers': - specifier: ^4.0.0 - version: 4.1.3(react-hook-form@7.54.2(react@18.3.1)) - '@react-aria/selection': - specifier: 3.21.0 - version: 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': - specifier: 3.27.0 - version: 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': - specifier: 3.8.19 - version: 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': - specifier: 3.27.0 - version: 3.27.0(react@18.3.1) + "@hookform/resolvers": + specifier: ^5.0.1 + version: 5.0.1(react-hook-form@7.55.0(react@19.1.0)) + "@radix-ui/react-aspect-ratio": + specifier: ^1.1.3 + version: 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-avatar": + specifier: ^1.1.4 + version: 1.1.4(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-dialog": + specifier: ^1.1.6 + version: 1.1.7(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-dropdown-menu": + specifier: ^2.1.6 + version: 2.1.7(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-label": + specifier: ^2.1.2 + version: 2.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-progress": + specifier: ^1.1.3 + version: 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-scroll-area": + specifier: ^1.2.4 + version: 1.2.4(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-select": + specifier: ^2.1.7 + version: 2.1.7(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-separator": + specifier: ^1.1.3 + version: 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-slot": + specifier: ^1.1.2 + version: 1.2.0(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-switch": + specifier: ^1.1.4 + version: 1.1.4(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@tabler/icons-react": + specifier: ^3.31.0 + version: 3.31.0(react@19.1.0) axios: - specifier: ^1.7.9 - version: 1.8.1 + specifier: ^1.8.4 + version: 1.8.4 + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 clsx: - specifier: 2.1.1 + specifier: ^2.1.1 version: 2.1.1 date-fns: specifier: ^4.1.0 version: 4.1.0 framer-motion: - specifier: 12.4.1 - version: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - i18next: - specifier: ^24.2.2 - version: 24.2.2(typescript@5.7.3) - i18next-browser-languagedetector: - specifier: ^8.0.3 - version: 8.0.4 + specifier: ^12.6.3 + version: 12.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + lucide-react: + specifier: ^0.487.0 + version: 0.487.0(react@19.1.0) nanoid: - specifier: ^5.0.9 - version: 5.1.2 + specifier: ^5.1.5 + version: 5.1.5 + next: + specifier: 15.2.4 + version: 15.2.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next-intl: + specifier: ^4.0.2 + version: 4.0.2(next@15.2.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.2) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + nookies: + specifier: ^2.5.2 + version: 2.5.2 react: - specifier: 18.3.1 - version: 18.3.1 + specifier: ^19.1.0 + version: 19.1.0 react-country-flag: specifier: ^3.1.0 - version: 3.1.0(react@18.3.1) + version: 3.1.0(react@19.1.0) react-dom: - specifier: 18.3.1 - version: 18.3.1(react@18.3.1) + specifier: ^19.1.0 + version: 19.1.0(react@19.1.0) react-hook-form: - specifier: ^7.54.2 - version: 7.54.2(react@18.3.1) - react-i18next: - specifier: ^15.4.1 - version: 15.4.1(i18next@24.2.2(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-icons: - specifier: ^5.4.0 - version: 5.5.0(react@18.3.1) - react-router-dom: - specifier: 6.23.0 - version: 6.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^7.55.0 + version: 7.55.0(react@19.1.0) sonner: - specifier: ^1.7.4 - version: 1.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - tailwind-variants: - specifier: 0.3.1 - version: 0.3.1(tailwindcss@3.4.16) - tailwindcss: - specifier: 3.4.16 - version: 3.4.16 + specifier: ^2.0.3 + version: 2.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + tailwind-merge: + specifier: ^3.1.0 + version: 3.2.0 + tw-animate-css: + specifier: ^1.2.5 + version: 1.2.5 zod: - specifier: ^3.24.1 + specifier: ^3.24.2 version: 3.24.2 + zustand: + specifier: ^5.0.3 + version: 5.0.3(@types/react@19.1.0)(react@19.1.0) devDependencies: - '@trivago/prettier-plugin-sort-imports': - specifier: ^5.2.2 - version: 5.2.2(prettier@3.4.2) - '@types/node': - specifier: 22.13.1 - version: 22.13.1 - '@types/react': - specifier: 18.3.3 - version: 18.3.3 - '@types/react-dom': - specifier: 18.3.0 - version: 18.3.0 - '@typescript-eslint/eslint-plugin': - specifier: 8.23.0 - version: 8.23.0(@typescript-eslint/parser@8.23.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/parser': - specifier: 8.23.0 - version: 8.23.0(eslint@8.57.1)(typescript@5.7.3) - '@vitejs/plugin-react': - specifier: ^4.3.4 - version: 4.3.4(vite@6.2.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0)) - autoprefixer: - specifier: 10.4.20 - version: 10.4.20(postcss@8.5.1) + "@eslint/eslintrc": + specifier: 3.3.1 + version: 3.3.1 + "@eslint/js": + specifier: 9.23.0 + version: 9.23.0 + "@ianvs/prettier-plugin-sort-imports": + specifier: 4.4.1 + version: 4.4.1(prettier@3.5.3) + "@tailwindcss/postcss": + specifier: 4.1.2 + version: 4.1.2 + "@types/node": + specifier: 22.14.0 + version: 22.14.0 + "@types/react": + specifier: 19.1.0 + version: 19.1.0 + "@types/react-dom": + specifier: 19.1.1 + version: 19.1.1(@types/react@19.1.0) + "@typescript-eslint/eslint-plugin": + specifier: 8.29.0 + version: 8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + "@typescript-eslint/parser": + specifier: 8.29.0 + version: 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) eslint: - specifier: ^8.57.0 - version: 8.57.1 + specifier: 9.23.0 + version: 9.23.0(jiti@2.4.2) + eslint-config-next: + specifier: 15.2.4 + version: 15.2.4(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) eslint-config-prettier: specifier: 9.1.0 - version: 9.1.0(eslint@8.57.1) - eslint-plugin-import: - specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1) - eslint-plugin-jsx-a11y: - specifier: ^6.10.2 - version: 6.10.2(eslint@8.57.1) - eslint-plugin-node: - specifier: ^11.1.0 - version: 11.1.0(eslint@8.57.1) + version: 9.1.0(eslint@9.23.0(jiti@2.4.2)) eslint-plugin-prettier: - specifier: 5.2.3 - version: 5.2.3(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.4.2) - eslint-plugin-react: - specifier: ^7.37.4 - version: 7.37.4(eslint@8.57.1) - eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.2(eslint@8.57.1) - eslint-plugin-unused-imports: - specifier: 4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1) - orval: - specifier: ^7.5.0 - version: 7.6.0(openapi-types@12.1.3) - postcss: - specifier: 8.5.1 - version: 8.5.1 + specifier: 5.2.6 + version: 5.2.6(eslint-config-prettier@9.1.0(eslint@9.23.0(jiti@2.4.2)))(eslint@9.23.0(jiti@2.4.2))(prettier@3.5.3) prettier: - specifier: 3.4.2 - version: 3.4.2 + specifier: 3.5.3 + version: 3.5.3 + prettier-plugin-sort-json: + specifier: 4.1.1 + version: 4.1.1(prettier@3.5.3) + tailwindcss: + specifier: 4.1.2 + version: 4.1.2 typescript: - specifier: 5.7.3 - version: 5.7.3 - vite: - specifier: ^6.1.0 - version: 6.2.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0) - vite-tsconfig-paths: - specifier: ^4.3.2 - version: 4.3.2(typescript@5.7.3)(vite@6.2.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0)) + specifier: 5.8.2 + version: 5.8.2 packages: + "@alloc/quick-lru@5.2.0": + resolution: + { integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== } + engines: { node: ">=10" } - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} + "@babel/code-frame@7.26.2": + resolution: + { integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== } + engines: { node: ">=6.9.0" } - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} + "@babel/generator@7.27.0": + resolution: + { integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== } + engines: { node: ">=6.9.0" } - '@apidevtools/json-schema-ref-parser@11.7.2': - resolution: {integrity: sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA==} - engines: {node: '>= 16'} + "@babel/helper-string-parser@7.25.9": + resolution: + { integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== } + engines: { node: ">=6.9.0" } - '@apidevtools/openapi-schemas@2.1.0': - resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} - engines: {node: '>=10'} + "@babel/helper-validator-identifier@7.25.9": + resolution: + { integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== } + engines: { node: ">=6.9.0" } - '@apidevtools/swagger-methods@3.0.2': - resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} - - '@apidevtools/swagger-parser@10.1.1': - resolution: {integrity: sha512-u/kozRnsPO/x8QtKYJOqoGtC4kH6yg1lfYkB9Au0WhYB0FNLpyFusttQtvhlwjtG3rOwiRz4D8DnnXa8iEpIKA==} - peerDependencies: - openapi-types: '>=7' - - '@asyncapi/specs@6.8.1': - resolution: {integrity: sha512-czHoAk3PeXTLR+X8IUaD+IpT+g+zUvkcgMDJVothBsan+oHN3jfcFcFUNdOPAAFoUCQN1hXF1dWuphWy05THlA==} - - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.26.9': - resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.26.9': - resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.26.5': - resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.26.5': - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.26.9': - resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.26.9': - resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} - engines: {node: '>=6.0.0'} + "@babel/parser@7.27.0": + resolution: + { integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== } + engines: { node: ">=6.0.0" } hasBin: true - '@babel/plugin-transform-react-jsx-self@7.25.9': - resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/template@7.27.0": + resolution: + { integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== } + engines: { node: ">=6.9.0" } - '@babel/plugin-transform-react-jsx-source@7.25.9': - resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + "@babel/traverse@7.27.0": + resolution: + { integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== } + engines: { node: ">=6.9.0" } - '@babel/runtime@7.26.9': - resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} - engines: {node: '>=6.9.0'} + "@babel/types@7.27.0": + resolution: + { integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== } + engines: { node: ">=6.9.0" } - '@babel/template@7.26.9': - resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} - engines: {node: '>=6.9.0'} + "@emnapi/core@1.4.3": + resolution: + { integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== } - '@babel/traverse@7.26.9': - resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} - engines: {node: '>=6.9.0'} + "@emnapi/runtime@1.4.3": + resolution: + { integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== } - '@babel/types@7.26.9': - resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} - engines: {node: '>=6.9.0'} + "@emnapi/wasi-threads@1.0.2": + resolution: + { integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== } - '@esbuild/aix-ppc64@0.25.0': - resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.0': - resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.0': - resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.0': - resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.0': - resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.0': - resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.0': - resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.0': - resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.0': - resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.0': - resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.0': - resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.0': - resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.0': - resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.0': - resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.0': - resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.0': - resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.0': - resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.0': - resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.0': - resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.0': - resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.0': - resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.25.0': - resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.0': - resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.0': - resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.0': - resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + "@eslint-community/eslint-utils@4.6.1": + resolution: + { integrity: sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw== } + 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.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@exodus/schemasafe@1.3.0': - resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} - - '@formatjs/ecma402-abstract@2.3.3': - resolution: {integrity: sha512-pJT1OkhplSmvvr6i3CWTPvC/FGC06MbN5TNBfRO6Ox62AEz90eMq+dVvtX9Bl3jxCEkS0tATzDarRZuOLw7oFg==} - - '@formatjs/fast-memoize@2.2.6': - resolution: {integrity: sha512-luIXeE2LJbQnnzotY1f2U2m7xuQNj2DA8Vq4ce1BY9ebRZaoPB1+8eZ6nXpLzsxuW5spQxr7LdCg+CApZwkqkw==} - - '@formatjs/icu-messageformat-parser@2.11.1': - resolution: {integrity: sha512-o0AhSNaOfKoic0Sn1GkFCK4MxdRsw7mPJ5/rBpIqdvcC7MIuyUSW8WChUEvrK78HhNpYOgqCQbINxCTumJLzZA==} - - '@formatjs/icu-skeleton-parser@1.8.13': - resolution: {integrity: sha512-N/LIdTvVc1TpJmMt2jVg0Fr1F7Q1qJPdZSCs19unMskCmVQ/sa0H9L8PWt13vq+gLdLg1+pPsvBLydL1Apahjg==} - - '@formatjs/intl-localematcher@0.6.0': - resolution: {integrity: sha512-4rB4g+3hESy1bHSBG3tDFaMY2CH67iT7yne1e+0CLTsGLDcmoEWWpJjjpWVaYgYfYuohIRuo0E+N536gd2ZHZA==} - - '@gerrit0/mini-shiki@1.27.2': - resolution: {integrity: sha512-GeWyHz8ao2gBiUW4OJnQDxXQnFgZQwwQk05t/CVVgNBN7/rK8XZ7xY6YhLVv9tH3VppWWmr9DCl3MwemB/i+Og==} - - '@heroui/aria-utils@2.2.7': - resolution: {integrity: sha512-HVkOI7NIbQloj2M1p3KVOLQ5E2PSf5YqoSspasLtWvN6VTC0bYVfDDcJnZ9DWG4LlUoeZu751O9Um7ipBEQFhA==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/aria-utils@2.2.8': - resolution: {integrity: sha512-+1kF96fSbA+PtP/UGxtcpBc8Vuc5KJwO0sndGCu41oijVMZ2RZ4wV6exwoT478U+nH8p8DbpXJHkzOhd6Zlagg==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/avatar@2.2.11': - resolution: {integrity: sha512-exXfXsma3X33YoU3C7n96zctGRtOn8yIsIF97quTekSThWn4bcCCo2Otu2hLbGZVR5QikyPWlG6MnXTohzqXxw==} - peerDependencies: - '@heroui/system': '>=2.4.7' - '@heroui/theme': '>=2.4.6' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/badge@2.2.10': - resolution: {integrity: sha512-ZY+7zvgHUW7Ye4Epdd4GnbmJgf59pGjxGML6Jm+R+GvjdqUSpneRW+QUNzwL8paSwXbGTP48nnQh9fMs+PKyRQ==} - peerDependencies: - '@heroui/system': '>=2.4.7' - '@heroui/theme': '>=2.4.6' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/breadcrumbs@2.2.11': - resolution: {integrity: sha512-DfrJhUT+HyiFh/F5j6CI7yxVuwd+F2sfJOC3EJrrbsrUS1q5ZXapkX1e4hkzAJ4SG31cb+fM3Np+8ga/Vdq+sg==} - peerDependencies: - '@heroui/system': '>=2.4.7' - '@heroui/theme': '>=2.4.6' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/button@2.2.10': - resolution: {integrity: sha512-SsW7t1Ay6SKQtUuwy0RXKmHR43RLHUd0ef9efJrcLAhm7HT6vkwAPQxYV2IMbXJMNDSezjbY+rcUFk3VOE0qqg==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/button@2.2.9': - resolution: {integrity: sha512-tXHFmDlbjXKxtQja7ciYykyLbWZyYMFBiesBRdbldZNk+xTt6HcTDxn7G/alTwkktYVCyRojldVW5G6dsdiVgA==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/card@2.2.14': - resolution: {integrity: sha512-s8ZaCCSChkGehvLGYX3VEDX70PzOwQAG6ikXaEeHD3poO7wMZzdxQw73RtCGf/XAlJCpWgJ18xTdHGfm3aQESQ==} - peerDependencies: - '@heroui/system': '>=2.4.7' - '@heroui/theme': '>=2.4.6' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/checkbox@2.3.14': - resolution: {integrity: sha512-Yn1h6IhYlhxEsR235BUgHzh6yAR6JPTzdr97PSKf/xJox0D4HK6uyKj0YCmPwIgYCxGfd1NaqXRTm3FM4RRkFg==} - peerDependencies: - '@heroui/system': '>=2.4.7' - '@heroui/theme': '>=2.4.3' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/chip@2.2.11': - resolution: {integrity: sha512-FFSK+bwnbZFXA2zk/Y49VKvwZlgMCEk6L0du/4knyFc1vtoI2+vr+W8uRM82xXAXptCkrZlXKm6vlDKaKTDH2Q==} - peerDependencies: - '@heroui/system': '>=2.4.7' - '@heroui/theme': '>=2.4.6' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/code@2.2.7': - resolution: {integrity: sha512-klk+i5mLySEXB/aQAntJzY7te0xrvtb1UTTAs0n/U/Qe2HusJDtRwe2JlFp+dtSR7Ge/wBMYZMje7ikx1PvJ6A==} - peerDependencies: - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/divider@2.2.10': - resolution: {integrity: sha512-L3aEQ+ClUafzFJCmgCPjWL3ZDVHqSPRjLRE0XHpqC2xAP5dU0Hq44lhzCYHHKHHk1ZP/f1WDeas65C8lcHLZpA==} - peerDependencies: - '@heroui/theme': '>=2.4.6' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/divider@2.2.5': - resolution: {integrity: sha512-yCIpP9IkHT4T7Nw87Oj/uAuxbp9AyHHAN+YAcPIGgCjp9Q59eJHNfm05FF6Xtkahpqp17HCOMB7U5wgJeIz4Ng==} - peerDependencies: - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/divider@2.2.6': - resolution: {integrity: sha512-C9ShXhGstjkFvaympTrqdUg1k+CZ/e3o5IV+x2RaWw3nvEEdnDLeY/j6Uk6r683Bs/R6valzRNlAPocUpRtM5g==} - peerDependencies: - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/dom-animation@2.1.1': - resolution: {integrity: sha512-7+sZXkJrM3FHvcxc5Ul2vwUDsSpFP3qAifJYfc7ZcinsYLtKEtBH1ElBwmZt5XCM8DvZThR2RTYB3/j+MTyWvg==} - peerDependencies: - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - - '@heroui/dom-animation@2.1.2': - resolution: {integrity: sha512-DX5zGe60gjKIk1sYMPGgR4shOsfpL/1xH0EN18o0SyBiJuGtrii2nXW+0sbsapsW6KzqVYMmXzfVhWkAWR190Q==} - peerDependencies: - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - - '@heroui/dom-animation@2.1.6': - resolution: {integrity: sha512-l4xh+y02lmoJVdLR0cjpsa7LjLIvVQCX+w+S2KW6tOoPKmHlyW/8r7h6SqPB4Ua1NZGmRHtlYmw+mw47yqyTjw==} - peerDependencies: - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - - '@heroui/dropdown@2.3.10': - resolution: {integrity: sha512-T2W5RjInzjU2yiksiYc19Wt0QNU5GUtoiYvT3lrYtRUdOTeWgQ19/Q3zLSxDXaZkf5fYFC0KqaJ52cvJApmNPw==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/form@2.1.14': - resolution: {integrity: sha512-4OZ8dqekSkXca1hbhU1gUBEdrVm6QHafrzbyTpDHaohwE+ea+OuWKn5ttlS/S5wamcnxTErmG3uyvsZGsDspBw==} - peerDependencies: - '@heroui/system': '>=2.4.7' - '@heroui/theme': '>=2.4.6' - react: '>=18' - react-dom: '>=18' - - '@heroui/form@2.1.8': - resolution: {integrity: sha512-lWQpOh4F2/TLngUy6gmxW86iRpp1YKnnGApct+UHAq0P/ZGlAk5lvu0oQPQWCOcOQXo/0SrY1ihNuwKvPB6t8g==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - react: '>=18' - react-dom: '>=18' - - '@heroui/form@2.1.9': - resolution: {integrity: sha512-8qqfWXmVeELDN2JJ45+71tgNil8ird7LkF6chkK/+SLw3OTTE1q7dq9ikc6zzQ12x0Sa7IgVDl4bVn4jHoDCyA==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - react: '>=18' - react-dom: '>=18' - - '@heroui/framer-utils@2.1.11': - resolution: {integrity: sha512-E8MLdLKvIVlAEVVeivORivt0HzN9y9LunmcOok3BhrBhSI0yBVBMrgd4XZJzFsNipgu2L687nxHbWeUs8jK/5g==} - peerDependencies: - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/framer-utils@2.1.6': - resolution: {integrity: sha512-HmIq9QsOjDi3zAglZKSn9TbfPvgMwAfSdVfyD8w476b5QoljBul6+XKsTZkso6v6zT6WU/5niQu1mnFvCHWb6w==} - peerDependencies: - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/framer-utils@2.1.7': - resolution: {integrity: sha512-srTMsTO96fnaxbUNhzCpt7zbic+fndWpcSFEl2acxLkUI8bR5zFxqbOSolW53KctJfuvO//KgVz9b0JCjqeUPA==} - peerDependencies: - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/image@2.2.10': - resolution: {integrity: sha512-02v0bJShCwaoXAjfMLGV900HsJ4J5YtW3OHJD/TIGWQzHNYxv7Mls4u2PyfUpk6IDimlZ+fIiEjfV0zR/HY3MA==} - peerDependencies: - '@heroui/system': '>=2.4.7' - '@heroui/theme': '>=2.4.6' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/input@2.4.10': - resolution: {integrity: sha512-cHKgDiNq6ppe71epBqpiaHxH8CbIZ9uPTvzSEgSsYaDhI6vos7fNAUkpLwQyp8yAPOQBHO4RHSYDKYTOhyGsIg==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/kbd@2.2.7': - resolution: {integrity: sha512-FjSdCvOI/QlQcXVj2MO2CcSnzQ0+x7nAKscuPhxtc8sa9ddBTgb79Q1waaiGlvrlnHO/XpicAYiA2PyvQmn9tQ==} - peerDependencies: - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/link@2.2.8': - resolution: {integrity: sha512-bMvg2IkwFgsjCM5bY6g/DlW818QxQ2kdmeG3QPJAw7XwsPkCKv62s2ibfMnVjgFneoY2opY7o5RsaLfvkFaf2A==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/listbox@2.3.9': - resolution: {integrity: sha512-MjGn+bRevD5u4DUoUvZYp/1vqDNP9TYXd0gsTpZ5SXX2//KfCRKrf/hxBPmwSA9ZzomfzCsFHBDT4zZ/Gb5dpQ==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/menu@2.2.10': - resolution: {integrity: sha512-gfiD/E56Xxn1UshnuyBcM+MxJcLUDcSGL1sxoMC5IbNVOdKhdoK4d9eBEEfgTgV+qer83KrMG+yFyBiOjA7nXw==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/modal@2.2.12': - resolution: {integrity: sha512-kWoghgH/oihaBv0PzkfLbKDXWEZRVUHUEaxHCTI5Ut/5rAwxR/tYW9Wy+UW6m5nshefsq+RYh5cD9iPvDv4T1A==} - peerDependencies: - '@heroui/system': '>=2.4.7' - '@heroui/theme': '>=2.4.6' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/navbar@2.2.9': - resolution: {integrity: sha512-4wNIzohsGKhw2YiMqI8kXfZ4chnP6OkqHMbmPRxlJ7BQqIQgYtCSVcHkYd3MQydRMWLkyDAbbKeCUjwwjcYvYg==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/popover@2.3.10': - resolution: {integrity: sha512-qswvCUxkHGWbXuBQYDl5yCeqyzAgYXTXsPzc95KPVy+QoVFFQaHvvRkgjqK1rfJOZcH6cJpyO45eT3tJi3M/IQ==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/popover@2.3.9': - resolution: {integrity: sha512-3TntESGLtVhiZeKBPe8FX4FyUAdlO/0jnaon6fwCWo5d6YZalFqK23dJmUwHdcF99WndAennRSQDZg3kl90NuA==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/progress@2.2.11': - resolution: {integrity: sha512-y7GtCxqkCyZr4tifDOS4/XAxgBH6+PqKOmuPC9pHCRL7b8VFeKM9KFkxjS6n6VM/zdKqnmlysdHDFtIi3ppVBw==} - peerDependencies: - '@heroui/system': '>=2.4.7' - '@heroui/theme': '>=2.4.6' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/react-rsc-utils@2.1.1': - resolution: {integrity: sha512-+U/OPqE4HpjRObBhSSLqtUMV5/G+rnf5Xd+ntP1gzC0HTVzN9WG9rRSNyhy7b+fAWGOR2kqOaon1LDZE6zmK6A==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/react-rsc-utils@2.1.2': - resolution: {integrity: sha512-5qaYUj0eX+y8OFvPsv01RdfHZv8Z/do+3tdaDmq/uNFsyDc+lgea9PyqVZbhv6nf4ido/hUlPDB6KAGqiAeKwQ==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/react-rsc-utils@2.1.6': - resolution: {integrity: sha512-slBWi9g3HdnSNRhoedDhXFybaab5MveAeECzQoj4oJrIlmiezyeZWRKbWR8li2tiZtvBoEr0Xpu/A8hdni15dQ==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/react-utils@2.1.3': - resolution: {integrity: sha512-qROTzQ6V02RTjcaI30hfpyIykKF0jm1SJHOx0sLsHoR94wlVvN55BnJxrg7i560H3C6UIMChu1aR6E7bGU1CeA==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/react-utils@2.1.4': - resolution: {integrity: sha512-aXZtrgrGkW3Z892BQ5crP/ttdpTaNtv5N3UYoH2wVyFiGj+ypYfFkZRB/wppBRgf5hsy5liw+fqC/Yg5n3J8qw==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/react-utils@2.1.8': - resolution: {integrity: sha512-ET8sQaqfAWEviuZfatSYXBzyD0PpzuIK2YQkijla0TmF0sHJ3Yl4YQ6DYleWAaIJEWW1u0HgUPrdIjVGjWyKVg==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/ripple@2.2.12': - resolution: {integrity: sha512-5hKlJfl05rtp/ABhmsJ/qqQjh9TgzyvBdeuvWf0K3PJVIMSp+LJly86mwlEzHEbbBwAJvdq9jxd3+R54ZMaQRw==} - peerDependencies: - '@heroui/system': '>=2.4.7' - '@heroui/theme': '>=2.4.6' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/ripple@2.2.7': - resolution: {integrity: sha512-I9ZvCbNQgDMpvRYmr58lrlDfAhzNY9uZELoUqxAAprr0Y1N32WL+nC2bpHc3cKIzV/kKfSbfzNY9rqt3xtAciA==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/ripple@2.2.8': - resolution: {integrity: sha512-KtOUtetFvKfQn3Lg20LO/Vxzyu7Apj44TcbIOYUhe/EZtZSkqfxQL7A+SwzCiXB9ZVat94UkMgV/wpG3CvetGA==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/scroll-shadow@2.3.5': - resolution: {integrity: sha512-eKCYJDNjWAyWAm3k3BEz6GKgnfb+Frn9zqr/Zo8JbXZ7jNPt2emtJXx6/OluZ1cX2nhgJ2UNpEgC29g/9leOzw==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/select@2.4.9': - resolution: {integrity: sha512-dUjug76DlreKX3A30RLKJ7dKkuqjJ+MAoDUXKXVbo4hSIFrTGMWep7j+/NSSiS+JJ9Ogr+bLljlXoOsVtdg9Ow==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/shared-icons@2.1.1': - resolution: {integrity: sha512-D3bm4AilRVphGHAAsZyIiTFWvYux4u+fm3Ktq1nUP+o7yXfk/l+7jE+TbVD3LbLzCdmJzqICZ4pcPZfcLygIKw==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/shared-icons@2.1.2': - resolution: {integrity: sha512-CUHbRMvXLVXjri+N5AhsTNNL49DXvGLidJ9qSyLQr0uWxt6GVb4/Hd9Lu4CjwrfWxyMwblm9f3BqUUFOC/FyVg==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/shared-icons@2.1.6': - resolution: {integrity: sha512-4Gey+FJF4XBlMw5p9D2geOEAED8xCxuksurWKUz7eAoAivRRsZJf9wwUsKvNfrmboBUoytdxpUDbVgnckx/G8A==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/shared-utils@2.1.2': - resolution: {integrity: sha512-i058k/jP1FsZIJlMrpMTchnGH+jx07yhvZjC9zsxvQX/zlRcoRMpxAC5qi6/p2UYrnFDjiPY0WWuDdCML7Gtew==} - - '@heroui/shared-utils@2.1.3': - resolution: {integrity: sha512-MNpo+jcu6xyicSRyxWgL4rNw4xH0XziUR/bhs01GydlGhfFN8n/Y4vKAWfL5xamehiEJX1N0IKAbFadt3wlGAA==} - - '@heroui/shared-utils@2.1.7': - resolution: {integrity: sha512-1nx7y41P+Bsca7nDC+QFajAoFhSRGvjKhdFeopMQNTvU95L42PD7B0ThjcOretvQD0Ye2TsAEQInwsSgZ6kK/g==} - - '@heroui/snippet@2.2.11': - resolution: {integrity: sha512-Yd/D/g0x1Rqzbuya6oY3sEoG2JxcIxNwDGf15M95zyKvoec1MXmjibc6MgV2b2BAOKCUebLuOhISlTyUeJGD3w==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/spacer@2.2.11': - resolution: {integrity: sha512-NZp0pbZ8LJcR2XaslHPHFYJSKxStN+gO8eymNIQjumSRBU0cHpNcrxbNy/N3gBtCqOrrainbmSIXxpxifWeOyA==} - peerDependencies: - '@heroui/theme': '>=2.4.6' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/spinner@2.2.12': - resolution: {integrity: sha512-P7tbxZg3E2vd2+5cpvNme1b6ytAy+BWEh7Q3JHjiIMjR70+140HulChp0nRkxIizoKF+vY5qGwEz+rAvteJ9dg==} - peerDependencies: - '@heroui/theme': '>=2.4.6' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/spinner@2.2.6': - resolution: {integrity: sha512-M6KpTlJdFQxA+dMOMIC7Xibzkzy/m2kSx7xgLyZ/6ka2jlFtC/D+8X3XAK3kF0smFiDAjrF6DbksmbBcFIemlQ==} - peerDependencies: - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/spinner@2.2.7': - resolution: {integrity: sha512-mMah9randdSFwyEtte6Ov1rkInGJZNBKfsruhDc0bOmMmFH8RNWJLuOyIMsaaKBXZQDwvRNH+3YTezAWAqKnpg==} - peerDependencies: - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/switch@2.2.9': - resolution: {integrity: sha512-qpWnI61xtBqxSPvE6D5/77o9znk81QqxyrjGgzsIVYPms6JdXL6OWJZD0Va9A8t0NIJYr+Plfmu5UbCiDmi+Sg==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.3' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/system-rsc@2.3.10': - resolution: {integrity: sha512-/feLXGslWl27fGfot3ePaku53+HMqMeKwuwvJ5z6xGl3W9Npxmy+rTIS31wd7lnVWfH1ARxyODJWcfEvp/5lgg==} - peerDependencies: - '@heroui/theme': '>=2.4.6' - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/system-rsc@2.3.5': - resolution: {integrity: sha512-hu5HqpxUtwCTrkAhUS01wd2k6Io0Y9R9ELeXcMa9aj7j8Gr9vXjWYbmVdeJKB2oxMgEm/bwZvx8vZaskfQHRtQ==} - peerDependencies: - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/system-rsc@2.3.6': - resolution: {integrity: sha512-196LAXv9soGQqkaIyfKI0c+mBJh7QqxEzxEY+QEOYad9Q9LmuhUvu3sQleAw3ImGF20veXQ0U9pfCLjfucDEfQ==} - peerDependencies: - '@heroui/theme': '>=2.4.0' - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/system@2.4.11': - resolution: {integrity: sha512-6OI7bgRLaH8i8kATeB6WOOLkHoxxSbfRaJr21bb2w+tnHkeqqHU73pURUR+t8jlheP9iS/j1IqGrcjVB9HR6sg==} - peerDependencies: - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/system@2.4.6': - resolution: {integrity: sha512-0UCBa09bDvJbvuTT+APizETZJccVDPGKemjcRpArHvoKb9ckhBnod/77Srh9cXkNjTcQErkFR60Ht7aEIsoAiA==} - peerDependencies: - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/system@2.4.7': - resolution: {integrity: sha512-5gWQhHr9ch/amUTkjDb2lHdVHU0PnURqbq2sPasGngi+LJUGqbApOY8n0rp2/RYDhEeR6NmWrSixZTmznBnfxg==} - peerDependencies: - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/table@2.2.14': - resolution: {integrity: sha512-679UslGs8/UXp8V6ONnZIIr278jR6oKSv1XVM7+70MX2wpAieXiBcFdTvycXGRcEKQIsy+6AV4EqwTh5qizoMg==} - peerDependencies: - '@heroui/system': '>=2.4.7' - '@heroui/theme': '>=2.4.6' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/theme@2.4.6': - resolution: {integrity: sha512-VcmeMRxL3wnKk1o6gzeQehEcXyoKyvqLYr+iRFIrMZZO1kG5bvuX+CWDVovfmLRLK1MuwuhYjm6aJvre9AZAfA==} - peerDependencies: - tailwindcss: '>=3.4.0' - - '@heroui/tooltip@2.2.8': - resolution: {integrity: sha512-rvG8KsLfxHjtC6iKYq8TY9zVo+q5TjDDws1/8uaw/reJAK5x1RvjDr5kMhT2e32eZws/IuZ4Jl3ta0PASpsIOA==} - peerDependencies: - '@heroui/system': '>=2.4.0' - '@heroui/theme': '>=2.4.0' - framer-motion: '>=11.5.6 || >=12.0.0-alpha.1' - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-aria-button@2.2.4': - resolution: {integrity: sha512-UAZPz3hymuYAIPmHiR/b17ZGVPHxlGfb3jkMLRqHR+R60PokSHrbZZ2P3QYOXQ2NP6h9fMRJhhdU94XwwNAoHw==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-aria-button@2.2.5': - resolution: {integrity: sha512-3dbtK6Q9QWuRTzry+XQ/awa4PVhmhLNcasermWrJ4PwYOQwJFzB+bslFqrjhxTYu45x5fGe54iCsT3Xx3UY80g==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-aria-button@2.2.9': - resolution: {integrity: sha512-hKYT8M98XDtCygGvMdCut4LpQgIRl8tKjTp7rZklWLPu3NgX2BBw0Lu2c4cjjf0XBWXMA/bTIIX9fJsd2FD6OA==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-aria-link@2.2.6': - resolution: {integrity: sha512-+YxO69qwUgBtqpCYvV8VfOwJp9GR/lEhGB6MR0otWrWWE4+lzgEKb29MHV+GycBOMeKK9247wQ2dyEpUxkoJ+Q==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-aria-modal-overlay@2.2.8': - resolution: {integrity: sha512-QYYF1zM+hZjUPnx40yDbhynH/d+2hEoYlduP6yhBXFiAk44mwm9hkJlLobQNZeiA+sobbN7EvguCYSoyYsOGYg==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-aria-multiselect@2.4.3': - resolution: {integrity: sha512-BE5HzfPg6avtuEDoISBQsWvNvzIT6/BO+jAQFLxm3WksFpFttlaaRl+lqvuKKvekhcMYl39rbc16KOPxhu589A==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - react-dom: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-callback-ref@2.1.6': - resolution: {integrity: sha512-icFp4WBWTZhypBcyu+5kir7nZLtvtQq7DDvGwkTtxsGnFHgGDc6sXXcOU6AcCdoGefmsiVp5c3D3lZ2pMlGHmA==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-clipboard@2.1.3': - resolution: {integrity: sha512-VOoXgfuwfsXDjNkrBUYcoLQXPHhIH4R6F4K4lSTSToC6iOam3jHUAMm5NfpZ59uUnXFgBvry8RjossJP3oGB/g==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-data-scroll-overflow@2.2.2': - resolution: {integrity: sha512-DzGUchHhd8jDuZim5wNRyZ/yQQH9/Vwdxhe0qLt/1L0qKCfpybWMnUP10jdZ0RZPZYZfYt9dy35X686NY5FvKw==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-disclosure@2.2.7': - resolution: {integrity: sha512-nSv2MgoWS/7MKpZGikIT1CID0VgomSs2XTCz2M011VD89v0A9k27qW68Qmf03oWyrl6UghC1XdgJe6IIsfq72A==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-draggable@2.1.7': - resolution: {integrity: sha512-TMeUiDT1yw2sSIPardaB3/JIFD12VO1pV3N/Jf0WyiYQO82v2VoturQHbRTvjI+69SjqapucZSYM0X7henlOwg==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-image@2.1.7': - resolution: {integrity: sha512-Cno8oXNo/3YDCRnCwSuJYgdsZ7mujjVWSwlYaoYbi+rM5o9TjZYRPYHZacHMABlbY+Hew31ddYpOmyw4SrkIwA==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-is-mobile@2.2.2': - resolution: {integrity: sha512-zqQVEvsGSlQJrk0wct9A5r3nqNeCIMiI1AiqW3ED8C58wpfLZTJweOBBwqRGpJXgielKh716AxT7H/zkEV9SoQ==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-is-mobile@2.2.3': - resolution: {integrity: sha512-O0zV+w2FTjJJP7qCBW5A3qkjvjQwMBkesD3ZOvpn71PR6GDDDFpLt0cr2hkaUd6qpb9rmeEUeJoVSch2QFNPrg==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-is-mounted@2.1.6': - resolution: {integrity: sha512-dnTX1PUWGhIQJxszTScHgM9XxvYIx9j8vnSJuVGaptJonZWlt50yI/WAi+oWXJ289rw7XBDJ8o38qmU5Pmq+WA==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-measure@2.1.1': - resolution: {integrity: sha512-hHfIjdREQ2coE3M7T+bBtx4pX5qYrrCv7katCw8tlHkv90wShEeUcF9pun2Om7a4fW0hdMM/Ll+gkJ5dw+FV9g==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-measure@2.1.2': - resolution: {integrity: sha512-cHvicTYcgOEeC++GmxogZU1iRVidU09PefQAfQNqCS92XKxebDjDv6eD+ZXN6HHbImJgtTg3utsnZSPFC1ooBg==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-measure@2.1.6': - resolution: {integrity: sha512-FiN3Za6hExqU1B0d2drCm9JUFneQ1W5gyNoX0owf3aIWG98QR+LR1MOL3WBAGWtDsp4K6q8rqUKXatNxGJd/sA==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-safe-layout-effect@2.1.1': - resolution: {integrity: sha512-5852e3gpo6cI2o3LBvG5m2M2JnrwhaoGk9KuemWMgJze9PD0Cy5ikJZMZ1aDevUalenYoxlHhKJ9NYqF/1Kb6w==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-safe-layout-effect@2.1.2': - resolution: {integrity: sha512-AVfgvaO2zw30JDKj1LyFPzz+JULMygC/TUK/5g4YA3O/4OwgS8lT8XRNM721zwmYkntFPBx7lYcIRcm8hPWkXA==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-safe-layout-effect@2.1.6': - resolution: {integrity: sha512-yLT6zrlcZGJX4KKenzvR6lPS42Lf/Q0Q8ErpufLSkTdX4uk/ThGB/CRwdXfP+TPFLIfjXdsgCHgZr2ZAQJaG5Q==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@heroui/use-scroll-position@2.1.2': - resolution: {integrity: sha512-ALO/zuGekxWE4+ikd7XPwvLdJMwmPR9XgCsXtenklfPLDVf9Fu1L9E20RW6hSxf96NfwXZIH+hZ5kI4EB2CiYQ==} - peerDependencies: - react: '>=18 || >=19.0.0-rc.0' - - '@hookform/resolvers@4.1.3': - resolution: {integrity: sha512-Jsv6UOWYTrEFJ/01ZrnwVXs7KDvP8XIo115i++5PWvNkNvkrsTfGiLS6w+eJ57CYtUtDQalUWovCZDHFJ8u1VQ==} - peerDependencies: - react-hook-form: ^7.0.0 - - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - - '@ibm-cloud/openapi-ruleset-utilities@1.7.1': - resolution: {integrity: sha512-+P8SxhkO9sygENTyw6vUBc5oV/DOKjr6mdf6ubgstE9TypxT+uG4D6GqPhoTeVvHntOjcQnPHthssasA7vYE3g==} - engines: {node: '>=16.0.0'} - - '@ibm-cloud/openapi-ruleset@1.29.2': - resolution: {integrity: sha512-/2OCrpqItKPTBdu2pvknqjv0cz5WfzgJ+MrkVhnHAuWOkD8aY5tRCTy7Ick3zy3rdTM71aMGAX+tje04u5AfbA==} - engines: {node: '>=16.0.0'} - - '@internationalized/date@3.6.0': - resolution: {integrity: sha512-+z6ti+CcJnRlLHok/emGEsWQhe7kfSmEW+/6qCzvKY67YPh7YOBfvc7+/+NXq+zJlbArg30tYpqLjNgcAYv2YQ==} - - '@internationalized/date@3.7.0': - resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==} - - '@internationalized/message@3.1.6': - resolution: {integrity: sha512-JxbK3iAcTIeNr1p0WIFg/wQJjIzJt9l/2KNY/48vXV7GRGZSv3zMxJsce008fZclk2cDC8y0Ig3odceHO7EfNQ==} - - '@internationalized/number@3.6.0': - resolution: {integrity: sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==} - - '@internationalized/string@3.2.5': - resolution: {integrity: sha512-rKs71Zvl2OKOHM+mzAFMIyqR5hI1d1O6BBkMK2/lkfg3fkmVh9Eeg0awcA8W2WqYqDOv6a86DIOlFpggwLtbuw==} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@jsdevtools/ono@7.1.3': - resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - - '@jsep-plugin/assignment@1.3.0': - resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@jsep-plugin/regex@1.0.4': - resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@jsep-plugin/ternary@1.1.4': - resolution: {integrity: sha512-ck5wiqIbqdMX6WRQztBL7ASDty9YLgJ3sSAK5ZpBzXeySvFGCzIvM6UiAI4hTZ22fEcYQVV/zhUbNscggW+Ukg==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@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'} - - '@orval/angular@7.6.0': - resolution: {integrity: sha512-U6WLXLV35hDiOYmDpX2tEx3vGnw0yvRrbCBmBmzZhsLtb0EpuLOX8V1zMIEoDZyjm69x7EoZxZ0wyhgwPXH4ZA==} - - '@orval/axios@7.6.0': - resolution: {integrity: sha512-WQsawRICC6aujix9svdpV5xSbchiSX1rxn59FctmKSVgxypnQ8PlugJOVJjSOVAZlm62ZtOduIXzFhs4n7UrTQ==} - - '@orval/core@7.6.0': - resolution: {integrity: sha512-/YQcB47A0vc0hVvdZGBprIokYx5BvAUXJfafpCnp7fvH+2Jo0tKbthbZU5DnjyU7+i7z/o8ifEk7ts/g2iXmUQ==} - - '@orval/fetch@7.6.0': - resolution: {integrity: sha512-1xnPLnENcYmJh84J1cf8rkmDs1ap9L1iXozSCdQLnPC81/kiSQPHRxbNol+NAoAjlq7yW4uj7LtcNftvuBKmwg==} - - '@orval/hono@7.6.0': - resolution: {integrity: sha512-+qXGA1B2qj45WgObffw2ZmIZnzcdIST2i28ls6574QS71IBqqlJOf23h0BnXxXwVPe0uRpdrB+Z6+JWouF54Ww==} - - '@orval/mock@7.6.0': - resolution: {integrity: sha512-0TSBfY04KUMaqZevu4nfcZ4n3wxIUXuBEQ8ax83A7PhAoVPhK4THL6dOTKdkVs1foKdXzKeR7EBQ5wZ0LpyTQA==} - - '@orval/query@7.6.0': - resolution: {integrity: sha512-qexxDqyiCzaDWHnxVKsP8Qu8tzTAsiV1qIyUjIpHNfbbBbJyQaV3eWBrDnSH0nnl8s5NIUy7wSk4CStREgKwRQ==} - - '@orval/swr@7.6.0': - resolution: {integrity: sha512-xYegZjwWm3vqKD+r8lwv4aoel8nfWC/n8m/jam09bWqfgnTaLXw+lR62Q4lV97nVNjib4k74FQQ17JnlgX3YyA==} - - '@orval/zod@7.6.0': - resolution: {integrity: sha512-oTLvyFaXRFII+6ZTaxfUjhjwQPiLZm5sJ4LwbeTPq2rm7A7XXBUPuna6HlTw+GgAWXH13eK0xMhQ9LvTlCQPIw==} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@react-aria/breadcrumbs@3.5.20': - resolution: {integrity: sha512-xqVSSDPpQuUFpJyIXMQv8L7zumk5CeGX7qTzo4XRvqm5T9qnNAX4XpYEMdktnLrQRY/OemCBScbx7SEwr0B3Kg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/button@3.11.0': - resolution: {integrity: sha512-b37eIV6IW11KmNIAm65F3SEl2/mgj5BrHIysW6smZX3KoKWTGYsYfcQkmtNgY0GOSFfDxMCoolsZ6mxC00nSDA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/button@3.11.1': - resolution: {integrity: sha512-NSs2HxHSSPSuYy5bN+PMJzsCNDVsbm1fZ/nrWM2WWWHTBrx9OqyrEXZVV9ebzQCN9q0nzhwpf6D42zHIivWtJA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/checkbox@3.15.1': - resolution: {integrity: sha512-ETgsMDZ0IZzRXy/OVlGkazm8T+PcMHoTvsxp0c+U82c8iqdITA+VJ615eBPOQh6OkkYIIn4cRn/e+69RmGzXng==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/dialog@3.5.20': - resolution: {integrity: sha512-l0GZVLgeOd3kL3Yj8xQW7wN3gn9WW3RLd/SGI9t7ciTq+I/FhftjXCWzXLlOCCTLMf+gv7eazecECtmoWUaZWQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/dialog@3.5.21': - resolution: {integrity: sha512-tBsn9swBhcptJ9QIm0+ur0PVR799N6qmGguva3rUdd+gfitknFScyT08d7AoMr9AbXYdJ+2R9XNSZ3H3uIWQMw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/focus@3.19.0': - resolution: {integrity: sha512-hPF9EXoUQeQl1Y21/rbV2H4FdUR2v+4/I0/vB+8U3bT1CJ+1AFj1hc/rqx2DqEwDlEwOHN+E4+mRahQmlybq0A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/focus@3.19.1': - resolution: {integrity: sha512-bix9Bu1Ue7RPcYmjwcjhB14BMu2qzfJ3tMQLqDc9pweJA66nOw8DThy3IfVr8Z7j2PHktOLf9kcbiZpydKHqzg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/focus@3.20.0': - resolution: {integrity: sha512-KXZCwWzwnmtUo6xhnyV26ptxlxmqd0Reez7axduqqqeDDgDZOVscoo/5gFg71fdPZmnDC8MyUK1vxSbMhOTrGg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/form@3.0.11': - resolution: {integrity: sha512-oXzjTiwVuuWjZ8muU0hp3BrDH5qjVctLOF50mjPvqUbvXQTHhoDxWweyIXPQjGshaqBd2w4pWaE4A2rG2O/apw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/form@3.0.13': - resolution: {integrity: sha512-f7zoFMQYBRWhKFX14rlFjSUDbNAvNMLpWRKVP3O0rUYTxh95iF5tcfUk5+lxWkVfmVj8S4O8du0ccv/ZQjPsYg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/grid@3.12.0': - resolution: {integrity: sha512-w1hVZP73QX/9YCc9pXBJzT71m3mKAHcNI68Z25NbQqwr774b5g1fdcO8o7knnlKXZVsM+Vz30kdRP8iG5GqY6A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/i18n@3.12.4': - resolution: {integrity: sha512-j9+UL3q0Ls8MhXV9gtnKlyozq4aM95YywXqnmJtzT1rYeBx7w28hooqrWkCYLfqr4OIryv1KUnPiCSLwC2OC7w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/i18n@3.12.5': - resolution: {integrity: sha512-ooeop2pTG94PuaHoN2OTk2hpkqVuoqgEYxRvnc1t7DVAtsskfhS/gVOTqyWGsxvwAvRi7m/CnDu6FYdeQ/bK5w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/i18n@3.12.6': - resolution: {integrity: sha512-I2Qz1vAlgdeW2GUMLhHucYhk514/BRuEzvH1iih8qeqvv0gEbKdSIjPJUomW+WzYVmJ2/bwKQAr7otr2fNcbrw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/interactions@3.22.5': - resolution: {integrity: sha512-kMwiAD9E0TQp+XNnOs13yVJghiy8ET8L0cbkeuTgNI96sOAp/63EJ1FSrDf17iD8sdjt41LafwX/dKXW9nCcLQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/interactions@3.23.0': - resolution: {integrity: sha512-0qR1atBIWrb7FzQ+Tmr3s8uH5mQdyRH78n0krYaG8tng9+u1JlSi8DGRSaC9ezKyNB84m7vHT207xnHXGeJ3Fg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/interactions@3.24.0': - resolution: {integrity: sha512-6Zdhp1pswyPgbwEWzvXARdKAWPjP7mACczoIUvlEQiMsX04fuizBiBLAA+W/5mPe17pbJYHA/rxZF5Y5m+M0Ng==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/label@3.7.13': - resolution: {integrity: sha512-brSAXZVTey5RG/Ex6mTrV/9IhGSQFU4Al34qmjEDho+Z2qT4oPwf8k7TRXWWqzOU0ugYxekYbsLd2zlN3XvWcg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/label@3.7.15': - resolution: {integrity: sha512-jbSxijCLHdQ/HX0yyhrsY0ypZled5omAK7Eh+Z6vW0qpoqvM1rR/ChaoUje9tW5FmMDjafbt905RUxy0xnMQ1A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/link@3.7.7': - resolution: {integrity: sha512-eVBRcHKhNSsATYWv5wRnZXRqPVcKAWWakyvfrYePIKpC3s4BaHZyTGYdefk8ZwZdEOuQZBqLMnjW80q1uhtkuA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/link@3.7.9': - resolution: {integrity: sha512-2LE3p5Gqp1Tl/3JF4CmeJT3RsdDBawBaIMlqiOT7t505z1TZI8ygHHq5FFok8FMwpy2yxpqRNW9jDa3gZj575w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/listbox@3.13.6': - resolution: {integrity: sha512-6hEXEXIZVau9lgBZ4VVjFR3JnGU+fJaPmV3HP0UZ2ucUptfG0MZo24cn+ZQJsWiuaCfNFv5b8qribiv+BcO+Kg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/live-announcer@3.4.1': - resolution: {integrity: sha512-4X2mcxgqLvvkqxv2l1n00jTzUxxe0kkLiapBGH1LHX/CxA1oQcHDqv8etJ2ZOwmS/MSBBiWnv3DwYHDOF6ubig==} - - '@react-aria/menu@3.16.0': - resolution: {integrity: sha512-TNk+Vd3TbpBPUxEloAdHRTaRxf9JBK7YmkHYiq0Yj5Lc22KS0E2eTyhpPM9xJvEWN2TlC5TEvNfdyui2kYWFFQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/overlays@3.24.0': - resolution: {integrity: sha512-0kAXBsMNTc/a3M07tK9Cdt/ea8CxTAEJ223g8YgqImlmoBBYAL7dl5G01IOj67TM64uWPTmZrOklBchHWgEm3A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/overlays@3.25.0': - resolution: {integrity: sha512-UEqJJ4duowrD1JvwXpPZreBuK79pbyNjNxFUVpFSskpGEJe3oCWwsSDKz7P1O7xbx5OYp+rDiY8fk/sE5rkaKw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/overlays@3.26.0': - resolution: {integrity: sha512-Rr3yoyGwXzp446QK6CwnjJl9ZfH/Cq2o01XQmMjya2gmk5N4aefRORg7eRoVy5EVfecIH/HJVg0BKEjXQOp4nA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/progress@3.4.19': - resolution: {integrity: sha512-5HHnBJHqEUuY+dYsjIZDYsENeKr49VCuxeaDZ0OSahbOlloIOB1baCo/6jLBv1O1rwrAzZ2gCCPcVGed/cjrcw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/selection@3.21.0': - resolution: {integrity: sha512-52JJ6hlPcM+gt0VV3DBmz6Kj1YAJr13TfutrKfGWcK36LvNCBm1j0N+TDqbdnlp8Nue6w0+5FIwZq44XPYiBGg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/selection@3.23.0': - resolution: {integrity: sha512-m/sq3UuaTFRiEU9S6K+nkn9ONcpCtFskeJH/IZ9l/583X08KEoW/A3Vehrf3dlL8CNbkKKPfkUdKh1X6gTmHzA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/ssr@3.9.7': - resolution: {integrity: sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==} - engines: {node: '>= 12'} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/switch@3.6.10': - resolution: {integrity: sha512-FtaI9WaEP1tAmra1sYlAkYXg9x75P5UtgY8pSbe9+1WRyWbuE1QZT+RNCTi3IU4fZ7iJQmXH6+VaMyzPlSUagw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/table@3.16.1': - resolution: {integrity: sha512-T28TIGnKnPBunyErDBmm5jUX7AyzT7NVWBo9pDSt9wUuEnz0rVNd7p9sjmP2+u7I645feGG9klcdpCvFeqrk8A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/textfield@3.15.0': - resolution: {integrity: sha512-V5mg7y1OR6WXYHdhhm4FC7QyGc9TideVRDFij1SdOJrIo5IFB7lvwpOS0GmgwkVbtr71PTRMjZnNbrJUFU6VNA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/toggle@3.11.0': - resolution: {integrity: sha512-LQcuGxkoHIb79phsGVzLVWlA25Uj14fRMEo4r/DRB9xE+IiOgO8g3gaA5oWNT3kpM898lTxaIv1yVxhWZEksrQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/toolbar@3.0.0-beta.11': - resolution: {integrity: sha512-LM3jTRFNDgoEpoL568WaiuqiVM7eynSQLJis1hV0vlVnhTd7M7kzt7zoOjzxVb5Uapz02uCp1Fsm4wQMz09qwQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/toolbar@3.0.0-beta.12': - resolution: {integrity: sha512-a+Be27BtM2lzEdTzm19FikPbitfW65g/JZln3kyAvgpswhU6Ljl8lztaVw4ixjG4H0nqnKvVggMy4AlWwDUaVQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/tooltip@3.7.10': - resolution: {integrity: sha512-Udi3XOnrF/SYIz72jw9bgB74MG/yCOzF5pozHj2FH2HiJlchYv/b6rHByV/77IZemdlkmL/uugrv/7raPLSlnw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/utils@3.26.0': - resolution: {integrity: sha512-LkZouGSjjQ0rEqo4XJosS4L3YC/zzQkfRM3KoqK6fUOmUJ9t0jQ09WjiF+uOoG9u+p30AVg3TrZRUWmoTS+koQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/utils@3.27.0': - resolution: {integrity: sha512-p681OtApnKOdbeN8ITfnnYqfdHS0z7GE+4l8EXlfLnr70Rp/9xicBO6d2rU+V/B3JujDw2gPWxYKEnEeh0CGCw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/utils@3.28.0': - resolution: {integrity: sha512-FfpvpADk61OvEnFe37k6jF1zr5gtafIPN9ccJRnPCTqrzuExag01mGi+wX/hWyFK0zAe1OjWf1zFOX3FsFvikg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/visually-hidden@3.8.18': - resolution: {integrity: sha512-l/0igp+uub/salP35SsNWq5mGmg3G5F5QMS1gDZ8p28n7CgjvzyiGhJbbca7Oxvaw1HRFzVl9ev+89I7moNnFQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/visually-hidden@3.8.19': - resolution: {integrity: sha512-MZgCCyQ3sdG94J5iJz7I7Ai3IxoN0U5d/+EaUnA1mfK7jf2fSYQBqi6Eyp8sWUYzBTLw4giXB5h0RGAnWzk9hA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/visually-hidden@3.8.20': - resolution: {integrity: sha512-Y7JbrpheUhNgnJWogDWxuxxiWAnuaW9MKOUY5vD3KOa+vEWuc2IBOGSzOOUkAGnVP4L2rvaHeZIuR5flqyeskA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/checkbox@3.6.11': - resolution: {integrity: sha512-jApdBis+Q1sXLivg+f7krcVaP/AMMMiQcVqcz5gwxlweQN+dRZ/NpL0BYaDOuGc26Mp0lcuVaET3jIZeHwtyxA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/collections@3.12.0': - resolution: {integrity: sha512-MfR9hwCxe5oXv4qrLUnjidwM50U35EFmInUeFf8i9mskYwWlRYS0O1/9PZ0oF1M0cKambaRHKEy98jczgb9ycA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/collections@3.12.2': - resolution: {integrity: sha512-RoehfGwrsYJ/WGtyGSLZNYysszajnq0Q3iTXg7plfW1vNEzom/A31vrLjOSOHJWAtwW339SDGGRpymDtLo4GWA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/flags@3.1.0': - resolution: {integrity: sha512-KSHOCxTFpBtxhIRcKwsD1YDTaNxFtCYuAUb0KEihc16QwqZViq4hasgPBs2gYm7fHRbw7WYzWKf6ZSo/+YsFlg==} - - '@react-stately/form@3.1.0': - resolution: {integrity: sha512-E2wxNQ0QaTyDHD0nJFtTSnEH9A3bpJurwxhS4vgcUmESHgjFEMLlC9irUSZKgvOgb42GAq+fHoWBsgKeTp9Big==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/form@3.1.1': - resolution: {integrity: sha512-qavrz5X5Mdf/Q1v/QJRxc0F8UTNEyRCNSM1we/nnF7GV64+aYSDLOtaRGmzq+09RSwo1c8ZYnIkK5CnwsPhTsQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/form@3.1.2': - resolution: {integrity: sha512-sKgkV+rxeqM1lf0dCq2wWzdYa5Z0wz/MB3yxjodffy8D43PjFvUOMWpgw/752QHPGCd1XIxA3hE58Dw9FFValg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/grid@3.11.0': - resolution: {integrity: sha512-Wp6kza+2MzNybls9pRWvIwAHwMnSV1eUZXZxLwJy+JVS5lghkr731VvT+YD79z70osJKmgxgmiQGm4/yfetXdA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/list@3.11.1': - resolution: {integrity: sha512-UCOpIvqBOjwLtk7zVTYWuKU1m1Oe61Q5lNar/GwHaV1nAiSQ8/yYlhr40NkBEs9X3plEfsV28UIpzOrYnu1tPg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/list@3.11.2': - resolution: {integrity: sha512-eU2tY3aWj0SEeC7lH9AQoeAB4LL9mwS54FvTgHHoOgc1ZIwRJUaZoiuETyWQe98AL8KMgR1nrnDJ1I+CcT1Y7g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/menu@3.9.0': - resolution: {integrity: sha512-++sm0fzZeUs9GvtRbj5RwrP+KL9KPANp9f4SvtI3s+MP+Y/X3X7LNNePeeccGeyikB5fzMsuyvd82bRRW9IhDQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/overlays@3.6.12': - resolution: {integrity: sha512-QinvZhwZgj8obUyPIcyURSCjTZlqZYRRCS60TF8jH8ZpT0tEAuDb3wvhhSXuYA3Xo9EHLwvLjEf3tQKKdAQArw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/overlays@3.6.13': - resolution: {integrity: sha512-WsU85Gf/b+HbWsnnYw7P/Ila3wD+C37Uk/WbU4/fHgJ26IEOWsPE6wlul8j54NZ1PnLNhV9Fn+Kffi+PaJMQXQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/overlays@3.6.14': - resolution: {integrity: sha512-RRalTuHdwrKO1BmXKaqBtE1GGUXU4VUAWwgh4lsP2EFSixDHmOVLxHFDWYvOPChBhpi8KXfLEgm6DEgPBvLBZQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/selection@3.20.0': - resolution: {integrity: sha512-woUSHMTyQiNmCf63Dyot1WXFfWnm6PFYkI9kymcq1qrrly4g/j27U+5PaRWOHawMiJwn1e1GTogk8B+K5ahshQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/table@3.13.1': - resolution: {integrity: sha512-Im8W+F8o9EhglY5kqRa3xcMGXl8zBi6W5phGpAjXb+UGDL1tBIlAcYj733bw8g/ITCnaSz9ubsmON0HekPd6Jg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/toggle@3.8.0': - resolution: {integrity: sha512-pyt/k/J8BwE/2g6LL6Z6sMSWRx9HEJB83Sm/MtovXnI66sxJ2EfQ1OaXB7Su5PEL9OMdoQF6Mb+N1RcW3zAoPw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/toggle@3.8.1': - resolution: {integrity: sha512-MVpe79ghVQiwLmVzIPhF/O/UJAUc9B+ZSylVTyJiEPi0cwhbkKGQv9thOF0ebkkRkace5lojASqUAYtSTZHQJA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/toggle@3.8.2': - resolution: {integrity: sha512-5KPpT6zvt8H+WC9UbubhCTZltREeYb/3hKdl4YkS7BbSOQlHTFC0pOk8SsQU70Pwk26jeVHbl5le/N8cw00x8w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/tooltip@3.5.0': - resolution: {integrity: sha512-+xzPNztJDd2XJD0X3DgWKlrgOhMqZpSzsIssXeJgO7uCnP8/Z513ESaipJhJCFC8fxj5caO/DK4Uu8hEtlB8cQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/tree@3.8.6': - resolution: {integrity: sha512-lblUaxf1uAuIz5jm6PYtcJ+rXNNVkqyFWTIMx6g6gW/mYvm8GNx1G/0MLZE7E6CuDGaO9dkLSY2bB1uqyKHidA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/tree@3.8.8': - resolution: {integrity: sha512-21WB9kKT9+/tr6B8Q4G53tZXl/3dftg5sZqCR6x055FGd2wGVbkxsLhQLmC+XVkTiLU9pB3BjvZ9eaSj1D8Wmg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/utils@3.10.5': - resolution: {integrity: sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/virtualizer@4.2.1': - resolution: {integrity: sha512-GHGEXV0ZRhq34U/P3LzkByCBfy2IDynYlV1SE4njkUWWGE/0AH56UegM6w2l3GeiNpXsXCgXl7jpAKeIGMEnrQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/breadcrumbs@3.7.10': - resolution: {integrity: sha512-5HhRxkKHfAQBoyOYzyf4HT+24HgPE/C/QerxJLNNId303LXO03yeYrbvRqhYZSlD1ACLJW9OmpPpREcw5iSqgw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/button@3.10.1': - resolution: {integrity: sha512-XTtap8o04+4QjPNAshFWOOAusUTxQlBjU2ai0BTVLShQEjHhRVDBIWsI2B2FKJ4KXT6AZ25llaxhNrreWGonmA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/button@3.10.2': - resolution: {integrity: sha512-h8SB/BLoCgoBulCpyzaoZ+miKXrolK9XC48+n1dKJXT8g4gImrficurDW6+PRTQWaRai0Q0A6bu8UibZOU4syg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/button@3.11.0': - resolution: {integrity: sha512-gJh5i0JiBiZGZGDo+tXMp6xbixPM7IKZ0sDuxTYBG49qNzzWJq0uNYltO3emwSVXFSsBgRV/Wu8kQGhfuN7wIw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/calendar@3.6.1': - resolution: {integrity: sha512-EMbFJX/3gD5j+R0qZEGqK+wlhBxMSHhGP8GqP9XGbpuJPE3w9/M/PVWdh8FUdzf9srYxPOq5NgiGI1JUJvdZqw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/checkbox@3.9.1': - resolution: {integrity: sha512-0x/KQcipfNM9Nvy6UMwYG25roRLvsiqf0J3woTYylNNWzF+72XT0iI5FdJkE3w2wfa0obmSoeq4WcbFREQrH/A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/checkbox@3.9.2': - resolution: {integrity: sha512-BruOLjr9s0BS2+G1Q2ZZ0ubnSTG54hZWr59lCHXaLxMdA/+KVsR6JVMQuYKsW0P8RDDlQXE/QGz3n9yB/Ara4A==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/datepicker@3.10.0': - resolution: {integrity: sha512-Att7y4NedNH1CogMDIX9URXgMLxGbZgnFCZ8oxgFAVndWzbh3TBcc4s7uoJDPvgRMAalq+z+SrlFFeoBeJmvvg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/datepicker@3.9.0': - resolution: {integrity: sha512-dbKL5Qsm2MQwOTtVQdOcKrrphcXAqDD80WLlSQrBLg+waDuuQ7H+TrvOT0thLKloNBlFUGnZZfXGRHINpih/0g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/dialog@3.5.16': - resolution: {integrity: sha512-2D16XjuW9fG3LkVIXu3RzUp3zcK2IZOWlAl+r5i0aLw2Q0QHyYMfGbmgvhxVeAhxhEj/57/ziSl/8rJ9pzmFnw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/form@3.7.8': - resolution: {integrity: sha512-0wOS97/X0ijTVuIqik1lHYTZnk13QkvMTKvIEhM7c6YMU3vPiirBwLbT2kJiAdwLiymwcCkrBdDF1NTRG6kPFA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/form@3.7.9': - resolution: {integrity: sha512-+qGDrQFdIh8umU82zmnYJ0V2rLoGSQ3yApFT02URz//NWeTA7qo0Oab2veKvXUkcBb47oSvytZYmkExPikxIEg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/grid@3.2.11': - resolution: {integrity: sha512-Mww9nrasppvPbsBi+uUqFnf7ya8fXN0cTVzDNG+SveD8mhW+sbtuy+gPtEpnFD2Oyi8qLuObefzt4gdekJX2Yw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/grid@3.3.0': - resolution: {integrity: sha512-9IXgD5qXXxz+S9RK+zT8umuTCEcE4Yfdl0zUGyTCB8LVcPEeZuarLGXZY/12Rkbd8+r6MUIKTxMVD3Nq9X5Ksg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/link@3.5.11': - resolution: {integrity: sha512-aX9sJod9msdQaOT0NUTYNaBKSkXGPazSPvUJ/Oe4/54T3sYkWeRqmgJ84RH55jdBzpbObBTg8qxKiPA26a1q9Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/link@3.5.9': - resolution: {integrity: sha512-JcKDiDMqrq/5Vpn+BdWQEuXit4KN4HR/EgIi3yKnNbYkLzxBoeQZpQgvTaC7NEQeZnSqkyXQo3/vMUeX/ZNIKw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/listbox@3.5.5': - resolution: {integrity: sha512-6cUjbYZVa0X2UMsenQ50ZaAssTUfzX3D0Q0Wd5nNf4W7ntBroDg6aBfNQoPDZikPUy8u+Y3uc/xZQfv30si7NA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/menu@3.9.13': - resolution: {integrity: sha512-7SuX6E2tDsqQ+HQdSvIda1ji/+ujmR86dtS9CUu5yWX91P25ufRjZ72EvLRqClWNQsj1Xl4+2zBDLWlceznAjw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/overlays@3.8.11': - resolution: {integrity: sha512-aw7T0rwVI3EuyG5AOaEIk8j7dZJQ9m34XAztXJVZ/W2+4pDDkLDbJ/EAPnuo2xGYRGhowuNDn4tDju01eHYi+w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/overlays@3.8.12': - resolution: {integrity: sha512-ZvR1t0YV7/6j+6OD8VozKYjvsXT92+C/2LOIKozy7YUNS5KI4MkXbRZzJvkuRECVZOmx8JXKTUzhghWJM/3QuQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/overlays@3.8.13': - resolution: {integrity: sha512-xgT843KIh1otvYPQ6kCGTVUICiMF5UQ7SZUQZd4Zk3VtiFIunFVUvTvL03cpt0026UmY7tbv7vFrPKcT6xjsjw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/progress@3.5.9': - resolution: {integrity: sha512-zFxOzx3G8XUmHgpm037Hcayls5bqzXVa182E3iM7YWTmrjxJPKZ58XL0WWBgpTd+mJD7fTpnFdAZqSmFbtDOdA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/select@3.9.8': - resolution: {integrity: sha512-RGsYj2oFjXpLnfcvWMBQnkcDuKkwT43xwYWZGI214/gp/B64tJiIUgTM5wFTRAeGDX23EePkhCQF+9ctnqFd6g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/shared@3.26.0': - resolution: {integrity: sha512-6FuPqvhmjjlpEDLTiYx29IJCbCNWPlsyO+ZUmCUXzhUv2ttShOXfw8CmeHWHftT/b2KweAWuzqSlfeXPR76jpw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/shared@3.27.0': - resolution: {integrity: sha512-gvznmLhi6JPEf0bsq7SwRYTHAKKq/wcmKqFez9sRdbED+SPMUmK5omfZ6w3EwUFQHbYUa4zPBYedQ7Knv70RMw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/shared@3.28.0': - resolution: {integrity: sha512-9oMEYIDc3sk0G5rysnYvdNrkSg7B04yTKl50HHSZVbokeHpnU0yRmsDaWb9B/5RprcKj8XszEk5guBO8Sa/Q+Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/switch@3.5.9': - resolution: {integrity: sha512-7XIS5qycIKhdfcWfzl8n458/7tkZKCNfMfZmIREgozKOtTBirjmtRRsefom2hlFT8VIlG7COmY4btK3oEuEhnQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/table@3.10.4': - resolution: {integrity: sha512-d0tLz/whxVteqr1rophtuuxqyknHHfTKeXrCgDjt8pAyd9U8GPDbfcFSfYPUhWdELRt7aLVyQw6VblZHioVEgQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/textfield@3.10.0': - resolution: {integrity: sha512-ShU3d6kLJGQjPXccVFjM3KOXdj3uyhYROqH9YgSIEVxgA9W6LRflvk/IVBamD9pJYTPbwmVzuP0wQkTDupfZ1w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/tooltip@3.4.13': - resolution: {integrity: sha512-KPekFC17RTT8kZlk7ZYubueZnfsGTDOpLw7itzolKOXGddTXsrJGBzSB4Bb060PBVllaDO0MOrhPap8OmrIl1Q==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@remix-run/router@1.16.0': - resolution: {integrity: sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==} - engines: {node: '>=14.0.0'} - - '@rollup/rollup-android-arm-eabi@4.34.9': - resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.34.9': - resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.34.9': - resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} + "@eslint-community/regexpp@4.12.1": + resolution: + { integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + + "@eslint/config-array@0.19.2": + resolution: + { integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/config-helpers@0.2.1": + resolution: + { integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/core@0.12.0": + resolution: + { integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/core@0.13.0": + resolution: + { integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/eslintrc@3.3.1": + resolution: + { integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/js@9.23.0": + resolution: + { integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/object-schema@2.1.6": + resolution: + { integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/plugin-kit@0.2.8": + resolution: + { integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@floating-ui/core@1.6.9": + resolution: + { integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw== } + + "@floating-ui/dom@1.6.13": + resolution: + { integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w== } + + "@floating-ui/react-dom@2.1.2": + resolution: + { integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== } + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + + "@floating-ui/utils@0.2.9": + resolution: + { integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg== } + + "@formatjs/ecma402-abstract@2.3.4": + resolution: + { integrity: sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA== } + + "@formatjs/fast-memoize@2.2.7": + resolution: + { integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ== } + + "@formatjs/icu-messageformat-parser@2.11.2": + resolution: + { integrity: sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA== } + + "@formatjs/icu-skeleton-parser@1.8.14": + resolution: + { integrity: sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ== } + + "@formatjs/intl-localematcher@0.5.10": + resolution: + { integrity: sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q== } + + "@formatjs/intl-localematcher@0.6.1": + resolution: + { integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg== } + + "@hookform/resolvers@5.0.1": + resolution: + { integrity: sha512-u/+Jp83luQNx9AdyW2fIPGY6Y7NG68eN2ZW8FOJYL+M0i4s49+refdJdOp/A9n9HFQtQs3HIDHQvX3ZET2o7YA== } + peerDependencies: + react-hook-form: ^7.55.0 + + "@humanfs/core@0.19.1": + resolution: + { integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== } + engines: { node: ">=18.18.0" } + + "@humanfs/node@0.16.6": + resolution: + { integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== } + engines: { node: ">=18.18.0" } + + "@humanwhocodes/module-importer@1.0.1": + resolution: + { integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== } + engines: { node: ">=12.22" } + + "@humanwhocodes/retry@0.3.1": + resolution: + { integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== } + engines: { node: ">=18.18" } + + "@humanwhocodes/retry@0.4.2": + resolution: + { integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ== } + engines: { node: ">=18.18" } + + "@ianvs/prettier-plugin-sort-imports@4.4.1": + resolution: + { integrity: sha512-F0/Hrcfpy8WuxlQyAWJTEren/uxKhYonOGY4OyWmwRdeTvkh9mMSCxowZLjNkhwi/2ipqCgtXwwOk7tW0mWXkA== } + peerDependencies: + "@vue/compiler-sfc": 2.7.x || 3.x + prettier: 2 || 3 + peerDependenciesMeta: + "@vue/compiler-sfc": + optional: true + + "@img/sharp-darwin-arm64@0.33.5": + resolution: + { integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.34.9': - resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} + "@img/sharp-darwin-x64@0.33.5": + resolution: + { integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.34.9': - resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} + "@img/sharp-libvips-darwin-arm64@1.0.4": + resolution: + { integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg== } cpu: [arm64] - os: [freebsd] + os: [darwin] - '@rollup/rollup-freebsd-x64@4.34.9': - resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} + "@img/sharp-libvips-darwin-x64@1.0.4": + resolution: + { integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ== } cpu: [x64] - os: [freebsd] + os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.34.9': - resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.34.9': - resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.34.9': - resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} + "@img/sharp-libvips-linux-arm64@1.0.4": + resolution: + { integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA== } cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.34.9': - resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} - cpu: [arm64] + "@img/sharp-libvips-linux-arm@1.0.5": + resolution: + { integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g== } + cpu: [arm] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.34.9': - resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': - resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.34.9': - resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.34.9': - resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} + "@img/sharp-libvips-linux-s390x@1.0.4": + resolution: + { integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA== } cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.34.9': - resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} + "@img/sharp-libvips-linux-x64@1.0.4": + resolution: + { integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw== } cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.34.9': - resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-win32-arm64-msvc@4.34.9': - resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} + "@img/sharp-libvips-linuxmusl-arm64@1.0.4": + resolution: + { integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA== } cpu: [arm64] - os: [win32] + os: [linux] - '@rollup/rollup-win32-ia32-msvc@4.34.9': - resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} + "@img/sharp-libvips-linuxmusl-x64@1.0.4": + resolution: + { integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw== } + cpu: [x64] + os: [linux] + + "@img/sharp-linux-arm64@0.33.5": + resolution: + { integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [linux] + + "@img/sharp-linux-arm@0.33.5": + resolution: + { integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm] + os: [linux] + + "@img/sharp-linux-s390x@0.33.5": + resolution: + { integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [s390x] + os: [linux] + + "@img/sharp-linux-x64@0.33.5": + resolution: + { integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [linux] + + "@img/sharp-linuxmusl-arm64@0.33.5": + resolution: + { integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [linux] + + "@img/sharp-linuxmusl-x64@0.33.5": + resolution: + { integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [linux] + + "@img/sharp-wasm32@0.33.5": + resolution: + { integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [wasm32] + + "@img/sharp-win32-ia32@0.33.5": + resolution: + { integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.34.9': - resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} + "@img/sharp-win32-x64@0.33.5": + resolution: + { integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } cpu: [x64] os: [win32] - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + "@jridgewell/gen-mapping@0.3.8": + resolution: + { integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== } + engines: { node: ">=6.0.0" } - '@shikijs/engine-oniguruma@1.29.2': - resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} + "@jridgewell/resolve-uri@3.1.2": + resolution: + { integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== } + engines: { node: ">=6.0.0" } - '@shikijs/types@1.29.2': - resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} + "@jridgewell/set-array@1.2.1": + resolution: + { integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== } + engines: { node: ">=6.0.0" } - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + "@jridgewell/sourcemap-codec@1.5.0": + resolution: + { integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== } - '@standard-schema/utils@0.3.0': - resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + "@jridgewell/trace-mapping@0.3.25": + resolution: + { integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== } - '@stoplight/better-ajv-errors@1.0.3': - resolution: {integrity: sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==} - engines: {node: ^12.20 || >= 14.13} + "@napi-rs/wasm-runtime@0.2.9": + resolution: + { integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg== } + + "@next/env@15.2.4": + resolution: + { integrity: sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g== } + + "@next/eslint-plugin-next@15.2.4": + resolution: + { integrity: sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ== } + + "@next/swc-darwin-arm64@15.2.4": + resolution: + { integrity: sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw== } + engines: { node: ">= 10" } + cpu: [arm64] + os: [darwin] + + "@next/swc-darwin-x64@15.2.4": + resolution: + { integrity: sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew== } + engines: { node: ">= 10" } + cpu: [x64] + os: [darwin] + + "@next/swc-linux-arm64-gnu@15.2.4": + resolution: + { integrity: sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ== } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@next/swc-linux-arm64-musl@15.2.4": + resolution: + { integrity: sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA== } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@next/swc-linux-x64-gnu@15.2.4": + resolution: + { integrity: sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw== } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@next/swc-linux-x64-musl@15.2.4": + resolution: + { integrity: sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw== } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@next/swc-win32-arm64-msvc@15.2.4": + resolution: + { integrity: sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg== } + engines: { node: ">= 10" } + cpu: [arm64] + os: [win32] + + "@next/swc-win32-x64-msvc@15.2.4": + resolution: + { integrity: sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ== } + 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" } + + "@pkgr/core@0.2.4": + resolution: + { integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw== } + engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + + "@radix-ui/number@1.1.1": + resolution: + { integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g== } + + "@radix-ui/primitive@1.1.2": + resolution: + { integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA== } + + "@radix-ui/react-arrow@1.1.3": + resolution: + { integrity: sha512-2dvVU4jva0qkNZH6HHWuSz5FN5GeU5tymvCgutF8WaXz9WnD1NgUhy73cqzkjkN4Zkn8lfTPv5JIfrC221W+Nw== } peerDependencies: - ajv: '>=8' - - '@stoplight/json-ref-readers@1.2.2': - resolution: {integrity: sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==} - engines: {node: '>=8.3.0'} - - '@stoplight/json-ref-resolver@3.1.6': - resolution: {integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==} - engines: {node: '>=8.3.0'} - - '@stoplight/json@3.21.7': - resolution: {integrity: sha512-xcJXgKFqv/uCEgtGlPxy3tPA+4I+ZI4vAuMJ885+ThkTHFVkC+0Fm58lA9NlsyjnkpxFh4YiQWpH+KefHdbA0A==} - engines: {node: '>=8.3.0'} - - '@stoplight/ordered-object-literal@1.0.5': - resolution: {integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==} - engines: {node: '>=8'} - - '@stoplight/path@1.3.2': - resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==} - engines: {node: '>=8'} - - '@stoplight/spectral-core@1.19.4': - resolution: {integrity: sha512-8hnZXfssTlV99SKo8J8BwMt5LsiBFHkCh0V3P7j8IPcCNl//bpG92U4TpYy7AwmUms/zCLX7sxNQC6AZ+bkfzg==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-formats@1.8.2': - resolution: {integrity: sha512-c06HB+rOKfe7tuxg0IdKDEA5XnjL2vrn/m/OVIIxtINtBzphZrOgtRn7epQ5bQF5SWp84Ue7UJWaGgDwVngMFw==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-functions@1.9.3': - resolution: {integrity: sha512-jy4mguk0Ddz0Vr76PHervOZeyXTUW650zVfNT2Vt9Ji3SqtTVziHjq913CBVEGFS+IQw1McUXuHVLM6YKVZ6fQ==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-parsers@1.0.5': - resolution: {integrity: sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-ref-resolver@1.0.5': - resolution: {integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-rulesets@1.21.3': - resolution: {integrity: sha512-SQp/NNDykfCvgmo9DW1pBAbmyKRHhEHmsc28kuRHC6nJblGFsLyNVGkEDjSIJuviR7ooC2Y00vmf0R3OGcyhyw==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-runtime@1.1.3': - resolution: {integrity: sha512-uoKSVX/OYXOEBRQN7EtAaVefl8MlyhBkDcU2aDYEGALwYXHAH+vmF3ljhZrueMA3fSWLHTL3RxWqsjeeCor6lw==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/types@13.20.0': - resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==} - engines: {node: ^12.20 || >=14.13} - - '@stoplight/types@13.6.0': - resolution: {integrity: sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==} - engines: {node: ^12.20 || >=14.13} - - '@stoplight/types@14.1.1': - resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==} - engines: {node: ^12.20 || >=14.13} - - '@stoplight/yaml-ast-parser@0.0.50': - resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==} - - '@stoplight/yaml@4.3.0': - resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==} - engines: {node: '>=10.8'} - - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - - '@tanstack/react-virtual@3.11.2': - resolution: {integrity: sha512-OuFzMXPF4+xZgx8UzJha0AieuMihhhaWG0tCqpp6tDzlFwOmNBPYMuLOtMJ1Tr4pXLHmgjcWhG6RlknY2oNTdQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tanstack/react-virtual@3.11.3': - resolution: {integrity: sha512-vCU+OTylXN3hdC8RKg68tPlBPjjxtzon7Ys46MgrSLE+JhSjSTPvoQifV6DQJeJmA8Q3KT6CphJbejupx85vFw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tanstack/virtual-core@3.11.2': - resolution: {integrity: sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw==} - - '@tanstack/virtual-core@3.11.3': - resolution: {integrity: sha512-v2mrNSnMwnPJtcVqNvV0c5roGCBqeogN8jDtgtuHCphdwBasOZ17x8UV8qpHUh+u0MLfX43c0uUHKje0s+Zb0w==} - - '@trivago/prettier-plugin-sort-imports@5.2.2': - resolution: {integrity: sha512-fYDQA9e6yTNmA13TLVSA+WMQRc5Bn/c0EUBditUHNfMMxN7M82c38b1kEggVE3pLpZ0FwkwJkUEKMiOi52JXFA==} - engines: {node: '>18.12'} - peerDependencies: - '@vue/compiler-sfc': 3.x - prettier: 2.x - 3.x - prettier-plugin-svelte: 3.x - svelte: 4.x || 5.x + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@vue/compiler-sfc': + "@types/react": optional: true - prettier-plugin-svelte: - optional: true - svelte: + "@types/react-dom": optional: true - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - - '@types/es-aggregate-error@1.0.6': - resolution: {integrity: sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==} - - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@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@22.13.1': - resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} - - '@types/prop-types@15.7.14': - resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} - - '@types/react-dom@18.3.0': - resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} - - '@types/react@18.3.3': - resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/urijs@1.19.25': - resolution: {integrity: sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==} - - '@typescript-eslint/eslint-plugin@8.23.0': - resolution: {integrity: sha512-vBz65tJgRrA1Q5gWlRfvoH+w943dq9K1p1yDBY2pc+a1nbBLZp7fB9+Hk8DaALUbzjqlMfgaqlVPT1REJdkt/w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@radix-ui/react-aspect-ratio@1.1.3": + resolution: + { integrity: sha512-yIrYZUc2e/JtRkDpuJCmaR6kj/jzekDfQLcPFdEWzSOygCPy8poR4YcszaHP5A7mh25ncofHEpeTwfhxEuBv8Q== } peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true - '@typescript-eslint/parser@8.23.0': - resolution: {integrity: sha512-h2lUByouOXFAlMec2mILeELUbME5SZRN/7R9Cw2RD2lRQQY08MWMM+PmVVKKJNK1aIwqTo9t/0CvOxwPbRIE2Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@radix-ui/react-avatar@1.1.4": + resolution: + { integrity: sha512-+kBesLBzwqyDiYCtYFK+6Ktf+N7+Y6QOTUueLGLIbLZ/YeyFW6bsBGDsN+5HxHpM55C90u5fxsg0ErxzXTcwKA== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-collection@1.1.3": + resolution: + { integrity: sha512-mM2pxoQw5HJ49rkzwOs7Y6J4oYH22wS8BfK2/bBxROlI4xuR0c4jEenQP63LlTlDkO6Buj2Vt+QYAYcOgqtrXA== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-compose-refs@1.1.2": + resolution: + { integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-context@1.1.2": + resolution: + { integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-dialog@1.1.7": + resolution: + { integrity: sha512-EIdma8C0C/I6kL6sO02avaCRqi3fmWJpxH6mqbVScorW6nNktzKJT/le7VPho3o/7wCsyRg3z0+Q+Obr0Gy/VQ== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-direction@1.1.1": + resolution: + { integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-dismissable-layer@1.1.6": + resolution: + { integrity: sha512-7gpgMT2gyKym9Jz2ZhlRXSg2y6cNQIK8d/cqBZ0RBCaps8pFryCWXiUKI+uHGFrhMrbGUP7U6PWgiXzIxoyF3Q== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-dropdown-menu@2.1.7": + resolution: + { integrity: sha512-7/1LiuNZuCQE3IzdicGoHdQOHkS2Q08+7p8w6TXZ6ZjgAULaCI85ZY15yPl4o4FVgoKLRT43/rsfNVN8osClQQ== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-focus-guards@1.1.2": + resolution: + { integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-focus-scope@1.1.3": + resolution: + { integrity: sha512-4XaDlq0bPt7oJwR+0k0clCiCO/7lO7NKZTAaJBYxDNQT/vj4ig0/UvctrRscZaFREpRvUTkpKR96ov1e6jptQg== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-id@1.1.1": + resolution: + { integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-label@2.1.3": + resolution: + { integrity: sha512-zwSQ1NzSKG95yA0tvBMgv6XPHoqapJCcg9nsUBaQQ66iRBhZNhlpaQG2ERYYX4O4stkYFK5rxj5NsWfO9CS+Hg== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-menu@2.1.7": + resolution: + { integrity: sha512-tBODsrk68rOi1/iQzbM54toFF+gSw/y+eQgttFflqlGekuSebNqvFNHjJgjqPhiMb4Fw9A0zNFly1QT6ZFdQ+Q== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-popper@1.2.3": + resolution: + { integrity: sha512-iNb9LYUMkne9zIahukgQmHlSBp9XWGeQQ7FvUGNk45ywzOb6kQa+Ca38OphXlWDiKvyneo9S+KSJsLfLt8812A== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-portal@1.1.5": + resolution: + { integrity: sha512-ps/67ZqsFm+Mb6lSPJpfhRLrVL2i2fntgCmGMqqth4eaGUf+knAuuRtWVJrNjUhExgmdRqftSgzpf0DF0n6yXA== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-presence@1.1.3": + resolution: + { integrity: sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-primitive@2.0.3": + resolution: + { integrity: sha512-Pf/t/GkndH7CQ8wE2hbkXA+WyZ83fhQQn5DDmwDiDo6AwN/fhaH8oqZ0jRjMrO2iaMhDi6P1HRx6AZwyMinY1g== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-progress@1.1.3": + resolution: + { integrity: sha512-F56aZPGTPb4qJQ/vDjnAq63oTu/DRoIG/Asb5XKOWj8rpefNLtUllR969j5QDN2sRrTk9VXIqQDRj5VvAuquaw== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-roving-focus@1.1.3": + resolution: + { integrity: sha512-ufbpLUjZiOg4iYgb2hQrWXEPYX6jOLBbR27bDyAff5GYMRrCzcze8lukjuXVUQvJ6HZe8+oL+hhswDcjmcgVyg== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-scroll-area@1.2.4": + resolution: + { integrity: sha512-G9rdWTQjOR4sk76HwSdROhPU0jZWpfozn9skU1v4N0/g9k7TmswrJn8W8WMU+aYktnLLpk5LX6fofj2bGe5NFQ== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-select@2.1.7": + resolution: + { integrity: sha512-exzGIRtc7S8EIM2KjFg+7lJZsH7O7tpaBaJbBNVDnOZNhtoQ2iV+iSNfi2Wth0m6h3trJkMVvzAehB3c6xj/3Q== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-separator@1.1.3": + resolution: + { integrity: sha512-2omrWKJvxR0U/tkIXezcc1nFMwtLU0+b/rDK40gnzJqTLWQ/TD/D5IYVefp9sC3QWfeQbpSbEA6op9MQKyaALQ== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-slot@1.2.0": + resolution: + { integrity: sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-switch@1.1.4": + resolution: + { integrity: sha512-zGP6W8plLeogoeGMiTHJ/uvf+TE1C2chVsEwfP8YlvpQKJHktG+iCkUtCLGPAuDV8/qDSmIRPm4NggaTxFMVBQ== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-use-callback-ref@1.1.1": + resolution: + { integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-controllable-state@1.1.1": + resolution: + { integrity: sha512-YnEXIy8/ga01Y1PN0VfaNH//MhA91JlEGVBDxDzROqwrAtG5Yr2QGEPz8A/rJA3C7ZAHryOYGaUv8fLSW2H/mg== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-escape-keydown@1.1.1": + resolution: + { integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-layout-effect@1.1.1": + resolution: + { integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-previous@1.1.1": + resolution: + { integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-rect@1.1.1": + resolution: + { integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-size@1.1.1": + resolution: + { integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ== } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-visually-hidden@1.1.3": + resolution: + { integrity: sha512-oXSF3ZQRd5fvomd9hmUCb2EHSZbPp3ZSHAHJJU/DlF9XoFkJBBW8RHU/E8WEH+RbSfJd/QFA0sl8ClJXknBwHQ== } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/rect@1.1.1": + resolution: + { integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw== } + + "@rtsao/scc@1.1.0": + resolution: + { integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== } + + "@rushstack/eslint-patch@1.11.0": + resolution: + { integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ== } + + "@schummar/icu-type-parser@1.21.5": + resolution: + { integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw== } + + "@standard-schema/utils@0.3.0": + resolution: + { integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g== } + + "@swc/counter@0.1.3": + resolution: + { integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== } + + "@swc/helpers@0.5.15": + resolution: + { integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== } + + "@tabler/icons-react@3.31.0": + resolution: + { integrity: sha512-2rrCM5y/VnaVKnORpDdAua9SEGuJKVqPtWxeQ/vUVsgaUx30LDgBZph7/lterXxDY1IKR6NO//HDhWiifXTi3w== } + peerDependencies: + react: ">= 16" + + "@tabler/icons@3.31.0": + resolution: + { integrity: sha512-dblAdeKY3+GA1U+Q9eziZ0ooVlZMHsE8dqP0RkwvRtEsAULoKOYaCUOcJ4oW1DjWegdxk++UAt2SlQVnmeHv+g== } + + "@tailwindcss/node@4.1.2": + resolution: + { integrity: sha512-ZwFnxH+1z8Ehh8bNTMX3YFrYdzAv7JLY5X5X7XSFY+G9QGJVce/P9xb2mh+j5hKt8NceuHmdtllJvAHWKtsNrQ== } + + "@tailwindcss/oxide-android-arm64@4.1.2": + resolution: + { integrity: sha512-IxkXbntHX8lwGmwURUj4xTr6nezHhLYqeiJeqa179eihGv99pRlKV1W69WByPJDQgSf4qfmwx904H6MkQqTA8w== } + engines: { node: ">= 10" } + cpu: [arm64] + os: [android] + + "@tailwindcss/oxide-darwin-arm64@4.1.2": + resolution: + { integrity: sha512-ZRtiHSnFYHb4jHKIdzxlFm6EDfijTCOT4qwUhJ3GWxfDoW2yT3z/y8xg0nE7e72unsmSj6dtfZ9Y5r75FIrlpA== } + engines: { node: ">= 10" } + cpu: [arm64] + os: [darwin] + + "@tailwindcss/oxide-darwin-x64@4.1.2": + resolution: + { integrity: sha512-BiKUNZf1A0pBNzndBvnPnBxonCY49mgbOsPfILhcCE5RM7pQlRoOgN7QnwNhY284bDbfQSEOWnFR0zbPo6IDTw== } + engines: { node: ">= 10" } + cpu: [x64] + os: [darwin] + + "@tailwindcss/oxide-freebsd-x64@4.1.2": + resolution: + { integrity: sha512-Z30VcpUfRGkiddj4l5NRCpzbSGjhmmklVoqkVQdkEC0MOelpY+fJrVhzSaXHmWrmSvnX8yiaEqAbdDScjVujYQ== } + engines: { node: ">= 10" } + cpu: [x64] + os: [freebsd] + + "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.2": + resolution: + { integrity: sha512-w3wsK1ChOLeQ3gFOiwabtWU5e8fY3P1Ss8jR3IFIn/V0va3ir//hZ8AwURveS4oK1Pu6b8i+yxesT4qWnLVUow== } + engines: { node: ">= 10" } + cpu: [arm] + os: [linux] + + "@tailwindcss/oxide-linux-arm64-gnu@4.1.2": + resolution: + { integrity: sha512-oY/u+xJHpndTj7B5XwtmXGk8mQ1KALMfhjWMMpE8pdVAznjJsF5KkCceJ4Fmn5lS1nHMCwZum5M3/KzdmwDMdw== } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@tailwindcss/oxide-linux-arm64-musl@4.1.2": + resolution: + { integrity: sha512-k7G6vcRK/D+JOWqnKzKN/yQq1q4dCkI49fMoLcfs2pVcaUAXEqCP9NmA8Jv+XahBv5DtDjSAY3HJbjosEdKczg== } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@tailwindcss/oxide-linux-x64-gnu@4.1.2": + resolution: + { integrity: sha512-fLL+c678TkYKgkDLLNxSjPPK/SzTec7q/E5pTwvpTqrth867dftV4ezRyhPM5PaiCqX651Y8Yk0wRQMcWUGnmQ== } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@tailwindcss/oxide-linux-x64-musl@4.1.2": + resolution: + { integrity: sha512-0tU1Vjd1WucZ2ooq6y4nI9xyTSaH2g338bhrqk+2yzkMHskBm+pMsOCfY7nEIvALkA1PKPOycR4YVdlV7Czo+A== } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@tailwindcss/oxide-win32-arm64-msvc@4.1.2": + resolution: + { integrity: sha512-r8QaMo3QKiHqUcn+vXYCypCEha+R0sfYxmaZSgZshx9NfkY+CHz91aS2xwNV/E4dmUDkTPUag7sSdiCHPzFVTg== } + engines: { node: ">= 10" } + cpu: [arm64] + os: [win32] + + "@tailwindcss/oxide-win32-x64-msvc@4.1.2": + resolution: + { integrity: sha512-lYCdkPxh9JRHXoBsPE8Pu/mppUsC2xihYArNAESub41PKhHTnvn6++5RpmFM+GLSt3ewyS8fwCVvht7ulWm6cw== } + engines: { node: ">= 10" } + cpu: [x64] + os: [win32] + + "@tailwindcss/oxide@4.1.2": + resolution: + { integrity: sha512-Zwz//1QKo6+KqnCKMT7lA4bspGfwEgcPAHlSthmahtgrpKDfwRGk8PKQrW8Zg/ofCDIlg6EtjSTKSxxSufC+CQ== } + engines: { node: ">= 10" } + + "@tailwindcss/postcss@4.1.2": + resolution: + { integrity: sha512-vgkMo6QRhG6uv97im6Y4ExDdq71y9v2IGZc+0wn7lauQFYJM/1KdUVhrOkexbUso8tUsMOWALxyHVkQEbsM7gw== } + + "@tybys/wasm-util@0.9.0": + resolution: + { integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== } + + "@types/estree@1.0.7": + resolution: + { integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ== } + + "@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@22.14.0": + resolution: + { integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA== } + + "@types/react-dom@19.1.1": + resolution: + { integrity: sha512-jFf/woGTVTjUJsl2O7hcopJ1r0upqoq/vIOoCj0yLh3RIXxWcljlpuZ+vEBRXsymD1jhfeJrlyTy/S1UW+4y1w== } + peerDependencies: + "@types/react": ^19.0.0 + + "@types/react@19.1.0": + resolution: + { integrity: sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w== } + + "@typescript-eslint/eslint-plugin@8.29.0": + resolution: + { integrity: sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + + "@typescript-eslint/parser@8.29.0": + resolution: + { integrity: sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: ">=4.8.4 <5.9.0" - '@typescript-eslint/scope-manager@8.23.0': - resolution: {integrity: sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/scope-manager@8.29.0": + resolution: + { integrity: sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@typescript-eslint/type-utils@8.23.0': - resolution: {integrity: sha512-iIuLdYpQWZKbiH+RkCGc6iu+VwscP5rCtQ1lyQ7TYuKLrcZoeJVpcLiG8DliXVkUxirW/PWlmS+d6yD51L9jvA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/type-utils@8.29.0": + resolution: + { integrity: sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: ">=4.8.4 <5.9.0" - '@typescript-eslint/types@8.23.0': - resolution: {integrity: sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/types@8.29.0": + resolution: + { integrity: sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@typescript-eslint/typescript-estree@8.23.0': - resolution: {integrity: sha512-LcqzfipsB8RTvH8FX24W4UUFk1bl+0yTOf9ZA08XngFwMg4Kj8A+9hwz8Cr/ZS4KwHrmo9PJiLZkOt49vPnuvQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/typescript-estree@8.29.0": + resolution: + { integrity: sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '>=4.8.4 <5.8.0' + typescript: ">=4.8.4 <5.9.0" - '@typescript-eslint/utils@8.23.0': - resolution: {integrity: sha512-uB/+PSo6Exu02b5ZEiVtmY6RVYO7YU5xqgzTIVZwTHvvK3HsL8tZZHFaTLFtRG3CsV4A5mhOv+NZx5BlhXPyIA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/utils@8.29.0": + resolution: + { integrity: sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: ">=4.8.4 <5.9.0" - '@typescript-eslint/visitor-keys@8.23.0': - resolution: {integrity: sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@typescript-eslint/visitor-keys@8.29.0": + resolution: + { integrity: sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + "@unrs/resolver-binding-darwin-arm64@1.5.0": + resolution: + { integrity: sha512-YmocNlEcX/AgJv8gI41bhjMOTcKcea4D2nRIbZj+MhRtSH5+vEU8r/pFuTuoF+JjVplLsBueU+CILfBPVISyGQ== } + cpu: [arm64] + os: [darwin] - '@vitejs/plugin-react@4.3.4': - resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + "@unrs/resolver-binding-darwin-x64@1.5.0": + resolution: + { integrity: sha512-qpUrXgH4e/0xu1LOhPEdfgSY3vIXOxDQv370NEL8npN8h40HcQDA+Pl2r4HBW6tTXezWIjxUFcP7tj529RZtDw== } + cpu: [x64] + os: [darwin] - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} + "@unrs/resolver-binding-freebsd-x64@1.5.0": + resolution: + { integrity: sha512-3tX8r8vgjvZzaJZB4jvxUaaFCDCb3aWDCpZN3EjhGnnwhztslI05KSG5NY/jNjlcZ5QWZ7dEZZ/rNBFsmTaSPw== } + cpu: [x64] + os: [freebsd] + + "@unrs/resolver-binding-linux-arm-gnueabihf@1.5.0": + resolution: + { integrity: sha512-FH+ixzBKaUU9fWOj3TYO+Yn/eO6kYvMLV9eNJlJlkU7OgrxkCmiMS6wUbyT0KA3FOZGxnEQ2z3/BHgYm2jqeLA== } + cpu: [arm] + os: [linux] + + "@unrs/resolver-binding-linux-arm-musleabihf@1.5.0": + resolution: + { integrity: sha512-pxCgXMgwB/4PfqFQg73lMhmWwcC0j5L+dNXhZoz/0ek0iS/oAWl65fxZeT/OnU7fVs52MgdP2q02EipqJJXHSg== } + cpu: [arm] + os: [linux] + + "@unrs/resolver-binding-linux-arm64-gnu@1.5.0": + resolution: + { integrity: sha512-FX2FV7vpLE/+Z0NZX9/1pwWud5Wocm/2PgpUXbT5aSV3QEB10kBPJAzssOQylvdj8mOHoKl5pVkXpbCwww/T2g== } + cpu: [arm64] + os: [linux] + + "@unrs/resolver-binding-linux-arm64-musl@1.5.0": + resolution: + { integrity: sha512-+gF97xst1BZb28T3nwwzEtq2ewCoMDGKsenYsZuvpmNrW0019G1iUAunZN+FG55L21y+uP7zsGX06OXDQ/viKw== } + cpu: [arm64] + os: [linux] + + "@unrs/resolver-binding-linux-ppc64-gnu@1.5.0": + resolution: + { integrity: sha512-5bEmVcQw9js8JYM2LkUBw5SeELSIxX+qKf9bFrfFINKAp4noZ//hUxLpbF7u/3gTBN1GsER6xOzIZlw/VTdXtA== } + cpu: [ppc64] + os: [linux] + + "@unrs/resolver-binding-linux-riscv64-gnu@1.5.0": + resolution: + { integrity: sha512-GGk/8TPUsf1Q99F+lzMdjE6sGL26uJCwQ9TlvBs8zR3cLQNw/MIumPN7zrs3GFGySjnwXc8gA6J3HKbejywmqA== } + cpu: [riscv64] + os: [linux] + + "@unrs/resolver-binding-linux-s390x-gnu@1.5.0": + resolution: + { integrity: sha512-5uRkFYYVNAeVaA4W/CwugjFN3iDOHCPqsBLCCOoJiMfFMMz4evBRsg+498OFa9w6VcTn2bD5aI+RRayaIgk2Sw== } + cpu: [s390x] + os: [linux] + + "@unrs/resolver-binding-linux-x64-gnu@1.5.0": + resolution: + { integrity: sha512-j905CZH3nehYy6NimNqC2B14pxn4Ltd7guKMyPTzKehbFXTUgihQS/ZfHQTdojkMzbSwBOSgq1dOrY+IpgxDsA== } + cpu: [x64] + os: [linux] + + "@unrs/resolver-binding-linux-x64-musl@1.5.0": + resolution: + { integrity: sha512-dmLevQTuzQRwu5A+mvj54R5aye5I4PVKiWqGxg8tTaYP2k2oTs/3Mo8mgnhPk28VoYCi0fdFYpgzCd4AJndQvQ== } + cpu: [x64] + os: [linux] + + "@unrs/resolver-binding-wasm32-wasi@1.5.0": + resolution: + { integrity: sha512-LtJMhwu7avhoi+kKfAZOKN773RtzLBVVF90YJbB0wyMpUj9yQPeA+mteVUI9P70OG/opH47FeV5AWeaNWWgqJg== } + engines: { node: ">=14.0.0" } + cpu: [wasm32] + + "@unrs/resolver-binding-win32-arm64-msvc@1.5.0": + resolution: + { integrity: sha512-FTZBxLL4SO1mgIM86KykzJmPeTPisBDHQV6xtfDXbTMrentuZ6SdQKJUV5BWaoUK3p8kIULlrCcucqdCnk8Npg== } + cpu: [arm64] + os: [win32] + + "@unrs/resolver-binding-win32-ia32-msvc@1.5.0": + resolution: + { integrity: sha512-i5bB7vJ1waUsFciU/FKLd4Zw0VnAkvhiJ4//jYQXyDUuiLKodmtQZVTcOPU7pp97RrNgCFtXfC1gnvj/DHPJTw== } + cpu: [ia32] + os: [win32] + + "@unrs/resolver-binding-win32-x64-msvc@1.5.0": + resolution: + { integrity: sha512-wAvXp4k7jhioi4SebXW/yfzzYwsUCr9kIX4gCsUFKpCTUf8Mi7vScJXI3S+kupSUf0LbVHudR8qBbe2wFMSNUw== } + cpu: [x64] + os: [win32] acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + resolution: + { integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== } peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} + resolution: + { integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== } + engines: { node: ">=0.4.0" } hasBin: true - ajv-draft-04@1.0.0: - resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} - peerDependencies: - ajv: ^8.5.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv-errors@3.0.0: - resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==} - peerDependencies: - ajv: ^8.0.1 - - ajv-formats@2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} + resolution: + { integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== } ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + resolution: + { integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== } + engines: { node: ">=8" } argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + resolution: + { integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== } + + aria-hidden@1.2.4: + resolution: + { integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== } + engines: { node: ">=10" } aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} + 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'} + resolution: + { integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== } + engines: { node: ">= 0.4" } array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== } + engines: { node: ">= 0.4" } array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== } + engines: { node: ">= 0.4" } - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - 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'} + 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'} + 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'} + 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'} + 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==} - - astring@1.9.0: - resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} - hasBin: true + resolution: + { integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== } async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== } + engines: { node: ">= 0.4" } asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - autoprefixer@10.4.20: - resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 + resolution: + { integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== } available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== } + engines: { node: ">= 0.4" } axe-core@4.10.3: - resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} - engines: {node: '>=4'} + resolution: + { integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== } + engines: { node: ">=4" } - axios@1.8.1: - resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} + axios@1.8.4: + resolution: + { integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== } axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== } + engines: { node: ">= 0.4" } balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== } brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + resolution: + { integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== } brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + resolution: + { integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== } braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== } + engines: { node: ">=8" } - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} + busboy@1.6.0: + resolution: + { integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== } + engines: { node: ">=10.16.0" } call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== } + engines: { node: ">= 0.4" } call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== } + engines: { node: ">= 0.4" } call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - call-me-maybe@1.0.2: - resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + resolution: + { integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== } + engines: { node: ">= 0.4" } callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== } + engines: { node: ">=6" } - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - caniuse-lite@1.0.30001702: - resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} + caniuse-lite@1.0.30001714: + resolution: + { integrity: sha512-mtgapdwDLSSBnCI3JokHM7oEQBLxiJKVRtg10AxM1AyeiKcM96f0Mkbqeq+1AbiCtvMcHRulAAEMu693JrSWqg== } chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== } + engines: { node: ">=10" } - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + class-variance-authority@0.7.1: + resolution: + { integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg== } - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clsx@1.2.1: - resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} - engines: {node: '>=6'} + client-only@0.0.1: + resolution: + { integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== } clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== } + engines: { node: ">=6" } color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + 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==} + resolution: + { integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== } color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color2k@2.0.3: - resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==} + resolution: + { integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== } color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + resolution: + { integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== } + engines: { node: ">=12.5.0" } combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - compare-versions@6.1.1: - resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + resolution: + { integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== } + engines: { node: ">= 0.8" } concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + resolution: + { integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== } - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie@0.4.2: + resolution: + { integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== } + engines: { node: ">= 0.6" } cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true + resolution: + { integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== } + engines: { node: ">= 8" } csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + resolution: + { integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== } damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + resolution: + { integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== } data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} + 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'} + 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'} + resolution: + { integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== } + engines: { node: ">= 0.4" } date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + resolution: + { integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== } debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + resolution: + { integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} + resolution: + { integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== } + engines: { node: ">=6.0" } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true decimal.js@10.5.0: - resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} + resolution: + { integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== } deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} + 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'} + 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'} + resolution: + { integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== } + engines: { node: ">= 0.4" } delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + resolution: + { integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== } + engines: { node: ">=0.4.0" } - dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} + detect-libc@2.0.3: + resolution: + { integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== } + engines: { node: ">=8" } - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + detect-node-es@1.1.0: + resolution: + { integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== } doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.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'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - electron-to-chromium@1.5.112: - resolution: {integrity: sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + resolution: + { integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== } + engines: { node: ">= 0.4" } emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + resolution: + { integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== } - enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} + enhanced-resolve@5.18.1: + resolution: + { integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== } + engines: { node: ">=10.13.0" } es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} - engines: {node: '>= 0.4'} - - es-aggregate-error@1.0.13: - resolution: {integrity: sha512-KkzhUUuD2CUMqEc8JEqsXEMDHzDPE8RCjZeUBitsnB1eNcAJWQPiciKsMXe3Yytj4Flw1XLl46Qcf9OxvZha7A==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== } + engines: { node: ">= 0.4" } es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== } + engines: { node: ">= 0.4" } es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== } + engines: { node: ">= 0.4" } es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== } + engines: { node: ">= 0.4" } es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== } + engines: { node: ">= 0.4" } es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} + 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'} + resolution: + { integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== } + engines: { node: ">= 0.4" } es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - es6-promise@3.3.1: - resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - - esbuild@0.25.0: - resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== } + engines: { node: ">= 0.4" } escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== } + engines: { node: ">=10" } + + eslint-config-next@15.2.4: + resolution: + { integrity: sha512-v4gYjd4eYIme8qzaJItpR5MMBXJ0/YV07u7eb50kEnlEmX7yhOjdUdzz70v4fiINYRjLf8X8TbogF0k7wlz6sA== } + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + typescript: ">=3.3.1" + peerDependenciesMeta: + typescript: + optional: true eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + resolution: + { integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== } hasBin: true peerDependencies: - eslint: '>=7.0.0' + eslint: ">=7.0.0" eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + resolution: + { integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== } + + eslint-import-resolver-typescript@3.10.0: + resolution: + { integrity: sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ== } + 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.12.0: - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} - engines: {node: '>=4'} + resolution: + { integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== } + engines: { node: ">=4" } peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' + "@typescript-eslint/parser": "*" + eslint: "*" + eslint-import-resolver-node: "*" + eslint-import-resolver-typescript: "*" + eslint-import-resolver-webpack: "*" peerDependenciesMeta: - '@typescript-eslint/parser': + "@typescript-eslint/parser": optional: true eslint: optional: true @@ -2540,1843 +1742,1444 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-es@3.0.1: - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - eslint-plugin-import@2.31.0: - resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} - engines: {node: '>=4'} + resolution: + { integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== } + engines: { node: ">=4" } peerDependencies: - '@typescript-eslint/parser': '*' + "@typescript-eslint/parser": "*" eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: - '@typescript-eslint/parser': + "@typescript-eslint/parser": optional: true eslint-plugin-jsx-a11y@6.10.2: - resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} - engines: {node: '>=4.0'} + resolution: + { integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== } + engines: { node: ">=4.0" } peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - eslint-plugin-node@11.1.0: - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} + eslint-plugin-prettier@5.2.6: + resolution: + { integrity: sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ== } + engines: { node: ^14.18.0 || >=16.0.0 } peerDependencies: - eslint: '>=5.16.0' - - eslint-plugin-prettier@5.2.3: - resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '*' - prettier: '>=3.0.0' + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + eslint-config-prettier: ">= 7.0.0 <10.0.0 || >=10.1.0" + prettier: ">=3.0.0" peerDependenciesMeta: - '@types/eslint': + "@types/eslint": optional: true eslint-config-prettier: optional: true - eslint-plugin-react-hooks@4.6.2: - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} - engines: {node: '>=10'} + eslint-plugin-react-hooks@5.2.0: + resolution: + { integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== } + engines: { node: ">=10" } peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react@7.37.4: - resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} - engines: {node: '>=4'} + 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-plugin-unused-imports@4.1.4: - resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 - eslint: ^9.0.0 || ^8.0.0 - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - - eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} + eslint-scope@8.3.0: + resolution: + { integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ== } + 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} + 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.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + eslint@9.23.0: + resolution: + { integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } hasBin: true + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.3.0: + resolution: + { integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + resolution: + { integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== } + engines: { node: ">=0.10" } esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.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'} + 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'} - - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + 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==} + resolution: + { integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== } fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + resolution: + { integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== } + + fast-glob@3.3.1: + resolution: + { integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== } + engines: { node: ">=8.6.0" } fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} + resolution: + { integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== } + engines: { node: ">=8.6.0" } fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + resolution: + { integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== } fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fast-memoize@2.5.2: - resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} - - fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + resolution: + { integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== } fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + resolution: + { integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== } - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + fdir@6.4.3: + resolution: + { integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== } + 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'} + resolution: + { integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== } + engines: { node: ">=8" } find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== } + engines: { node: ">=10" } - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - - flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true + flat-cache@4.0.1: + resolution: + { integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== } + engines: { node: ">=16" } flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + resolution: + { integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== } follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} + resolution: + { integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== } + engines: { node: ">=4.0" } peerDependencies: - debug: '*' + debug: "*" peerDependenciesMeta: debug: optional: true for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} + resolution: + { integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== } + engines: { node: ">= 0.4" } form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} - engines: {node: '>= 6'} + resolution: + { integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== } + engines: { node: ">= 6" } - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - - framer-motion@12.4.1: - resolution: {integrity: sha512-5Ijbea3topSZjadQ0hgc/TcWj2ldMZmNREM7RvAhvsThYOA1HHOA8TT1yKvMu1YXP3jWaFwoZ6Vo9Nw+DUZrzA==} + framer-motion@12.7.3: + resolution: + { integrity: sha512-dNT4l5gEnUo2ytXLUBUf6AI21dZ77TMclDKE3ElaIHZ8m90nJ/NCcExW51zdSIaS0RhAS5iXcF7bEIxZe8XG2g== } peerDependencies: - '@emotion/is-prop-valid': '*' + "@emotion/is-prop-valid": "*" react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: - '@emotion/is-prop-valid': + "@emotion/is-prop-valid": optional: true react: optional: true react-dom: optional: true - fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} - engines: {node: '>=14.14'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + resolution: + { integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== } function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== } + engines: { node: ">= 0.4" } functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + resolution: + { integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== } get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== } + engines: { node: ">= 0.4" } + + get-nonce@1.0.1: + resolution: + { integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== } + engines: { node: ">=6" } get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + 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'} + resolution: + { integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== } + engines: { node: ">= 0.4" } + + get-tsconfig@4.10.0: + resolution: + { integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A== } glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + 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'} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + resolution: + { integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== } + engines: { node: ">=10.13.0" } globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + resolution: + { integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== } + engines: { node: ">=4" } - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: + { integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== } + engines: { node: ">=18" } globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + 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'} + 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==} + resolution: + { integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== } graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + resolution: + { integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== } has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== } + engines: { node: ">= 0.4" } has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== } + engines: { node: ">=8" } has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + resolution: + { integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== } has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} + 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'} + resolution: + { integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== } + engines: { node: ">= 0.4" } has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== } + engines: { node: ">= 0.4" } hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - html-parse-stringify@3.0.1: - resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} - - http2-client@1.3.5: - resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - i18next-browser-languagedetector@8.0.4: - resolution: {integrity: sha512-f3frU3pIxD50/Tz20zx9TD9HobKYg47fmAETb117GKGPrhwcSSPJDoCposXlVycVebQ9GQohC3Efbpq7/nnJ5w==} - - i18next@24.2.2: - resolution: {integrity: sha512-NE6i86lBCKRYZa5TaUDkU5S4HFgLIEJRLr3Whf2psgaxBleQ2LC1YW1Vc+SCgkAW7VEzndT6al6+CzegSUHcTQ==} - peerDependencies: - typescript: ^5 - peerDependenciesMeta: - typescript: - optional: true + resolution: + { integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== } + engines: { node: ">= 0.4" } ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + resolution: + { integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== } + engines: { node: ">= 4" } import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== } + engines: { node: ">=6" } imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + resolution: + { integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== } + engines: { node: ">=0.8.19" } internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== } + engines: { node: ">= 0.4" } - intl-messageformat@10.7.15: - resolution: {integrity: sha512-LRyExsEsefQSBjU2p47oAheoKz+EOJxSLDdjOaEjdriajfHsMXOmV/EhMvYSg9bAgCUHasuAC+mcUBe/95PfIg==} + intl-messageformat@10.7.16: + resolution: + { integrity: sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug== } is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== } + engines: { node: ">= 0.4" } is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + resolution: + { integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== } is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} + 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-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + 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'} + 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'} + resolution: + { integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== } + engines: { node: ">= 0.4" } is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== } + engines: { node: ">= 0.4" } is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} + 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'} + resolution: + { integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== } + engines: { node: ">= 0.4" } is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + 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-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== } + engines: { node: ">= 0.4" } is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== } + engines: { node: ">= 0.4" } is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + 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'} + resolution: + { integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== } + engines: { node: ">= 0.4" } is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} + 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-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} + 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'} + 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'} + 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-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + resolution: + { integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== } + engines: { node: ">= 0.4" } is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} + 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'} + 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'} + 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'} + 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'} + resolution: + { integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== } + engines: { node: ">= 0.4" } is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== } + engines: { node: ">= 0.4" } isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + resolution: + { integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== } isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + resolution: + { integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== } iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} + resolution: + { integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== } + engines: { node: ">= 0.4" } - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - javascript-natural-sort@0.7.1: - resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} - - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + jiti@2.4.2: + resolution: + { integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== } hasBin: true js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + resolution: + { integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== } js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + resolution: + { integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== } hasBin: true - jsep@1.4.0: - resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} - engines: {node: '>= 10.16.0'} - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== } + engines: { node: ">=6" } hasBin: true json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + resolution: + { integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== } json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + resolution: + { integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== } json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + resolution: + { integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== } json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + 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 - - jsonc-parser@2.2.1: - resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==} - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - - jsonpath-plus@10.2.0: - resolution: {integrity: sha512-T9V+8iNYKFL2n2rF+w02LBOT2JjDnTjioaNFrxRy0Bv1y/hNsqR/EBK7Ojy2ythRHwmz2cRIls+9JitQGZC/sw==} - engines: {node: '>=18.0.0'} - hasBin: true - - jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - - jsonschema@1.5.0: - resolution: {integrity: sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + resolution: + { integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== } + engines: { node: ">=4.0" } keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + resolution: + { integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== } language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + resolution: + { integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== } language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} + 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'} + resolution: + { integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== } + engines: { node: ">= 0.8.0" } - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} + lightningcss-darwin-arm64@1.29.2: + resolution: + { integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA== } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [darwin] - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lightningcss-darwin-x64@1.29.2: + resolution: + { integrity: sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w== } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [darwin] - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + lightningcss-freebsd-x64@1.29.2: + resolution: + { integrity: sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg== } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.29.2: + resolution: + { integrity: sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg== } + engines: { node: ">= 12.0.0" } + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.29.2: + resolution: + { integrity: sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ== } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.29.2: + resolution: + { integrity: sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ== } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.29.2: + resolution: + { integrity: sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg== } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.29.2: + resolution: + { integrity: sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w== } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.29.2: + resolution: + { integrity: sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw== } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.29.2: + resolution: + { integrity: sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA== } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [win32] + + lightningcss@1.29.2: + resolution: + { integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA== } + engines: { node: ">= 12.0.0" } locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.isempty@4.4.0: - resolution: {integrity: sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==} + resolution: + { integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== } + engines: { node: ">=10" } lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash.omitby@4.6.0: - resolution: {integrity: sha512-5OrRcIVR75M288p4nbI2WLAf3ndw2GD9fyNv3Bc15+WCxJDdZ4lYndSxGd7hnG6PVjiJTeJE2dHEGhIuKGicIQ==} - - lodash.topath@4.5.2: - resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==} - - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - - lodash.uniqby@4.7.0: - resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} - - lodash.uniqwith@4.5.0: - resolution: {integrity: sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - loglevel-plugin-prefix@0.8.4: - resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} - - loglevel@1.9.2: - resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} - engines: {node: '>= 0.6.0'} + resolution: + { integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== } loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + resolution: + { integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== } hasBin: true - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lunr@2.3.9: - resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - - markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} - hasBin: true + lucide-react@0.487.0: + resolution: + { integrity: sha512-aKqhOQ+YmFnwq8dWgGjOuLc8V1R9/c/yOd+zDY4+ohsR2Jo05lSGc3WsstYPIzcTpeosN7LoCkLReUUITvaIvw== } + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + resolution: + { integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== } + engines: { node: ">= 0.4" } merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + resolution: + { integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== } + engines: { node: ">= 8" } micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + resolution: + { integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== } + engines: { node: ">=8.6" } mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + resolution: + { integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== } + engines: { node: ">= 0.6" } mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + resolution: + { integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== } + engines: { node: ">= 0.6" } minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@6.2.0: - resolution: {integrity: sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== } minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== } + engines: { node: ">=16 || 14 >=14.17" } minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + resolution: + { integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== } - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} + motion-dom@12.7.3: + resolution: + { integrity: sha512-IjMt1YJHrvyvruFvmpmd6bGXXGCvmygrnvSb3aZ8KhOzF4H3PulU+cMBzH+U8TBJHjC/mnmJFRIA1Cu4vBfcBA== } - motion-dom@12.4.10: - resolution: {integrity: sha512-ISP5u6FTceoD6qKdLupIPU/LyXBrxGox+P2e3mBbm1+pLdlBbwv01YENJr7+1WZnW5ucVKzFScYsV1eXTCG4Xg==} - - motion-utils@12.4.10: - resolution: {integrity: sha512-NPwZd94V013SwRf++jMrk2+HEBgPkeIE2RiOzhAuuQlqxMJPkKt/LXVh6Upl+iN8oarSGD2dlY5/bqgsYXDABA==} + motion-utils@12.7.2: + resolution: + { integrity: sha512-XhZwqctxyJs89oX00zn3OGCuIIpVevbTa+u82usWBC6pSHUd2AoNWiYa7Du8tJxJy9TFbZ82pcn5t7NOm1PHAw== } ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + resolution: + { integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== } - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + nanoid@3.3.11: + resolution: + { integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true - nanoid@5.1.2: - resolution: {integrity: sha512-b+CiXQCNMUGe0Ri64S9SXFcP9hogjAJ2Rd6GdVxhPLRm7mhGaM7VgOvCAJ1ZshfHbqVDI3uqTI5C8/GaKuLI7g==} - engines: {node: ^18 || >=20} + nanoid@5.1.5: + resolution: + { integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw== } + engines: { node: ^18 || >=20 } hasBin: true natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + resolution: + { integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== } - nimma@0.2.3: - resolution: {integrity: sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA==} - engines: {node: ^12.20 || >=14.13} + negotiator@1.0.0: + resolution: + { integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== } + engines: { node: ">= 0.6" } - node-fetch-h2@2.3.0: - resolution: {integrity: sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==} - engines: {node: 4.x || >=6.0.0} - - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-readfiles@0.2.0: - resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==} - - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - oas-kit-common@1.0.8: - resolution: {integrity: sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==} - - oas-linter@3.2.2: - resolution: {integrity: sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==} - - oas-resolver@2.5.6: - resolution: {integrity: sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==} - hasBin: true - - oas-schema-walker@1.1.5: - resolution: {integrity: sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==} - - oas-validator@5.0.8: - resolution: {integrity: sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - 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.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - 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'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - openapi-types@12.1.3: - resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - - openapi3-ts@4.2.2: - resolution: {integrity: sha512-+9g4actZKeb3czfi9gVQ4Br2Ju3KwhCAQJBNaKgye5KggqcBLIhFHH+nIkcm0BUX00TrAJl6dH4JWgM4G4JWrw==} - - openapi3-ts@4.4.0: - resolution: {integrity: sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - orval@7.6.0: - resolution: {integrity: sha512-L7OefBzUdmr3KDPlel/U40dxuOmAcK//bEpUf5q05XmnTx3G6Lrayzrcs0Fto3+yoIwTWskZJBbbt7f4hjDCPw==} - hasBin: true - - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - 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'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - 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-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - 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==} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - pony-cause@1.1.1: - resolution: {integrity: sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==} - engines: {node: '>=12.0.0'} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.5.1: - resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} - engines: {node: ^10 || ^12 || >=14} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - - prettier@3.4.2: - resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} - engines: {node: '>=14'} - hasBin: true - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - - 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-country-flag@3.1.0: - resolution: {integrity: sha512-JWQFw1efdv9sTC+TGQvTKXQg1NKbDU2mBiAiRWcKM9F1sK+/zjhP2yGmm8YDddWyZdXVkR8Md47rPMJmo4YO5g==} - engines: {node: '>=12'} - peerDependencies: - react: '>=16' - - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 - - react-hook-form@7.54.2: - resolution: {integrity: sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==} - engines: {node: '>=18.0.0'} - peerDependencies: - react: ^16.8.0 || ^17 || ^18 || ^19 - - react-i18next@15.4.1: - resolution: {integrity: sha512-ahGab+IaSgZmNPYXdV1n+OYky95TGpFwnKRflX/16dY04DsYYKHtVLjeny7sBSCREEcoMbAgSkFiGLF5g5Oofw==} - peerDependencies: - i18next: '>= 23.2.3' - react: '>= 16.8.0' - react-dom: '*' - react-native: '*' - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - - react-icons@5.5.0: - resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} - peerDependencies: - react: '*' - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-refresh@0.14.2: - resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} - engines: {node: '>=0.10.0'} - - react-router-dom@6.23.0: - resolution: {integrity: sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - - react-router@6.23.0: - resolution: {integrity: sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - - react-textarea-autosize@8.5.7: - resolution: {integrity: sha512-2MqJ3p0Jh69yt9ktFIaZmORHXw4c4bxSIhCeWiFwmJ9EYKgLmuNII3e9c9b2UO+ijl4StnpZdqpxNIhTdHvqtQ==} - engines: {node: '>=10'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} - - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - reftools@1.1.9: - resolution: {integrity: sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==} - - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rollup@4.34.9: - resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - 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'} - - safe-stable-stringify@1.1.1: - resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==} - - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - 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'} - - 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'} - - should-equal@2.0.0: - resolution: {integrity: sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==} - - should-format@3.0.3: - resolution: {integrity: sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==} - - should-type-adaptors@1.1.0: - resolution: {integrity: sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==} - - should-type@1.4.0: - resolution: {integrity: sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==} - - should-util@1.0.1: - resolution: {integrity: sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==} - - should@13.2.3: - resolution: {integrity: sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - 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.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - simple-eval@1.0.1: - resolution: {integrity: sha512-LH7FpTAkeD+y5xQC4fzS+tFtaNlvt3Ib1zKzvhjv/Y+cioV4zIuw4IZr2yhRLu67CWL7FR9/6KXKnjRoZTvGGQ==} - engines: {node: '>=12'} - - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - sonner@1.7.4: - resolution: {integrity: sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string.prototype.includes@2.0.1: - resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} - engines: {node: '>= 0.4'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - 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.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: 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'} - - swagger2openapi@7.0.8: - resolution: {integrity: sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==} - hasBin: true - - synckit@0.9.2: - resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} - engines: {node: ^14.18.0 || >=16.0.0} - - tailwind-merge@1.14.0: - resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} - - tailwind-merge@2.5.4: - resolution: {integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==} - - tailwind-merge@2.6.0: - resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} - - tailwind-variants@0.1.20: - resolution: {integrity: sha512-AMh7x313t/V+eTySKB0Dal08RHY7ggYK0MSn/ad8wKWOrDUIzyiWNayRUm2PIJ4VRkvRnfNuyRuKbLV3EN+ewQ==} - engines: {node: '>=16.x', pnpm: '>=7.x'} - peerDependencies: - tailwindcss: '*' - - tailwind-variants@0.3.1: - resolution: {integrity: sha512-krn67M3FpPwElg4FsZrOQd0U26o7UDH/QOkK8RNaiCCrr052f6YJPBUfNKnPo/s/xRzNPtv1Mldlxsg8Tb46BQ==} - engines: {node: '>=16.x', pnpm: '>=7.x'} - peerDependencies: - tailwindcss: '*' - - tailwindcss@3.4.16: - resolution: {integrity: sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==} - engines: {node: '>=14.0.0'} - hasBin: true - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - ts-api-utils@2.0.1: - resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - tsconfck@2.1.2: - resolution: {integrity: sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==} - engines: {node: ^14.13.1 || ^16 || >=18} - hasBin: true - peerDependencies: - typescript: ^4.3.5 || ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - - tsconfck@3.1.5: - resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} - engines: {node: ^18 || >=20} - hasBin: true + next-intl@4.0.2: + resolution: + { integrity: sha512-3cKVflwdrqxCOvAL+DtGN68qR802i0PEj0dttkAD5IK5XxOjugQs4yU8aSakvPMbkOrhEJ+89z5lG2EAqi7Gkw== } peerDependencies: + next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 typescript: ^5.0.0 peerDependenciesMeta: typescript: optional: true - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - - 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'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - 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.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typedoc-plugin-markdown@4.4.2: - resolution: {integrity: sha512-kJVkU2Wd+AXQpyL6DlYXXRrfNrHrEIUgiABWH8Z+2Lz5Sq6an4dQ/hfvP75bbokjNDUskOdFlEEm/0fSVyC7eg==} - engines: {node: '>= 18'} + next-themes@0.4.6: + resolution: + { integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA== } peerDependencies: - typedoc: 0.27.x + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - typedoc@0.27.9: - resolution: {integrity: sha512-/z585740YHURLl9DN2jCWe6OW7zKYm6VoQ93H0sxZ1cwHQEQrUn5BJrEnkWhfzUdyO+BLGjnKUZ9iz9hKloFDw==} - engines: {node: '>= 18'} + next@15.2.4: + resolution: + { integrity: sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ== } + engines: { node: ^18.18.0 || ^19.8.0 || >= 20.0.0 } hasBin: true peerDependencies: - typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x - - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} - engines: {node: '>=14.17'} - hasBin: true - - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - urijs@1.19.11: - resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} - - use-composed-ref@1.4.0: - resolution: {integrity: sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + "@opentelemetry/api": ^1.1.0 + "@playwright/test": ^1.41.2 + babel-plugin-react-compiler: "*" + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 peerDependenciesMeta: - '@types/react': + "@opentelemetry/api": optional: true - - use-isomorphic-layout-effect@1.2.0: - resolution: {integrity: sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': + "@playwright/test": optional: true - - use-latest@1.3.0: - resolution: {integrity: sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - utility-types@3.11.0: - resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} - engines: {node: '>= 4'} - - validator@13.12.0: - resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} - engines: {node: '>= 0.10'} - - vite-tsconfig-paths@4.3.2: - resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} - peerDependencies: - vite: '*' - peerDependenciesMeta: - vite: - optional: true - - vite@6.2.0: - resolution: {integrity: sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: + babel-plugin-react-compiler: optional: true sass: optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: + + nookies@2.5.2: + resolution: + { integrity: sha512-x0TRSaosAEonNKyCrShoUaJ5rrT5KHRNZ5DwPCuizjgrnkpE5DRf3VL7AyyQin4htict92X1EQ7ejDbaHDVdYA== } + + 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.1: + resolution: + { integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== } + 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.1: + resolution: + { integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== } + engines: { node: ">=8.6" } + + picomatch@4.0.2: + resolution: + { integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== } + engines: { node: ">=12" } + + possible-typed-array-names@1.1.0: + resolution: + { integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== } + engines: { node: ">= 0.4" } + + postcss@8.4.31: + resolution: + { integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== } + engines: { node: ^10 || ^12 || >=14 } + + postcss@8.5.3: + resolution: + { integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== } + engines: { node: ^10 || ^12 || >=14 } + + prelude-ls@1.2.1: + resolution: + { integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== } + engines: { node: ">= 0.8.0" } + + prettier-linter-helpers@1.0.0: + resolution: + { integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== } + engines: { node: ">=6.0.0" } + + prettier-plugin-sort-json@4.1.1: + resolution: + { integrity: sha512-uJ49wCzwJ/foKKV4tIPxqi4jFFvwUzw4oACMRG2dcmDhBKrxBv0L2wSKkAqHCmxKCvj0xcCZS4jO2kSJO/tRJw== } + engines: { node: ">=18.0.0" } + peerDependencies: + prettier: ^3.0.0 + + prettier@3.5.3: + resolution: + { integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== } + engines: { node: ">=14" } + hasBin: true + + prop-types@15.8.1: + resolution: + { integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== } + + proxy-from-env@1.1.0: + resolution: + { integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== } + + 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-country-flag@3.1.0: + resolution: + { integrity: sha512-JWQFw1efdv9sTC+TGQvTKXQg1NKbDU2mBiAiRWcKM9F1sK+/zjhP2yGmm8YDddWyZdXVkR8Md47rPMJmo4YO5g== } + engines: { node: ">=12" } + peerDependencies: + react: ">=16" + + react-dom@19.1.0: + resolution: + { integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g== } + peerDependencies: + react: ^19.1.0 + + react-hook-form@7.55.0: + resolution: + { integrity: sha512-XRnjsH3GVMQz1moZTW53MxfoWN7aDpUg/GpVNc4A3eXRVNdGXfbzJ4vM4aLQ8g6XCUh1nIbx70aaNCl7kxnjog== } + engines: { node: ">=18.0.0" } + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + + react-is@16.13.1: + resolution: + { integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== } + + react-remove-scroll-bar@2.3.8: + resolution: + { integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q== } + engines: { node: ">=10" } + peerDependencies: + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": optional: true - void-elements@3.1.0: - resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} - engines: {node: '>=0.10.0'} + react-remove-scroll@2.6.3: + resolution: + { integrity: sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ== } + engines: { node: ">=10" } + peerDependencies: + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + react-style-singleton@2.2.3: + resolution: + { integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== } + engines: { node: ">=10" } + peerDependencies: + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + react@19.1.0: + resolution: + { integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg== } + 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@1.22.10: + resolution: + { integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== } + engines: { node: ">= 0.4" } + hasBin: true + + resolve@2.0.0-next.5: + resolution: + { integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== } + 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.3: + resolution: + { integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== } + 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.26.0: + resolution: + { integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA== } + + semver@6.3.1: + resolution: + { integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== } + hasBin: true + + semver@7.7.1: + resolution: + { integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== } + engines: { node: ">=10" } + hasBin: true + + set-cookie-parser@2.7.1: + resolution: + { integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== } + + 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.33.5: + resolution: + { integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + + 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.0: + resolution: + { integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== } + 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.0: + resolution: + { integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== } + engines: { node: ">= 0.4" } + + simple-swizzle@0.2.2: + resolution: + { integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== } + + sonner@2.0.3: + resolution: + { integrity: sha512-njQ4Hht92m0sMqqHVDL32V2Oun9W1+PHO9NDv9FHfJjT3JT22IG4Jpo3FPQy+mouRKCXFWO+r67v6MrHX2zeIA== } + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + 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== } + + streamsearch@1.1.0: + resolution: + { integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== } + engines: { node: ">=10.0.0" } + + string.prototype.includes@2.0.1: + resolution: + { integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== } + engines: { node: ">= 0.4" } + + string.prototype.matchall@4.0.12: + resolution: + { integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== } + 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.10: + resolution: + { integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== } + engines: { node: ">= 0.4" } + + string.prototype.trimend@1.0.9: + resolution: + { integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== } + 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" } + + synckit@0.11.4: + resolution: + { integrity: sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ== } + engines: { node: ^14.18.0 || >=16.0.0 } + + tailwind-merge@3.2.0: + resolution: + { integrity: sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA== } + + tailwindcss@4.1.2: + resolution: + { integrity: sha512-VCsK+fitIbQF7JlxXaibFhxrPq4E2hDcG8apzHUdWFMCQWD8uLdlHg4iSkZ53cgLCCcZ+FZK7vG8VjvLcnBgKw== } + + tapable@2.2.1: + resolution: + { integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== } + engines: { node: ">=6" } + + tinyglobby@0.2.12: + resolution: + { integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww== } + 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.1.0: + resolution: + { integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== } + 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== } + + tw-animate-css@1.2.5: + resolution: + { integrity: sha512-ABzjfgVo+fDbhRREGL4KQZUqqdPgvc5zVrLyeW9/6mVqvaDepXc7EvedA+pYmMnIOsUAQMwcWzNvom26J2qYvQ== } + + 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.7: + resolution: + { integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== } + engines: { node: ">= 0.4" } + + typescript@5.8.2: + resolution: + { integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== } + engines: { node: ">=14.17" } + hasBin: true + + unbox-primitive@1.1.0: + resolution: + { integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== } + engines: { node: ">= 0.4" } + + undici-types@6.21.0: + resolution: + { integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== } + + unrs-resolver@1.5.0: + resolution: + { integrity: sha512-6aia3Oy7SEe0MuUGQm2nsyob0L2+g57w178K5SE/3pvSGAIp28BB2O921fKx424Ahc/gQ6v0DXFbhcpyhGZdOA== } + + uri-js@4.4.1: + resolution: + { integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== } + + use-callback-ref@1.3.3: + resolution: + { integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg== } + engines: { node: ">=10" } + peerDependencies: + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + use-intl@4.0.2: + resolution: + { integrity: sha512-6RAP/5KJMRzLMLS25/BVh2u09cRK8S6HRGc1RnZvqR547qAKZCpjYylOqMPU9eNIirAiKoGmsoUPa7JrlaA/yg== } + peerDependencies: + react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 + + use-sidecar@1.1.3: + resolution: + { integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ== } + engines: { node: ">=10" } + peerDependencies: + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} + 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'} + 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'} + resolution: + { integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== } + engines: { node: ">= 0.4" } - which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.19: + resolution: + { integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== } + engines: { node: ">= 0.4" } which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} + 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'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} - engines: {node: '>= 14'} - hasBin: true - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + resolution: + { integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== } + engines: { node: ">=0.10.0" } yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + resolution: + { integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== } + engines: { node: ">=10" } zod@3.24.2: - resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + resolution: + { integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== } + + zustand@5.0.3: + resolution: + { integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg== } + engines: { node: ">=12.20.0" } + peerDependencies: + "@types/react": ">=18.0.0" + immer: ">=9.0.6" + react: ">=18.0.0" + use-sync-external-store: ">=1.2.0" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true snapshots: + "@alloc/quick-lru@5.2.0": {} - '@alloc/quick-lru@5.2.0': {} - - '@ampproject/remapping@2.3.0': + "@babel/code-frame@7.26.2": dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@apidevtools/json-schema-ref-parser@11.7.2': - dependencies: - '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.15 - js-yaml: 4.1.0 - - '@apidevtools/openapi-schemas@2.1.0': {} - - '@apidevtools/swagger-methods@3.0.2': {} - - '@apidevtools/swagger-parser@10.1.1(openapi-types@12.1.3)': - dependencies: - '@apidevtools/json-schema-ref-parser': 11.7.2 - '@apidevtools/openapi-schemas': 2.1.0 - '@apidevtools/swagger-methods': 3.0.2 - '@jsdevtools/ono': 7.1.3 - ajv: 8.17.1 - ajv-draft-04: 1.0.0(ajv@8.17.1) - call-me-maybe: 1.0.2 - openapi-types: 12.1.3 - - '@asyncapi/specs@6.8.1': - dependencies: - '@types/json-schema': 7.0.15 - - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 + "@babel/helper-validator-identifier": 7.25.9 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.8': {} - - '@babel/core@7.26.9': + "@babel/generator@7.27.0": dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) - '@babel/helpers': 7.26.9 - '@babel/parser': 7.26.9 - '@babel/template': 7.26.9 - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 - convert-source-map: 2.0.0 - debug: 4.4.0 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.26.9': - dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + "@babel/parser": 7.27.0 + "@babel/types": 7.27.0 + "@jridgewell/gen-mapping": 0.3.8 + "@jridgewell/trace-mapping": 0.3.25 jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.26.5': + "@babel/helper-string-parser@7.25.9": {} + + "@babel/helper-validator-identifier@7.25.9": {} + + "@babel/parser@7.27.0": dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 - lru-cache: 5.1.1 - semver: 6.3.1 + "@babel/types": 7.27.0 - '@babel/helper-module-imports@7.25.9': + "@babel/template@7.27.0": dependencies: - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 - transitivePeerDependencies: - - supports-color + "@babel/code-frame": 7.26.2 + "@babel/parser": 7.27.0 + "@babel/types": 7.27.0 - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': + "@babel/traverse@7.27.0": dependencies: - '@babel/core': 7.26.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.9 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.26.5': {} - - '@babel/helper-string-parser@7.25.9': {} - - '@babel/helper-validator-identifier@7.25.9': {} - - '@babel/helper-validator-option@7.25.9': {} - - '@babel/helpers@7.26.9': - dependencies: - '@babel/template': 7.26.9 - '@babel/types': 7.26.9 - - '@babel/parser@7.26.9': - dependencies: - '@babel/types': 7.26.9 - - '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/runtime@7.26.9': - dependencies: - regenerator-runtime: 0.14.1 - - '@babel/template@7.26.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - - '@babel/traverse@7.26.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.9 - '@babel/parser': 7.26.9 - '@babel/template': 7.26.9 - '@babel/types': 7.26.9 + "@babel/code-frame": 7.26.2 + "@babel/generator": 7.27.0 + "@babel/parser": 7.27.0 + "@babel/template": 7.27.0 + "@babel/types": 7.27.0 debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.9': + "@babel/types@7.27.0": dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + "@babel/helper-string-parser": 7.25.9 + "@babel/helper-validator-identifier": 7.25.9 - '@esbuild/aix-ppc64@0.25.0': - optional: true - - '@esbuild/android-arm64@0.25.0': - optional: true - - '@esbuild/android-arm@0.25.0': - optional: true - - '@esbuild/android-x64@0.25.0': - optional: true - - '@esbuild/darwin-arm64@0.25.0': - optional: true - - '@esbuild/darwin-x64@0.25.0': - optional: true - - '@esbuild/freebsd-arm64@0.25.0': - optional: true - - '@esbuild/freebsd-x64@0.25.0': - optional: true - - '@esbuild/linux-arm64@0.25.0': - optional: true - - '@esbuild/linux-arm@0.25.0': - optional: true - - '@esbuild/linux-ia32@0.25.0': - optional: true - - '@esbuild/linux-loong64@0.25.0': - optional: true - - '@esbuild/linux-mips64el@0.25.0': - optional: true - - '@esbuild/linux-ppc64@0.25.0': - optional: true - - '@esbuild/linux-riscv64@0.25.0': - optional: true - - '@esbuild/linux-s390x@0.25.0': - optional: true - - '@esbuild/linux-x64@0.25.0': - optional: true - - '@esbuild/netbsd-arm64@0.25.0': - optional: true - - '@esbuild/netbsd-x64@0.25.0': - optional: true - - '@esbuild/openbsd-arm64@0.25.0': - optional: true - - '@esbuild/openbsd-x64@0.25.0': - optional: true - - '@esbuild/sunos-x64@0.25.0': - optional: true - - '@esbuild/win32-arm64@0.25.0': - optional: true - - '@esbuild/win32-ia32@0.25.0': - optional: true - - '@esbuild/win32-x64@0.25.0': - optional: true - - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': + "@emnapi/core@1.4.3": dependencies: - eslint: 8.57.1 + "@emnapi/wasi-threads": 1.0.2 + tslib: 2.8.1 + optional: true + + "@emnapi/runtime@1.4.3": + dependencies: + tslib: 2.8.1 + optional: true + + "@emnapi/wasi-threads@1.0.2": + dependencies: + tslib: 2.8.1 + optional: true + + "@eslint-community/eslint-utils@4.6.1(eslint@9.23.0(jiti@2.4.2))": + dependencies: + eslint: 9.23.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + "@eslint-community/regexpp@4.12.1": {} - '@eslint/eslintrc@2.1.4': + "@eslint/config-array@0.19.2": + dependencies: + "@eslint/object-schema": 2.1.6 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + "@eslint/config-helpers@0.2.1": {} + + "@eslint/core@0.12.0": + dependencies: + "@types/json-schema": 7.0.15 + + "@eslint/core@0.13.0": + dependencies: + "@types/json-schema": 7.0.15 + + "@eslint/eslintrc@3.3.1": dependencies: ajv: 6.12.6 debug: 4.4.0 - espree: 9.6.1 - globals: 13.24.0 + espree: 10.3.0 + globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 js-yaml: 4.1.0 @@ -4385,2512 +3188,849 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} + "@eslint/js@9.23.0": {} - '@exodus/schemasafe@1.3.0': {} + "@eslint/object-schema@2.1.6": {} - '@formatjs/ecma402-abstract@2.3.3': + "@eslint/plugin-kit@0.2.8": dependencies: - '@formatjs/fast-memoize': 2.2.6 - '@formatjs/intl-localematcher': 0.6.0 + "@eslint/core": 0.13.0 + levn: 0.4.1 + + "@floating-ui/core@1.6.9": + dependencies: + "@floating-ui/utils": 0.2.9 + + "@floating-ui/dom@1.6.13": + dependencies: + "@floating-ui/core": 1.6.9 + "@floating-ui/utils": 0.2.9 + + "@floating-ui/react-dom@2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@floating-ui/dom": 1.6.13 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + "@floating-ui/utils@0.2.9": {} + + "@formatjs/ecma402-abstract@2.3.4": + dependencies: + "@formatjs/fast-memoize": 2.2.7 + "@formatjs/intl-localematcher": 0.6.1 decimal.js: 10.5.0 tslib: 2.8.1 - '@formatjs/fast-memoize@2.2.6': + "@formatjs/fast-memoize@2.2.7": dependencies: tslib: 2.8.1 - '@formatjs/icu-messageformat-parser@2.11.1': + "@formatjs/icu-messageformat-parser@2.11.2": dependencies: - '@formatjs/ecma402-abstract': 2.3.3 - '@formatjs/icu-skeleton-parser': 1.8.13 + "@formatjs/ecma402-abstract": 2.3.4 + "@formatjs/icu-skeleton-parser": 1.8.14 tslib: 2.8.1 - '@formatjs/icu-skeleton-parser@1.8.13': + "@formatjs/icu-skeleton-parser@1.8.14": dependencies: - '@formatjs/ecma402-abstract': 2.3.3 + "@formatjs/ecma402-abstract": 2.3.4 tslib: 2.8.1 - '@formatjs/intl-localematcher@0.6.0': + "@formatjs/intl-localematcher@0.5.10": dependencies: tslib: 2.8.1 - '@gerrit0/mini-shiki@1.27.2': + "@formatjs/intl-localematcher@0.6.1": dependencies: - '@shikijs/engine-oniguruma': 1.29.2 - '@shikijs/types': 1.29.2 - '@shikijs/vscode-textmate': 10.0.2 + tslib: 2.8.1 - '@heroui/aria-utils@2.2.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@hookform/resolvers@5.0.1(react-hook-form@7.55.0(react@19.1.0))": dependencies: - '@heroui/react-rsc-utils': 2.1.1(react@18.3.1) - '@heroui/shared-utils': 2.1.2 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/collections': 3.12.0(react@18.3.1) - '@react-stately/overlays': 3.6.12(react@18.3.1) - '@react-types/overlays': 3.8.11(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - '@heroui/theme' - - framer-motion + "@standard-schema/utils": 0.3.0 + react-hook-form: 7.55.0(react@19.1.0) - '@heroui/aria-utils@2.2.8(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-rsc-utils': 2.1.2(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/collections': 3.12.0(react@18.3.1) - '@react-stately/overlays': 3.6.12(react@18.3.1) - '@react-types/overlays': 3.8.11(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - '@heroui/theme' - - framer-motion - - '@heroui/avatar@2.2.11(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-image': 2.1.7(react@18.3.1) - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/badge@2.2.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/breadcrumbs@2.2.11(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-icons': 2.1.6(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-aria/breadcrumbs': 3.5.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/breadcrumbs': 3.7.10(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/button@2.2.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/ripple': 2.2.8(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/spinner': 2.2.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-aria-button': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/button': 3.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-types/button': 3.10.1(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/button@2.2.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.3(react@18.3.1) - '@heroui/ripple': 2.2.7(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/shared-utils': 2.1.2 - '@heroui/spinner': 2.2.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-aria-button': 2.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/button': 3.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-types/button': 3.10.1(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@humanfs/core@0.19.1": {} - '@heroui/card@2.2.14(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@humanfs/node@0.16.6": dependencies: - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/ripple': 2.2.12(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-aria-button': 2.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/button': 3.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@humanfs/core": 0.19.1 + "@humanwhocodes/retry": 0.3.1 - '@heroui/checkbox@2.3.14(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/form': 2.1.14(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-callback-ref': 2.1.6(react@18.3.1) - '@heroui/use-safe-layout-effect': 2.1.6(react@18.3.1) - '@react-aria/checkbox': 3.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/checkbox': 3.6.11(react@18.3.1) - '@react-stately/toggle': 3.8.1(react@18.3.1) - '@react-types/checkbox': 3.9.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/chip@2.2.11(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-icons': 2.1.6(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/checkbox': 3.9.1(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/code@2.2.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system-rsc': 2.3.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/divider@2.2.10(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-rsc-utils': 2.1.6(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system-rsc': 2.3.10(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/divider@2.2.5(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-rsc-utils': 2.1.1(react@18.3.1) - '@heroui/shared-utils': 2.1.2 - '@heroui/system-rsc': 2.3.5(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-types/shared': 3.26.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/divider@2.2.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-rsc-utils': 2.1.2(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system-rsc': 2.3.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-types/shared': 3.26.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@humanwhocodes/module-importer@1.0.1": {} - '@heroui/dom-animation@2.1.1(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': - dependencies: - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - - '@heroui/dom-animation@2.1.2(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': - dependencies: - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - - '@heroui/dom-animation@2.1.6(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': - dependencies: - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - - '@heroui/dropdown@2.3.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/aria-utils': 2.2.8(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/menu': 2.2.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/popover': 2.3.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/menu': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/menu': 3.9.0(react@18.3.1) - '@react-types/menu': 3.9.13(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/form@2.1.14(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/form': 3.1.1(react@18.3.1) - '@react-types/form': 3.7.9(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/form@2.1.8(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.3(react@18.3.1) - '@heroui/shared-utils': 2.1.2 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/form': 3.1.0(react@18.3.1) - '@react-types/form': 3.7.8(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/form@2.1.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/form': 3.1.0(react@18.3.1) - '@react-types/form': 3.7.8(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/framer-utils@2.1.11(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.11(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/use-measure': 2.1.6(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - '@heroui/theme' - - '@heroui/framer-utils@2.1.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/shared-utils': 2.1.2 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/use-measure': 2.1.1(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - '@heroui/theme' - - '@heroui/framer-utils@2.1.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/use-measure': 2.1.2(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - '@heroui/theme' - - '@heroui/image@2.2.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-image': 2.1.7(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/input@2.4.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/form': 2.1.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-icons': 2.1.2(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-safe-layout-effect': 2.1.2(react@18.3.1) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/textfield': 3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - '@react-types/textfield': 3.10.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-textarea-autosize: 8.5.7(@types/react@18.3.3)(react@18.3.1) - transitivePeerDependencies: - - '@types/react' - - '@heroui/kbd@2.2.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system-rsc': 2.3.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-aria/utils': 3.26.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/link@2.2.8(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-icons': 2.1.2(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-aria-link': 2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/link': 3.7.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-types/link': 3.5.9(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/listbox@2.3.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/aria-utils': 2.2.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/divider': 2.2.5(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.3(react@18.3.1) - '@heroui/shared-utils': 2.1.2 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-is-mobile': 2.2.2(react@18.3.1) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/listbox': 3.13.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/list': 3.11.1(react@18.3.1) - '@react-types/menu': 3.9.13(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - '@tanstack/react-virtual': 3.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - framer-motion - - '@heroui/menu@2.2.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/aria-utils': 2.2.8(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/divider': 2.2.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-is-mobile': 2.2.3(react@18.3.1) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/menu': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/menu': 3.9.0(react@18.3.1) - '@react-stately/tree': 3.8.6(react@18.3.1) - '@react-types/menu': 3.9.13(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - framer-motion - - '@heroui/modal@2.2.12(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/dom-animation': 2.1.6(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@heroui/framer-utils': 2.1.11(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-icons': 2.1.6(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-aria-button': 2.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/use-aria-modal-overlay': 2.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/use-disclosure': 2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/use-draggable': 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/dialog': 3.5.21(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/overlays': 3.6.13(react@18.3.1) - '@react-types/overlays': 3.8.12(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/navbar@2.2.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/dom-animation': 2.1.2(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@heroui/framer-utils': 2.1.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-scroll-position': 2.1.2(react@18.3.1) - '@react-aria/button': 3.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/toggle': 3.8.0(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/popover@2.3.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/aria-utils': 2.2.8(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/button': 2.2.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/dom-animation': 2.1.2(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@heroui/framer-utils': 2.1.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-aria-button': 2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/use-safe-layout-effect': 2.1.2(react@18.3.1) - '@react-aria/dialog': 3.5.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/overlays': 3.6.12(react@18.3.1) - '@react-types/button': 3.10.1(react@18.3.1) - '@react-types/overlays': 3.8.11(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/popover@2.3.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/aria-utils': 2.2.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/button': 2.2.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/dom-animation': 2.1.1(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@heroui/framer-utils': 2.1.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.3(react@18.3.1) - '@heroui/shared-utils': 2.1.2 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-aria-button': 2.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/use-safe-layout-effect': 2.1.1(react@18.3.1) - '@react-aria/dialog': 3.5.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/overlays': 3.6.12(react@18.3.1) - '@react-types/button': 3.10.1(react@18.3.1) - '@react-types/overlays': 3.8.11(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/progress@2.2.11(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-is-mounted': 2.1.6(react@18.3.1) - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/progress': 3.4.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/progress': 3.5.9(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/react-rsc-utils@2.1.1(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/react-rsc-utils@2.1.2(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/react-rsc-utils@2.1.6(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/react-utils@2.1.3(react@18.3.1)': - dependencies: - '@heroui/react-rsc-utils': 2.1.1(react@18.3.1) - '@heroui/shared-utils': 2.1.2 - react: 18.3.1 - - '@heroui/react-utils@2.1.4(react@18.3.1)': - dependencies: - '@heroui/react-rsc-utils': 2.1.2(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - react: 18.3.1 - - '@heroui/react-utils@2.1.8(react@18.3.1)': - dependencies: - '@heroui/react-rsc-utils': 2.1.6(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - react: 18.3.1 - - '@heroui/ripple@2.2.12(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/dom-animation': 2.1.6(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/ripple@2.2.7(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/dom-animation': 2.1.1(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@heroui/react-utils': 2.1.3(react@18.3.1) - '@heroui/shared-utils': 2.1.2 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/ripple@2.2.8(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/dom-animation': 2.1.2(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/scroll-shadow@2.3.5(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.3(react@18.3.1) - '@heroui/shared-utils': 2.1.2 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-data-scroll-overflow': 2.2.2(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/select@2.4.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/aria-utils': 2.2.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/form': 2.1.8(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/listbox': 2.3.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/popover': 2.3.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.3(react@18.3.1) - '@heroui/scroll-shadow': 2.3.5(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/shared-icons': 2.1.1(react@18.3.1) - '@heroui/shared-utils': 2.1.2 - '@heroui/spinner': 2.2.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-aria-button': 2.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/use-aria-multiselect': 2.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/use-safe-layout-effect': 2.1.1(react@18.3.1) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/form': 3.0.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-aria/visually-hidden': 3.8.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - '@tanstack/react-virtual': 3.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@humanwhocodes/retry@0.3.1": {} - '@heroui/shared-icons@2.1.1(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/shared-icons@2.1.2(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/shared-icons@2.1.6(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/shared-utils@2.1.2': {} - - '@heroui/shared-utils@2.1.3': {} - - '@heroui/shared-utils@2.1.7': {} - - '@heroui/snippet@2.2.11(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/button': 2.2.10(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-icons': 2.1.2(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/tooltip': 2.2.8(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/use-clipboard': 2.1.3(react@18.3.1) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/spacer@2.2.11(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system-rsc': 2.3.10(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/spinner@2.2.12(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/system': 2.4.11(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/system-rsc': 2.3.10(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - framer-motion - - '@heroui/spinner@2.2.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.3(react@18.3.1) - '@heroui/shared-utils': 2.1.2 - '@heroui/system-rsc': 2.3.5(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/spinner@2.2.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system-rsc': 2.3.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/switch@2.2.9(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-safe-layout-effect': 2.1.2(react@18.3.1) - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/switch': 3.6.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-aria/visually-hidden': 3.8.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/toggle': 3.8.0(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/system-rsc@2.3.10(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1)': - dependencies: - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-types/shared': 3.27.0(react@18.3.1) - clsx: 1.2.1 - react: 18.3.1 - - '@heroui/system-rsc@2.3.5(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1)': - dependencies: - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-types/shared': 3.26.0(react@18.3.1) - clsx: 1.2.1 - react: 18.3.1 - - '@heroui/system-rsc@2.3.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1)': - dependencies: - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-types/shared': 3.26.0(react@18.3.1) - clsx: 1.2.1 - react: 18.3.1 - - '@heroui/system@2.4.11(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/system-rsc': 2.3.10(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1) - '@internationalized/date': 3.7.0 - '@react-aria/i18n': 3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/datepicker': 3.10.0(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - '@heroui/theme' - - '@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.3(react@18.3.1) - '@heroui/system-rsc': 2.3.5(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1) - '@internationalized/date': 3.6.0 - '@react-aria/i18n': 3.12.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/datepicker': 3.9.0(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - '@heroui/theme' - - '@heroui/system@2.4.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/system-rsc': 2.3.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react@18.3.1) - '@internationalized/date': 3.6.0 - '@react-aria/i18n': 3.12.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/datepicker': 3.9.0(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - '@heroui/theme' - - '@heroui/table@2.2.14(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/checkbox': 2.3.14(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/shared-icons': 2.1.6(react@18.3.1) - '@heroui/shared-utils': 2.1.7 - '@heroui/spacer': 2.2.11(@heroui/theme@2.4.6(tailwindcss@3.4.16))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/table': 3.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/table': 3.13.1(react@18.3.1) - '@react-stately/virtualizer': 4.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/grid': 3.2.11(react@18.3.1) - '@react-types/table': 3.10.4(react@18.3.1) - '@tanstack/react-virtual': 3.11.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/theme@2.4.6(tailwindcss@3.4.16)': - dependencies: - '@heroui/shared-utils': 2.1.3 - clsx: 1.2.1 - color: 4.2.3 - color2k: 2.0.3 - deepmerge: 4.3.1 - flat: 5.0.2 - tailwind-merge: 2.6.0 - tailwind-variants: 0.1.20(tailwindcss@3.4.16) - tailwindcss: 3.4.16 - - '@heroui/tooltip@2.2.8(@heroui/system@2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/aria-utils': 2.2.8(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/dom-animation': 2.1.2(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@heroui/framer-utils': 2.1.7(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/react-utils': 2.1.4(react@18.3.1) - '@heroui/shared-utils': 2.1.3 - '@heroui/system': 2.4.6(@heroui/theme@2.4.6(tailwindcss@3.4.16))(framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroui/theme': 2.4.6(tailwindcss@3.4.16) - '@heroui/use-safe-layout-effect': 2.1.2(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/tooltip': 3.7.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/tooltip': 3.5.0(react@18.3.1) - '@react-types/overlays': 3.8.11(react@18.3.1) - '@react-types/tooltip': 3.4.13(react@18.3.1) - framer-motion: 12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/use-aria-button@2.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/shared-utils': 2.1.2 - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-types/button': 3.10.1(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@heroui/use-aria-button@2.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/shared-utils': 2.1.3 - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-types/button': 3.10.1(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@heroui/use-aria-button@2.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/shared-utils': 2.1.7 - '@react-aria/focus': 3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/button': 3.10.2(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@heroui/use-aria-link@2.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/shared-utils': 2.1.3 - '@react-aria/focus': 3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-types/link': 3.5.9(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@heroui/use-aria-modal-overlay@2.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/overlays': 3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/overlays': 3.6.13(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/use-aria-multiselect@2.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/i18n': 3.12.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/listbox': 3.13.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/menu': 3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.26.0(react@18.3.1) - '@react-stately/form': 3.1.0(react@18.3.1) - '@react-stately/list': 3.11.1(react@18.3.1) - '@react-stately/menu': 3.9.0(react@18.3.1) - '@react-types/button': 3.10.1(react@18.3.1) - '@react-types/overlays': 3.8.11(react@18.3.1) - '@react-types/select': 3.9.8(react@18.3.1) - '@react-types/shared': 3.26.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@heroui/use-callback-ref@2.1.6(react@18.3.1)': - dependencies: - '@heroui/use-safe-layout-effect': 2.1.6(react@18.3.1) - react: 18.3.1 - - '@heroui/use-clipboard@2.1.3(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/use-data-scroll-overflow@2.2.2(react@18.3.1)': - dependencies: - '@heroui/shared-utils': 2.1.2 - react: 18.3.1 - - '@heroui/use-disclosure@2.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@heroui/use-callback-ref': 2.1.6(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@heroui/use-draggable@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@heroui/use-image@2.1.7(react@18.3.1)': - dependencies: - '@heroui/react-utils': 2.1.8(react@18.3.1) - '@heroui/use-safe-layout-effect': 2.1.6(react@18.3.1) - react: 18.3.1 - - '@heroui/use-is-mobile@2.2.2(react@18.3.1)': - dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - react: 18.3.1 - - '@heroui/use-is-mobile@2.2.3(react@18.3.1)': - dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - react: 18.3.1 - - '@heroui/use-is-mounted@2.1.6(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/use-measure@2.1.1(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/use-measure@2.1.2(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/use-measure@2.1.6(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/use-safe-layout-effect@2.1.1(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/use-safe-layout-effect@2.1.2(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/use-safe-layout-effect@2.1.6(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@heroui/use-scroll-position@2.1.2(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@hookform/resolvers@4.1.3(react-hook-form@7.54.2(react@18.3.1))': - dependencies: - '@standard-schema/utils': 0.3.0 - react-hook-form: 7.54.2(react@18.3.1) + "@humanwhocodes/retry@0.4.2": {} - '@humanwhocodes/config-array@0.13.0': + "@ianvs/prettier-plugin-sort-imports@4.4.1(prettier@3.5.3)": dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.0 - minimatch: 3.1.2 + "@babel/generator": 7.27.0 + "@babel/parser": 7.27.0 + "@babel/traverse": 7.27.0 + "@babel/types": 7.27.0 + prettier: 3.5.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color - '@humanwhocodes/module-importer@1.0.1': {} + "@img/sharp-darwin-arm64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-darwin-arm64": 1.0.4 + optional: true - '@humanwhocodes/object-schema@2.0.3': {} + "@img/sharp-darwin-x64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-darwin-x64": 1.0.4 + optional: true - '@ibm-cloud/openapi-ruleset-utilities@1.7.1': {} + "@img/sharp-libvips-darwin-arm64@1.0.4": + optional: true - '@ibm-cloud/openapi-ruleset@1.29.2': + "@img/sharp-libvips-darwin-x64@1.0.4": + optional: true + + "@img/sharp-libvips-linux-arm64@1.0.4": + optional: true + + "@img/sharp-libvips-linux-arm@1.0.5": + optional: true + + "@img/sharp-libvips-linux-s390x@1.0.4": + optional: true + + "@img/sharp-libvips-linux-x64@1.0.4": + optional: true + + "@img/sharp-libvips-linuxmusl-arm64@1.0.4": + optional: true + + "@img/sharp-libvips-linuxmusl-x64@1.0.4": + optional: true + + "@img/sharp-linux-arm64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linux-arm64": 1.0.4 + optional: true + + "@img/sharp-linux-arm@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linux-arm": 1.0.5 + optional: true + + "@img/sharp-linux-s390x@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linux-s390x": 1.0.4 + optional: true + + "@img/sharp-linux-x64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linux-x64": 1.0.4 + optional: true + + "@img/sharp-linuxmusl-arm64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64": 1.0.4 + optional: true + + "@img/sharp-linuxmusl-x64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64": 1.0.4 + optional: true + + "@img/sharp-wasm32@0.33.5": dependencies: - '@ibm-cloud/openapi-ruleset-utilities': 1.7.1 - '@stoplight/spectral-formats': 1.8.2 - '@stoplight/spectral-functions': 1.9.3 - '@stoplight/spectral-rulesets': 1.21.3 - chalk: 4.1.2 - jsonschema: 1.5.0 - lodash: 4.17.21 - loglevel: 1.9.2 - loglevel-plugin-prefix: 0.8.4 - minimatch: 6.2.0 - validator: 13.12.0 - transitivePeerDependencies: - - encoding + "@emnapi/runtime": 1.4.3 + optional: true - '@internationalized/date@3.6.0': + "@img/sharp-win32-ia32@0.33.5": + optional: true + + "@img/sharp-win32-x64@0.33.5": + optional: true + + "@jridgewell/gen-mapping@0.3.8": dependencies: - '@swc/helpers': 0.5.15 + "@jridgewell/set-array": 1.2.1 + "@jridgewell/sourcemap-codec": 1.5.0 + "@jridgewell/trace-mapping": 0.3.25 - '@internationalized/date@3.7.0': + "@jridgewell/resolve-uri@3.1.2": {} + + "@jridgewell/set-array@1.2.1": {} + + "@jridgewell/sourcemap-codec@1.5.0": {} + + "@jridgewell/trace-mapping@0.3.25": dependencies: - '@swc/helpers': 0.5.15 + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.5.0 - '@internationalized/message@3.1.6': + "@napi-rs/wasm-runtime@0.2.9": dependencies: - '@swc/helpers': 0.5.15 - intl-messageformat: 10.7.15 + "@emnapi/core": 1.4.3 + "@emnapi/runtime": 1.4.3 + "@tybys/wasm-util": 0.9.0 + optional: true - '@internationalized/number@3.6.0': + "@next/env@15.2.4": {} + + "@next/eslint-plugin-next@15.2.4": dependencies: - '@swc/helpers': 0.5.15 + fast-glob: 3.3.1 - '@internationalized/string@3.2.5': + "@next/swc-darwin-arm64@15.2.4": + optional: true + + "@next/swc-darwin-x64@15.2.4": + optional: true + + "@next/swc-linux-arm64-gnu@15.2.4": + optional: true + + "@next/swc-linux-arm64-musl@15.2.4": + optional: true + + "@next/swc-linux-x64-gnu@15.2.4": + optional: true + + "@next/swc-linux-x64-musl@15.2.4": + optional: true + + "@next/swc-win32-arm64-msvc@15.2.4": + optional: true + + "@next/swc-win32-x64-msvc@15.2.4": + optional: true + + "@nodelib/fs.scandir@2.1.5": dependencies: - '@swc/helpers': 0.5.15 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@jsdevtools/ono@7.1.3': {} - - '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@jsep-plugin/regex@1.0.4(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@jsep-plugin/ternary@1.1.4(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 + "@nodelib/fs.stat": 2.0.5 run-parallel: 1.2.0 - '@nodelib/fs.stat@2.0.5': {} + "@nodelib/fs.stat@2.0.5": {} - '@nodelib/fs.walk@1.2.8': + "@nodelib/fs.walk@1.2.8": dependencies: - '@nodelib/fs.scandir': 2.1.5 + "@nodelib/fs.scandir": 2.1.5 fastq: 1.19.1 - '@orval/angular@7.6.0(openapi-types@12.1.3)': - dependencies: - '@orval/core': 7.6.0(openapi-types@12.1.3) - transitivePeerDependencies: - - encoding - - openapi-types - - supports-color - - '@orval/axios@7.6.0(openapi-types@12.1.3)': - dependencies: - '@orval/core': 7.6.0(openapi-types@12.1.3) - transitivePeerDependencies: - - encoding - - openapi-types - - supports-color - - '@orval/core@7.6.0(openapi-types@12.1.3)': - dependencies: - '@apidevtools/swagger-parser': 10.1.1(openapi-types@12.1.3) - '@ibm-cloud/openapi-ruleset': 1.29.2 - acorn: 8.14.1 - ajv: 8.17.1 - chalk: 4.1.2 - compare-versions: 6.1.1 - debug: 4.4.0 - esbuild: 0.25.0 - esutils: 2.0.3 - fs-extra: 11.3.0 - globby: 11.1.0 - lodash.isempty: 4.4.0 - lodash.uniq: 4.5.0 - lodash.uniqby: 4.7.0 - lodash.uniqwith: 4.5.0 - micromatch: 4.0.8 - openapi3-ts: 4.4.0 - swagger2openapi: 7.0.8 - transitivePeerDependencies: - - encoding - - openapi-types - - supports-color - - '@orval/fetch@7.6.0(openapi-types@12.1.3)': - dependencies: - '@orval/core': 7.6.0(openapi-types@12.1.3) - transitivePeerDependencies: - - encoding - - openapi-types - - supports-color - - '@orval/hono@7.6.0(openapi-types@12.1.3)': - dependencies: - '@orval/core': 7.6.0(openapi-types@12.1.3) - '@orval/zod': 7.6.0(openapi-types@12.1.3) - lodash.uniq: 4.5.0 - transitivePeerDependencies: - - encoding - - openapi-types - - supports-color - - '@orval/mock@7.6.0(openapi-types@12.1.3)': - dependencies: - '@orval/core': 7.6.0(openapi-types@12.1.3) - openapi3-ts: 4.2.2 - transitivePeerDependencies: - - encoding - - openapi-types - - supports-color - - '@orval/query@7.6.0(openapi-types@12.1.3)': - dependencies: - '@orval/core': 7.6.0(openapi-types@12.1.3) - '@orval/fetch': 7.6.0(openapi-types@12.1.3) - lodash.omitby: 4.6.0 - transitivePeerDependencies: - - encoding - - openapi-types - - supports-color - - '@orval/swr@7.6.0(openapi-types@12.1.3)': - dependencies: - '@orval/core': 7.6.0(openapi-types@12.1.3) - '@orval/fetch': 7.6.0(openapi-types@12.1.3) - transitivePeerDependencies: - - encoding - - openapi-types - - supports-color - - '@orval/zod@7.6.0(openapi-types@12.1.3)': - dependencies: - '@orval/core': 7.6.0(openapi-types@12.1.3) - lodash.uniq: 4.5.0 - transitivePeerDependencies: - - encoding - - openapi-types - - supports-color - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@pkgr/core@0.1.1': {} - - '@react-aria/breadcrumbs@3.5.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/i18n': 3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/link': 3.7.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/breadcrumbs': 3.7.10(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/button@3.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/toolbar': 3.0.0-beta.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/toggle': 3.8.2(react@18.3.1) - '@react-types/button': 3.10.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@react-aria/button@3.11.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/toolbar': 3.0.0-beta.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/toggle': 3.8.2(react@18.3.1) - '@react-types/button': 3.11.0(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/checkbox@3.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/form': 3.0.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/toggle': 3.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/checkbox': 3.6.11(react@18.3.1) - '@react-stately/form': 3.1.2(react@18.3.1) - '@react-stately/toggle': 3.8.1(react@18.3.1) - '@react-types/checkbox': 3.9.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/dialog@3.5.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/dialog': 3.5.16(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/dialog@3.5.21(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/dialog': 3.5.16(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/focus@3.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - clsx: 2.1.1 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@react-aria/focus@3.19.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - clsx: 2.1.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/focus@3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - clsx: 2.1.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/form@3.0.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/form': 3.1.2(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@react-aria/form@3.0.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/form': 3.1.2(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/grid@3.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/live-announcer': 3.4.1 - '@react-aria/selection': 3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.2(react@18.3.1) - '@react-stately/grid': 3.11.0(react@18.3.1) - '@react-stately/selection': 3.20.0(react@18.3.1) - '@react-types/checkbox': 3.9.2(react@18.3.1) - '@react-types/grid': 3.3.0(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/i18n@3.12.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@internationalized/date': 3.7.0 - '@internationalized/message': 3.1.6 - '@internationalized/number': 3.6.0 - '@internationalized/string': 3.2.5 - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@react-aria/i18n@3.12.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@internationalized/date': 3.7.0 - '@internationalized/message': 3.1.6 - '@internationalized/number': 3.6.0 - '@internationalized/string': 3.2.5 - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/i18n@3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@internationalized/date': 3.7.0 - '@internationalized/message': 3.1.6 - '@internationalized/number': 3.6.0 - '@internationalized/string': 3.2.5 - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/interactions@3.22.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@react-aria/interactions@3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/interactions@3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/flags': 3.1.0 - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/label@3.7.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@react-aria/label@3.7.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/link@3.7.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/link': 3.5.9(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@react-aria/link@3.7.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/link': 3.5.11(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/listbox@3.13.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.2(react@18.3.1) - '@react-stately/list': 3.11.2(react@18.3.1) - '@react-types/listbox': 3.5.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/live-announcer@3.4.1': - dependencies: - '@swc/helpers': 0.5.15 - - '@react-aria/menu@3.16.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/overlays': 3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/selection': 3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.2(react@18.3.1) - '@react-stately/menu': 3.9.0(react@18.3.1) - '@react-stately/selection': 3.20.0(react@18.3.1) - '@react-stately/tree': 3.8.8(react@18.3.1) - '@react-types/button': 3.11.0(react@18.3.1) - '@react-types/menu': 3.9.13(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/overlays@3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/overlays': 3.6.14(react@18.3.1) - '@react-types/button': 3.11.0(react@18.3.1) - '@react-types/overlays': 3.8.13(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/overlays@3.25.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/overlays': 3.6.14(react@18.3.1) - '@react-types/button': 3.11.0(react@18.3.1) - '@react-types/overlays': 3.8.13(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/overlays@3.26.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/overlays': 3.6.14(react@18.3.1) - '@react-types/button': 3.11.0(react@18.3.1) - '@react-types/overlays': 3.8.13(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/progress@3.4.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/i18n': 3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/progress': 3.5.9(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/selection@3.21.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/selection': 3.20.0(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/selection@3.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/selection': 3.20.0(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/ssr@3.9.7(react@18.3.1)': - dependencies: - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-aria/switch@3.6.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/toggle': 3.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/toggle': 3.8.0(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/switch': 3.5.9(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@react-aria/table@3.16.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/grid': 3.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/live-announcer': 3.4.1 - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/visually-hidden': 3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/collections': 3.12.2(react@18.3.1) - '@react-stately/flags': 3.1.0 - '@react-stately/table': 3.13.1(react@18.3.1) - '@react-types/checkbox': 3.9.2(react@18.3.1) - '@react-types/grid': 3.2.11(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/table': 3.10.4(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/textfield@3.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/form': 3.0.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/label': 3.7.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/form': 3.1.2(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/textfield': 3.10.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@react-aria/toggle@3.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/toggle': 3.8.2(react@18.3.1) - '@react-types/checkbox': 3.9.2(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/toolbar@3.0.0-beta.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@react-aria/toolbar@3.0.0-beta.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/i18n': 3.12.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/tooltip@3.7.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/focus': 3.20.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-stately/tooltip': 3.5.0(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/tooltip': 3.4.13(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@react-aria/utils@3.26.0(react@18.3.1)': - dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - clsx: 2.1.1 - react: 18.3.1 - - '@react-aria/utils@3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - clsx: 2.1.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/utils@3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/ssr': 3.9.7(react@18.3.1) - '@react-stately/flags': 3.1.0 - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - clsx: 2.1.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/visually-hidden@3.8.18(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - transitivePeerDependencies: - - react-dom - - '@react-aria/visually-hidden@3.8.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-aria/visually-hidden@3.8.20(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/interactions': 3.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-aria/utils': 3.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-stately/checkbox@3.6.11(react@18.3.1)': - dependencies: - '@react-stately/form': 3.1.2(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/checkbox': 3.9.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/collections@3.12.0(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/collections@3.12.2(react@18.3.1)': - dependencies: - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/flags@3.1.0': - dependencies: - '@swc/helpers': 0.5.15 - - '@react-stately/form@3.1.0(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 + "@nolyfill/is-core-module@1.0.39": {} + + "@pkgr/core@0.2.4": {} + + "@radix-ui/number@1.1.1": {} + + "@radix-ui/primitive@1.1.2": {} + + "@radix-ui/react-arrow@1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-aspect-ratio@1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-avatar@1.1.4(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/react-context": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-collection@1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-slot": 1.2.0(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.0)(react@19.1.0)": + dependencies: + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-context@1.1.2(@types/react@19.1.0)(react@19.1.0)": + dependencies: + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-dialog@1.1.7(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-dismissable-layer": 1.1.6(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-focus-guards": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-focus-scope": 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-portal": 1.1.5(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-presence": 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-slot": 1.2.0(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.1.1(@types/react@19.1.0)(react@19.1.0) + aria-hidden: 1.2.4 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.0)(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-direction@1.1.1(@types/react@19.1.0)(react@19.1.0)": + dependencies: + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-dismissable-layer@1.1.6(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-escape-keydown": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-dropdown-menu@2.1.7(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-menu": 2.1.7(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.0)(react@19.1.0)": + dependencies: + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-focus-scope@1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-id@1.1.1(@types/react@19.1.0)(react@19.1.0)": + dependencies: + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-label@2.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-menu@2.1.7(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-collection": 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-dismissable-layer": 1.1.6(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-focus-guards": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-focus-scope": 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-popper": 1.2.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-portal": 1.1.5(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-presence": 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-roving-focus": 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-slot": 1.2.0(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.0)(react@19.1.0) + aria-hidden: 1.2.4 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.0)(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-popper@1.2.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@floating-ui/react-dom": 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-arrow": 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-rect": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-size": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/rect": 1.1.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-portal@1.1.5(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-presence@1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-primitive@2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/react-slot": 1.2.0(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-progress@1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/react-context": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-roving-focus@1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-collection": 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-scroll-area@1.2.4(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/number": 1.1.1 + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-presence": 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-select@2.1.7(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/number": 1.1.1 + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-collection": 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-dismissable-layer": 1.1.6(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-focus-guards": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-focus-scope": 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-popper": 1.2.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-portal": 1.1.5(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-slot": 1.2.0(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-previous": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-visually-hidden": 1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + aria-hidden: 1.2.4 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.6.3(@types/react@19.1.0)(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-separator@1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-slot@1.2.0(@types/react@19.1.0)(react@19.1.0)": + dependencies: + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-switch@1.1.4(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/primitive": 1.1.2 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + "@radix-ui/react-use-controllable-state": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-previous": 1.1.1(@types/react@19.1.0)(react@19.1.0) + "@radix-ui/react-use-size": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) + + "@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.0)(react@19.1.0)": + dependencies: + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-use-controllable-state@1.1.1(@types/react@19.1.0)(react@19.1.0)": + dependencies: + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.0)(react@19.1.0)": + dependencies: + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.0)(react@19.1.0)": + dependencies: + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-use-previous@1.1.1(@types/react@19.1.0)(react@19.1.0)": + dependencies: + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-use-rect@1.1.1(@types/react@19.1.0)(react@19.1.0)": + dependencies: + "@radix-ui/rect": 1.1.1 + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-use-size@1.1.1(@types/react@19.1.0)(react@19.1.0)": + dependencies: + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.1.0)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + "@types/react": 19.1.0 + + "@radix-ui/react-visually-hidden@1.1.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + dependencies: + "@radix-ui/react-primitive": 2.0.3(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 + "@types/react-dom": 19.1.1(@types/react@19.1.0) - '@react-stately/form@3.1.1(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 + "@radix-ui/rect@1.1.1": {} - '@react-stately/form@3.1.2(react@18.3.1)': - dependencies: - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 + "@rtsao/scc@1.1.0": {} - '@react-stately/grid@3.11.0(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.2(react@18.3.1) - '@react-stately/selection': 3.20.0(react@18.3.1) - '@react-types/grid': 3.3.0(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 + "@rushstack/eslint-patch@1.11.0": {} - '@react-stately/list@3.11.1(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.2(react@18.3.1) - '@react-stately/selection': 3.20.0(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 + "@schummar/icu-type-parser@1.21.5": {} - '@react-stately/list@3.11.2(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.2(react@18.3.1) - '@react-stately/selection': 3.20.0(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/menu@3.9.0(react@18.3.1)': - dependencies: - '@react-stately/overlays': 3.6.14(react@18.3.1) - '@react-types/menu': 3.9.13(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/overlays@3.6.12(react@18.3.1)': - dependencies: - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/overlays': 3.8.13(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/overlays@3.6.13(react@18.3.1)': - dependencies: - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/overlays': 3.8.13(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/overlays@3.6.14(react@18.3.1)': - dependencies: - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/overlays': 3.8.13(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/selection@3.20.0(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.2(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/table@3.13.1(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.2(react@18.3.1) - '@react-stately/flags': 3.1.0 - '@react-stately/grid': 3.11.0(react@18.3.1) - '@react-stately/selection': 3.20.0(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/grid': 3.2.11(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@react-types/table': 3.10.4(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 + "@standard-schema/utils@0.3.0": {} - '@react-stately/toggle@3.8.0(react@18.3.1)': - dependencies: - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/checkbox': 3.9.2(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/toggle@3.8.1(react@18.3.1)': - dependencies: - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/checkbox': 3.9.1(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/toggle@3.8.2(react@18.3.1)': - dependencies: - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/checkbox': 3.9.2(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/tooltip@3.5.0(react@18.3.1)': - dependencies: - '@react-stately/overlays': 3.6.14(react@18.3.1) - '@react-types/tooltip': 3.4.13(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/tree@3.8.6(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.2(react@18.3.1) - '@react-stately/selection': 3.20.0(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/tree@3.8.8(react@18.3.1)': - dependencies: - '@react-stately/collections': 3.12.2(react@18.3.1) - '@react-stately/selection': 3.20.0(react@18.3.1) - '@react-stately/utils': 3.10.5(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/utils@3.10.5(react@18.3.1)': - dependencies: - '@swc/helpers': 0.5.15 - react: 18.3.1 - - '@react-stately/virtualizer@4.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@react-aria/utils': 3.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - '@swc/helpers': 0.5.15 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@react-types/breadcrumbs@3.7.10(react@18.3.1)': - dependencies: - '@react-types/link': 3.5.11(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/button@3.10.1(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/button@3.10.2(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/button@3.11.0(react@18.3.1)': - dependencies: - '@react-types/shared': 3.28.0(react@18.3.1) - react: 18.3.1 - - '@react-types/calendar@3.6.1(react@18.3.1)': - dependencies: - '@internationalized/date': 3.7.0 - '@react-types/shared': 3.28.0(react@18.3.1) - react: 18.3.1 - - '@react-types/checkbox@3.9.1(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/checkbox@3.9.2(react@18.3.1)': - dependencies: - '@react-types/shared': 3.28.0(react@18.3.1) - react: 18.3.1 - - '@react-types/datepicker@3.10.0(react@18.3.1)': - dependencies: - '@internationalized/date': 3.7.0 - '@react-types/calendar': 3.6.1(react@18.3.1) - '@react-types/overlays': 3.8.13(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/datepicker@3.9.0(react@18.3.1)': - dependencies: - '@internationalized/date': 3.7.0 - '@react-types/calendar': 3.6.1(react@18.3.1) - '@react-types/overlays': 3.8.13(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/dialog@3.5.16(react@18.3.1)': - dependencies: - '@react-types/overlays': 3.8.13(react@18.3.1) - '@react-types/shared': 3.28.0(react@18.3.1) - react: 18.3.1 - - '@react-types/form@3.7.8(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/form@3.7.9(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/grid@3.2.11(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/grid@3.3.0(react@18.3.1)': - dependencies: - '@react-types/shared': 3.28.0(react@18.3.1) - react: 18.3.1 - - '@react-types/link@3.5.11(react@18.3.1)': - dependencies: - '@react-types/shared': 3.28.0(react@18.3.1) - react: 18.3.1 - - '@react-types/link@3.5.9(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/listbox@3.5.5(react@18.3.1)': - dependencies: - '@react-types/shared': 3.28.0(react@18.3.1) - react: 18.3.1 - - '@react-types/menu@3.9.13(react@18.3.1)': - dependencies: - '@react-types/overlays': 3.8.13(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/overlays@3.8.11(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/overlays@3.8.12(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/overlays@3.8.13(react@18.3.1)': - dependencies: - '@react-types/shared': 3.28.0(react@18.3.1) - react: 18.3.1 - - '@react-types/progress@3.5.9(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/select@3.9.8(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/shared@3.26.0(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@react-types/shared@3.27.0(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@react-types/shared@3.28.0(react@18.3.1)': - dependencies: - react: 18.3.1 - - '@react-types/switch@3.5.9(react@18.3.1)': - dependencies: - '@react-types/shared': 3.28.0(react@18.3.1) - react: 18.3.1 - - '@react-types/table@3.10.4(react@18.3.1)': - dependencies: - '@react-types/grid': 3.2.11(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/textfield@3.10.0(react@18.3.1)': - dependencies: - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@react-types/tooltip@3.4.13(react@18.3.1)': - dependencies: - '@react-types/overlays': 3.8.13(react@18.3.1) - '@react-types/shared': 3.27.0(react@18.3.1) - react: 18.3.1 - - '@remix-run/router@1.16.0': {} - - '@rollup/rollup-android-arm-eabi@4.34.9': - optional: true - - '@rollup/rollup-android-arm64@4.34.9': - optional: true - - '@rollup/rollup-darwin-arm64@4.34.9': - optional: true - - '@rollup/rollup-darwin-x64@4.34.9': - optional: true - - '@rollup/rollup-freebsd-arm64@4.34.9': - optional: true - - '@rollup/rollup-freebsd-x64@4.34.9': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.34.9': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.34.9': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.34.9': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.34.9': - optional: true - - '@rollup/rollup-linux-loongarch64-gnu@4.34.9': - optional: true - - '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.34.9': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.34.9': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.34.9': - optional: true - - '@rollup/rollup-linux-x64-musl@4.34.9': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.34.9': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.34.9': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.34.9': - optional: true - - '@rtsao/scc@1.1.0': {} - - '@shikijs/engine-oniguruma@1.29.2': - dependencies: - '@shikijs/types': 1.29.2 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/types@1.29.2': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@10.0.2': {} - - '@standard-schema/utils@0.3.0': {} - - '@stoplight/better-ajv-errors@1.0.3(ajv@8.17.1)': - dependencies: - ajv: 8.17.1 - jsonpointer: 5.0.1 - leven: 3.1.0 - - '@stoplight/json-ref-readers@1.2.2': - dependencies: - node-fetch: 2.7.0 - tslib: 1.14.1 - transitivePeerDependencies: - - encoding - - '@stoplight/json-ref-resolver@3.1.6': - dependencies: - '@stoplight/json': 3.21.7 - '@stoplight/path': 1.3.2 - '@stoplight/types': 13.6.0 - '@types/urijs': 1.19.25 - dependency-graph: 0.11.0 - fast-memoize: 2.5.2 - immer: 9.0.21 - lodash: 4.17.21 - tslib: 2.8.1 - urijs: 1.19.11 - - '@stoplight/json@3.21.7': - dependencies: - '@stoplight/ordered-object-literal': 1.0.5 - '@stoplight/path': 1.3.2 - '@stoplight/types': 13.20.0 - jsonc-parser: 2.2.1 - lodash: 4.17.21 - safe-stable-stringify: 1.1.1 - - '@stoplight/ordered-object-literal@1.0.5': {} - - '@stoplight/path@1.3.2': {} - - '@stoplight/spectral-core@1.19.4': - dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) - '@stoplight/json': 3.21.7 - '@stoplight/path': 1.3.2 - '@stoplight/spectral-parsers': 1.0.5 - '@stoplight/spectral-ref-resolver': 1.0.5 - '@stoplight/spectral-runtime': 1.1.3 - '@stoplight/types': 13.6.0 - '@types/es-aggregate-error': 1.0.6 - '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-errors: 3.0.0(ajv@8.17.1) - ajv-formats: 2.1.1(ajv@8.17.1) - es-aggregate-error: 1.0.13 - jsonpath-plus: 10.2.0 - lodash: 4.17.21 - lodash.topath: 4.5.2 - minimatch: 3.1.2 - nimma: 0.2.3 - pony-cause: 1.1.1 - simple-eval: 1.0.1 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-formats@1.8.2': - dependencies: - '@stoplight/json': 3.21.7 - '@stoplight/spectral-core': 1.19.4 - '@types/json-schema': 7.0.15 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-functions@1.9.3': - dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) - '@stoplight/json': 3.21.7 - '@stoplight/spectral-core': 1.19.4 - '@stoplight/spectral-formats': 1.8.2 - '@stoplight/spectral-runtime': 1.1.3 - ajv: 8.17.1 - ajv-draft-04: 1.0.0(ajv@8.17.1) - ajv-errors: 3.0.0(ajv@8.17.1) - ajv-formats: 2.1.1(ajv@8.17.1) - lodash: 4.17.21 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-parsers@1.0.5': - dependencies: - '@stoplight/json': 3.21.7 - '@stoplight/types': 14.1.1 - '@stoplight/yaml': 4.3.0 - tslib: 2.8.1 - - '@stoplight/spectral-ref-resolver@1.0.5': - dependencies: - '@stoplight/json-ref-readers': 1.2.2 - '@stoplight/json-ref-resolver': 3.1.6 - '@stoplight/spectral-runtime': 1.1.3 - dependency-graph: 0.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-rulesets@1.21.3': - dependencies: - '@asyncapi/specs': 6.8.1 - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) - '@stoplight/json': 3.21.7 - '@stoplight/spectral-core': 1.19.4 - '@stoplight/spectral-formats': 1.8.2 - '@stoplight/spectral-functions': 1.9.3 - '@stoplight/spectral-runtime': 1.1.3 - '@stoplight/types': 13.20.0 - '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - json-schema-traverse: 1.0.0 - leven: 3.1.0 - lodash: 4.17.21 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-runtime@1.1.3': - dependencies: - '@stoplight/json': 3.21.7 - '@stoplight/path': 1.3.2 - '@stoplight/types': 13.20.0 - abort-controller: 3.0.0 - lodash: 4.17.21 - node-fetch: 2.7.0 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/types@13.20.0': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - - '@stoplight/types@13.6.0': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - - '@stoplight/types@14.1.1': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - - '@stoplight/yaml-ast-parser@0.0.50': {} - - '@stoplight/yaml@4.3.0': - dependencies: - '@stoplight/ordered-object-literal': 1.0.5 - '@stoplight/types': 14.1.1 - '@stoplight/yaml-ast-parser': 0.0.50 - tslib: 2.8.1 + "@swc/counter@0.1.3": {} - '@swc/helpers@0.5.15': + "@swc/helpers@0.5.15": dependencies: tslib: 2.8.1 - '@tanstack/react-virtual@3.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@tabler/icons-react@3.31.0(react@19.1.0)": dependencies: - '@tanstack/virtual-core': 3.11.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@tabler/icons": 3.31.0 + react: 19.1.0 - '@tanstack/react-virtual@3.11.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + "@tabler/icons@3.31.0": {} + + "@tailwindcss/node@4.1.2": dependencies: - '@tanstack/virtual-core': 3.11.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + enhanced-resolve: 5.18.1 + jiti: 2.4.2 + lightningcss: 1.29.2 + tailwindcss: 4.1.2 - '@tanstack/virtual-core@3.11.2': {} + "@tailwindcss/oxide-android-arm64@4.1.2": + optional: true - '@tanstack/virtual-core@3.11.3': {} + "@tailwindcss/oxide-darwin-arm64@4.1.2": + optional: true - '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.4.2)': + "@tailwindcss/oxide-darwin-x64@4.1.2": + optional: true + + "@tailwindcss/oxide-freebsd-x64@4.1.2": + optional: true + + "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.2": + optional: true + + "@tailwindcss/oxide-linux-arm64-gnu@4.1.2": + optional: true + + "@tailwindcss/oxide-linux-arm64-musl@4.1.2": + optional: true + + "@tailwindcss/oxide-linux-x64-gnu@4.1.2": + optional: true + + "@tailwindcss/oxide-linux-x64-musl@4.1.2": + optional: true + + "@tailwindcss/oxide-win32-arm64-msvc@4.1.2": + optional: true + + "@tailwindcss/oxide-win32-x64-msvc@4.1.2": + optional: true + + "@tailwindcss/oxide@4.1.2": + optionalDependencies: + "@tailwindcss/oxide-android-arm64": 4.1.2 + "@tailwindcss/oxide-darwin-arm64": 4.1.2 + "@tailwindcss/oxide-darwin-x64": 4.1.2 + "@tailwindcss/oxide-freebsd-x64": 4.1.2 + "@tailwindcss/oxide-linux-arm-gnueabihf": 4.1.2 + "@tailwindcss/oxide-linux-arm64-gnu": 4.1.2 + "@tailwindcss/oxide-linux-arm64-musl": 4.1.2 + "@tailwindcss/oxide-linux-x64-gnu": 4.1.2 + "@tailwindcss/oxide-linux-x64-musl": 4.1.2 + "@tailwindcss/oxide-win32-arm64-msvc": 4.1.2 + "@tailwindcss/oxide-win32-x64-msvc": 4.1.2 + + "@tailwindcss/postcss@4.1.2": dependencies: - '@babel/generator': 7.26.9 - '@babel/parser': 7.26.9 - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 - javascript-natural-sort: 0.7.1 - lodash: 4.17.21 - prettier: 3.4.2 - transitivePeerDependencies: - - supports-color + "@alloc/quick-lru": 5.2.0 + "@tailwindcss/node": 4.1.2 + "@tailwindcss/oxide": 4.1.2 + postcss: 8.5.3 + tailwindcss: 4.1.2 - '@types/babel__core@7.20.5': + "@tybys/wasm-util@0.9.0": dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 + tslib: 2.8.1 + optional: true - '@types/babel__generator@7.6.8': + "@types/estree@1.0.7": {} + + "@types/json-schema@7.0.15": {} + + "@types/json5@0.0.29": {} + + "@types/node@22.14.0": dependencies: - '@babel/types': 7.26.9 + undici-types: 6.21.0 - '@types/babel__template@7.4.4': + "@types/react-dom@19.1.1(@types/react@19.1.0)": dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 + "@types/react": 19.1.0 - '@types/babel__traverse@7.20.6': + "@types/react@19.1.0": dependencies: - '@babel/types': 7.26.9 - - '@types/es-aggregate-error@1.0.6': - dependencies: - '@types/node': 22.13.1 - - '@types/estree@1.0.6': {} - - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/json-schema@7.0.15': {} - - '@types/json5@0.0.29': {} - - '@types/node@22.13.1': - dependencies: - undici-types: 6.20.0 - - '@types/prop-types@15.7.14': {} - - '@types/react-dom@18.3.0': - dependencies: - '@types/react': 18.3.3 - - '@types/react@18.3.3': - dependencies: - '@types/prop-types': 15.7.14 csstype: 3.1.3 - '@types/unist@3.0.3': {} - - '@types/urijs@1.19.25': {} - - '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)': + "@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)": dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.23.0(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/type-utils': 8.23.0(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.23.0 - eslint: 8.57.1 + "@eslint-community/regexpp": 4.12.1 + "@typescript-eslint/parser": 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + "@typescript-eslint/scope-manager": 8.29.0 + "@typescript-eslint/type-utils": 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + "@typescript-eslint/utils": 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + "@typescript-eslint/visitor-keys": 8.29.0 + eslint: 9.23.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.23.0(eslint@8.57.1)(typescript@5.7.3)': + "@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)": dependencies: - '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.23.0 + "@typescript-eslint/scope-manager": 8.29.0 + "@typescript-eslint/types": 8.29.0 + "@typescript-eslint/typescript-estree": 8.29.0(typescript@5.8.2) + "@typescript-eslint/visitor-keys": 8.29.0 debug: 4.4.0 - eslint: 8.57.1 - typescript: 5.7.3 + eslint: 9.23.0(jiti@2.4.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.23.0': + "@typescript-eslint/scope-manager@8.29.0": dependencies: - '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/visitor-keys': 8.23.0 + "@typescript-eslint/types": 8.29.0 + "@typescript-eslint/visitor-keys": 8.29.0 - '@typescript-eslint/type-utils@8.23.0(eslint@8.57.1)(typescript@5.7.3)': + "@typescript-eslint/type-utils@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)": dependencies: - '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@8.57.1)(typescript@5.7.3) + "@typescript-eslint/typescript-estree": 8.29.0(typescript@5.8.2) + "@typescript-eslint/utils": 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) debug: 4.4.0 - eslint: 8.57.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + eslint: 9.23.0(jiti@2.4.2) + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.23.0': {} + "@typescript-eslint/types@8.29.0": {} - '@typescript-eslint/typescript-estree@8.23.0(typescript@5.7.3)': + "@typescript-eslint/typescript-estree@8.29.0(typescript@5.8.2)": dependencies: - '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/visitor-keys': 8.23.0 + "@typescript-eslint/types": 8.29.0 + "@typescript-eslint/visitor-keys": 8.29.0 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.23.0(eslint@8.57.1)(typescript@5.7.3)': + "@typescript-eslint/utils@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)": dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/types': 8.23.0 - '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - eslint: 8.57.1 - typescript: 5.7.3 + "@eslint-community/eslint-utils": 4.6.1(eslint@9.23.0(jiti@2.4.2)) + "@typescript-eslint/scope-manager": 8.29.0 + "@typescript-eslint/types": 8.29.0 + "@typescript-eslint/typescript-estree": 8.29.0(typescript@5.8.2) + eslint: 9.23.0(jiti@2.4.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.23.0': + "@typescript-eslint/visitor-keys@8.29.0": dependencies: - '@typescript-eslint/types': 8.23.0 + "@typescript-eslint/types": 8.29.0 eslint-visitor-keys: 4.2.0 - '@ungap/structured-clone@1.3.0': {} + "@unrs/resolver-binding-darwin-arm64@1.5.0": + optional: true - '@vitejs/plugin-react@4.3.4(vite@6.2.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0))': - dependencies: - '@babel/core': 7.26.9 - '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9) - '@types/babel__core': 7.20.5 - react-refresh: 0.14.2 - vite: 6.2.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0) - transitivePeerDependencies: - - supports-color + "@unrs/resolver-binding-darwin-x64@1.5.0": + optional: true - abort-controller@3.0.0: + "@unrs/resolver-binding-freebsd-x64@1.5.0": + optional: true + + "@unrs/resolver-binding-linux-arm-gnueabihf@1.5.0": + optional: true + + "@unrs/resolver-binding-linux-arm-musleabihf@1.5.0": + optional: true + + "@unrs/resolver-binding-linux-arm64-gnu@1.5.0": + optional: true + + "@unrs/resolver-binding-linux-arm64-musl@1.5.0": + optional: true + + "@unrs/resolver-binding-linux-ppc64-gnu@1.5.0": + optional: true + + "@unrs/resolver-binding-linux-riscv64-gnu@1.5.0": + optional: true + + "@unrs/resolver-binding-linux-s390x-gnu@1.5.0": + optional: true + + "@unrs/resolver-binding-linux-x64-gnu@1.5.0": + optional: true + + "@unrs/resolver-binding-linux-x64-musl@1.5.0": + optional: true + + "@unrs/resolver-binding-wasm32-wasi@1.5.0": dependencies: - event-target-shim: 5.0.1 + "@napi-rs/wasm-runtime": 0.2.9 + optional: true + + "@unrs/resolver-binding-win32-arm64-msvc@1.5.0": + optional: true + + "@unrs/resolver-binding-win32-ia32-msvc@1.5.0": + optional: true + + "@unrs/resolver-binding-win32-x64-msvc@1.5.0": + optional: true acorn-jsx@5.3.2(acorn@8.14.1): dependencies: @@ -6898,18 +4038,6 @@ snapshots: acorn@8.14.1: {} - ajv-draft-04@1.0.0(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - - ajv-errors@3.0.0(ajv@8.17.1): - dependencies: - ajv: 8.17.1 - - ajv-formats@2.1.1(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -6917,36 +4045,16 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.17.1: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - ansi-colors@4.1.3: {} - - ansi-regex@5.0.1: {} - - ansi-regex@6.1.0: {} - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - ansi-styles@6.2.1: {} - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@5.0.2: {} - argparse@2.0.1: {} + aria-hidden@1.2.4: + dependencies: + tslib: 2.8.1 + aria-query@5.3.2: {} array-buffer-byte-length@1.0.2: @@ -6963,8 +4071,6 @@ snapshots: get-intrinsic: 1.3.0 is-string: 1.1.1 - array-union@2.1.0: {} - array.prototype.findlast@1.2.5: dependencies: call-bind: 1.0.8 @@ -6974,9 +4080,10 @@ snapshots: es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 - array.prototype.findlastindex@1.2.5: + array.prototype.findlastindex@1.2.6: dependencies: call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 @@ -7017,29 +4124,17 @@ snapshots: ast-types-flow@0.0.8: {} - astring@1.9.0: {} - async-function@1.0.0: {} asynckit@0.4.0: {} - autoprefixer@10.4.20(postcss@8.5.1): - dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001702 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.1.1 - postcss: 8.5.1 - postcss-value-parser: 4.2.0 - available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 axe-core@4.10.3: {} - axios@1.8.1: + axios@1.8.4: dependencies: follow-redirects: 1.15.9 form-data: 4.0.2 @@ -7051,8 +4146,6 @@ snapshots: balanced-match@1.0.2: {} - binary-extensions@2.3.0: {} - brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -7066,14 +4159,9 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.4: + busboy@1.6.0: dependencies: - caniuse-lite: 1.0.30001702 - electron-to-chromium: 1.5.112 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.4) - - cac@6.7.14: {} + streamsearch: 1.1.0 call-bind-apply-helpers@1.0.2: dependencies: @@ -7092,42 +4180,20 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - call-me-maybe@1.0.2: {} - callsites@3.1.0: {} - camelcase-css@2.0.1: {} - - caniuse-lite@1.0.30001702: {} + caniuse-lite@1.0.30001714: {} chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - chokidar@3.6.0: + class-variance-authority@0.7.1: dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 + clsx: 2.1.1 - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clsx@1.2.1: {} + client-only@0.0.1: {} clsx@2.1.1: {} @@ -7141,25 +4207,21 @@ snapshots: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 - - color2k@2.0.3: {} + optional: true color@4.2.3: dependencies: color-convert: 2.0.1 color-string: 1.9.1 + optional: true combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - commander@4.1.1: {} - - compare-versions@6.1.1: {} - concat-map@0.0.1: {} - convert-source-map@2.0.0: {} + cookie@0.4.2: {} cross-spawn@7.0.6: dependencies: @@ -7167,8 +4229,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - cssesc@3.0.0: {} - csstype@3.1.3: {} damerau-levenshtein@1.0.8: {} @@ -7205,8 +4265,6 @@ snapshots: deep-is@0.1.4: {} - deepmerge@4.3.1: {} - define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 @@ -7221,44 +4279,26 @@ snapshots: delayed-stream@1.0.0: {} - dependency-graph@0.11.0: {} + detect-libc@2.0.3: {} - didyoumean@1.2.2: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - dlv@1.1.3: {} + detect-node-es@1.1.0: {} doctrine@2.1.0: dependencies: esutils: 2.0.3 - doctrine@3.0.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 - eastasianwidth@0.2.0: {} - - electron-to-chromium@1.5.112: {} - - emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} - enquirer@2.4.1: + enhanced-resolve@5.18.1: dependencies: - ansi-colors: 4.1.3 - strip-ansi: 6.0.1 - - entities@4.5.0: {} + graceful-fs: 4.2.11 + tapable: 2.2.1 es-abstract@1.23.9: dependencies: @@ -7312,18 +4352,7 @@ snapshots: typed-array-byte-offset: 1.0.4 typed-array-length: 1.0.7 unbox-primitive: 1.1.0 - which-typed-array: 1.1.18 - - es-aggregate-error@1.0.13: - dependencies: - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - function-bind: 1.1.2 - globalthis: 1.0.4 - has-property-descriptors: 1.0.2 - set-function-name: 2.0.2 + which-typed-array: 1.1.19 es-define-property@1.0.1: {} @@ -7369,43 +4398,31 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es6-promise@3.3.1: {} - - esbuild@0.25.0: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.0 - '@esbuild/android-arm': 0.25.0 - '@esbuild/android-arm64': 0.25.0 - '@esbuild/android-x64': 0.25.0 - '@esbuild/darwin-arm64': 0.25.0 - '@esbuild/darwin-x64': 0.25.0 - '@esbuild/freebsd-arm64': 0.25.0 - '@esbuild/freebsd-x64': 0.25.0 - '@esbuild/linux-arm': 0.25.0 - '@esbuild/linux-arm64': 0.25.0 - '@esbuild/linux-ia32': 0.25.0 - '@esbuild/linux-loong64': 0.25.0 - '@esbuild/linux-mips64el': 0.25.0 - '@esbuild/linux-ppc64': 0.25.0 - '@esbuild/linux-riscv64': 0.25.0 - '@esbuild/linux-s390x': 0.25.0 - '@esbuild/linux-x64': 0.25.0 - '@esbuild/netbsd-arm64': 0.25.0 - '@esbuild/netbsd-x64': 0.25.0 - '@esbuild/openbsd-arm64': 0.25.0 - '@esbuild/openbsd-x64': 0.25.0 - '@esbuild/sunos-x64': 0.25.0 - '@esbuild/win32-arm64': 0.25.0 - '@esbuild/win32-ia32': 0.25.0 - '@esbuild/win32-x64': 0.25.0 - - escalade@3.2.0: {} - escape-string-regexp@4.0.0: {} - eslint-config-prettier@9.1.0(eslint@8.57.1): + eslint-config-next@15.2.4(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2): dependencies: - eslint: 8.57.1 + "@next/eslint-plugin-next": 15.2.4 + "@rushstack/eslint-patch": 1.11.0 + "@typescript-eslint/eslint-plugin": 8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + "@typescript-eslint/parser": 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + eslint: 9.23.0(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.23.0(jiti@2.4.2)) + eslint-plugin-react: 7.37.5(eslint@9.23.0(jiti@2.4.2)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.23.0(jiti@2.4.2)) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-config-prettier@9.1.0(eslint@9.23.0(jiti@2.4.2)): + dependencies: + eslint: 9.23.0(jiti@2.4.2) eslint-import-resolver-node@0.3.9: dependencies: @@ -7415,34 +4432,44 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.23.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)): dependencies: - debug: 3.2.7 + "@nolyfill/is-core-module": 1.0.39 + debug: 4.4.0 + eslint: 9.23.0(jiti@2.4.2) + get-tsconfig: 4.10.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.12 + unrs-resolver: 1.5.0 optionalDependencies: - '@typescript-eslint/parser': 8.23.0(eslint@8.57.1)(typescript@5.7.3) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-plugin-es@3.0.1(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)): dependencies: - eslint: 8.57.1 - eslint-utils: 2.1.0 - regexpp: 3.2.0 + debug: 3.2.7 + optionalDependencies: + "@typescript-eslint/parser": 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) + eslint: 9.23.0(jiti@2.4.2) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)) + transitivePeerDependencies: + - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)): dependencies: - '@rtsao/scc': 1.1.0 + "@rtsao/scc": 1.1.0 array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 + 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: 8.57.1 + eslint: 9.23.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.23.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.23.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -7454,13 +4481,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.23.0(eslint@8.57.1)(typescript@5.7.3) + "@typescript-eslint/parser": 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.23.0(jiti@2.4.2)): dependencies: aria-query: 5.3.2 array-includes: 3.1.8 @@ -7470,7 +4497,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.57.1 + eslint: 9.23.0(jiti@2.4.2) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -7479,30 +4506,20 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-node@11.1.0(eslint@8.57.1): + eslint-plugin-prettier@5.2.6(eslint-config-prettier@9.1.0(eslint@9.23.0(jiti@2.4.2)))(eslint@9.23.0(jiti@2.4.2))(prettier@3.5.3): dependencies: - eslint: 8.57.1 - eslint-plugin-es: 3.0.1(eslint@8.57.1) - eslint-utils: 2.1.0 - ignore: 5.3.2 - minimatch: 3.1.2 - resolve: 1.22.10 - semver: 6.3.1 - - eslint-plugin-prettier@5.2.3(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.4.2): - dependencies: - eslint: 8.57.1 - prettier: 3.4.2 + eslint: 9.23.0(jiti@2.4.2) + prettier: 3.5.3 prettier-linter-helpers: 1.0.0 - synckit: 0.9.2 + synckit: 0.11.4 optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@8.57.1) + eslint-config-prettier: 9.1.0(eslint@9.23.0(jiti@2.4.2)) - eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): + eslint-plugin-react-hooks@5.2.0(eslint@9.23.0(jiti@2.4.2)): dependencies: - eslint: 8.57.1 + eslint: 9.23.0(jiti@2.4.2) - eslint-plugin-react@7.37.4(eslint@8.57.1): + eslint-plugin-react@7.37.5(eslint@9.23.0(jiti@2.4.2)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -7510,12 +4527,12 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 8.57.1 + eslint: 9.23.0(jiti@2.4.2) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.8 + object.entries: 1.1.9 object.fromentries: 2.0.8 object.values: 1.2.1 prop-types: 15.8.1 @@ -7524,75 +4541,62 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) - - eslint-scope@7.2.2: + eslint-scope@8.3.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@2.1.0: - dependencies: - eslint-visitor-keys: 1.3.0 - - eslint-visitor-keys@1.3.0: {} - eslint-visitor-keys@3.4.3: {} eslint-visitor-keys@4.2.0: {} - eslint@8.57.1: + eslint@9.23.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 + "@eslint-community/eslint-utils": 4.6.1(eslint@9.23.0(jiti@2.4.2)) + "@eslint-community/regexpp": 4.12.1 + "@eslint/config-array": 0.19.2 + "@eslint/config-helpers": 0.2.1 + "@eslint/core": 0.12.0 + "@eslint/eslintrc": 3.3.1 + "@eslint/js": 9.23.0 + "@eslint/plugin-kit": 0.2.8 + "@humanfs/node": 0.16.6 + "@humanwhocodes/module-importer": 1.0.1 + "@humanwhocodes/retry": 0.4.2 + "@types/estree": 1.0.7 + "@types/json-schema": 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.0 - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionalDependencies: + jiti: 2.4.2 transitivePeerDependencies: - supports-color - espree@9.6.1: + espree@10.3.0: dependencies: acorn: 8.14.1 acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 3.4.3 + eslint-visitor-keys: 4.2.0 esquery@1.6.0: dependencies: @@ -7606,28 +4610,22 @@ snapshots: esutils@2.0.3: {} - event-target-shim@5.0.1: {} - - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} + 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-glob@3.3.3: dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 + "@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 @@ -7636,19 +4634,17 @@ snapshots: fast-levenshtein@2.0.6: {} - fast-memoize@2.5.2: {} - - fast-safe-stringify@2.1.1: {} - - fast-uri@3.0.6: {} - fastq@1.19.1: dependencies: reusify: 1.1.0 - file-entry-cache@6.0.1: + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 fill-range@7.1.1: dependencies: @@ -7659,13 +4655,10 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: flatted: 3.3.3 keyv: 4.5.4 - rimraf: 3.0.2 - - flat@5.0.2: {} flatted@3.3.3: {} @@ -7675,11 +4668,6 @@ snapshots: dependencies: is-callable: 1.2.7 - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - form-data@4.0.2: dependencies: asynckit: 0.4.0 @@ -7687,27 +4675,14 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 - fraction.js@4.3.7: {} - - framer-motion@12.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@12.7.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - motion-dom: 12.4.10 - motion-utils: 12.4.10 + motion-dom: 12.7.3 + motion-utils: 12.7.2 tslib: 2.8.1 optionalDependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - fs-extra@11.3.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) function-bind@1.1.2: {} @@ -7722,10 +4697,6 @@ snapshots: functions-have-names@1.2.3: {} - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7739,19 +4710,23 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-nonce@1.0.1: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stream@6.0.1: {} - 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.10.0: + dependencies: + resolve-pkg-maps: 1.0.0 + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -7760,46 +4735,15 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.5: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} globalthis@1.0.4: dependencies: define-properties: 1.2.1 gopd: 1.2.0 - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.3 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 - - globrex@0.1.2: {} - gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -7828,28 +4772,8 @@ snapshots: dependencies: function-bind: 1.1.2 - html-parse-stringify@3.0.1: - dependencies: - void-elements: 3.1.0 - - http2-client@1.3.5: {} - - human-signals@2.1.0: {} - - i18next-browser-languagedetector@8.0.4: - dependencies: - '@babel/runtime': 7.26.9 - - i18next@24.2.2(typescript@5.7.3): - dependencies: - '@babel/runtime': 7.26.9 - optionalDependencies: - typescript: 5.7.3 - ignore@5.3.2: {} - immer@9.0.21: {} - import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -7857,24 +4781,17 @@ snapshots: imurmurhash@0.1.4: {} - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - internal-slot@1.1.0: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.1.0 - intl-messageformat@10.7.15: + intl-messageformat@10.7.16: dependencies: - '@formatjs/ecma402-abstract': 2.3.3 - '@formatjs/fast-memoize': 2.2.6 - '@formatjs/icu-messageformat-parser': 2.11.1 + "@formatjs/ecma402-abstract": 2.3.4 + "@formatjs/fast-memoize": 2.2.7 + "@formatjs/icu-messageformat-parser": 2.11.2 tslib: 2.8.1 is-array-buffer@3.0.5: @@ -7883,7 +4800,8 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 - is-arrayish@0.3.2: {} + is-arrayish@0.3.2: + optional: true is-async-function@2.1.1: dependencies: @@ -7897,15 +4815,15 @@ snapshots: dependencies: has-bigints: 1.1.0 - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.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.7.1 + is-callable@1.2.7: {} is-core-module@2.16.1: @@ -7929,8 +4847,6 @@ snapshots: dependencies: call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.1.0: dependencies: call-bound: 1.0.4 @@ -7951,8 +4867,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -7966,8 +4880,6 @@ snapshots: dependencies: call-bound: 1.0.4 - is-stream@2.0.1: {} - is-string@1.1.1: dependencies: call-bound: 1.0.4 @@ -7981,7 +4893,7 @@ snapshots: is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 is-weakmap@2.0.2: {} @@ -8007,15 +4919,7 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - javascript-natural-sort@0.7.1: {} - - jiti@1.21.7: {} + jiti@2.4.2: {} js-tokens@4.0.0: {} @@ -8023,42 +4927,18 @@ snapshots: dependencies: argparse: 2.0.1 - jsep@1.4.0: {} - jsesc@3.1.0: {} json-buffer@3.0.1: {} json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} json5@1.0.2: dependencies: minimist: 1.2.8 - json5@2.2.3: {} - - jsonc-parser@2.2.1: {} - - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - jsonpath-plus@10.2.0: - dependencies: - '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) - '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) - jsep: 1.4.0 - - jsonpointer@5.0.1: {} - - jsonschema@1.5.0: {} - jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -8076,72 +4956,72 @@ snapshots: dependencies: language-subtag-registry: 0.3.23 - leven@3.1.0: {} - levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - lilconfig@3.1.3: {} + lightningcss-darwin-arm64@1.29.2: + optional: true - lines-and-columns@1.2.4: {} + lightningcss-darwin-x64@1.29.2: + optional: true - linkify-it@5.0.0: + lightningcss-freebsd-x64@1.29.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.29.2: + optional: true + + lightningcss-linux-arm64-gnu@1.29.2: + optional: true + + lightningcss-linux-arm64-musl@1.29.2: + optional: true + + lightningcss-linux-x64-gnu@1.29.2: + optional: true + + lightningcss-linux-x64-musl@1.29.2: + optional: true + + lightningcss-win32-arm64-msvc@1.29.2: + optional: true + + lightningcss-win32-x64-msvc@1.29.2: + optional: true + + lightningcss@1.29.2: dependencies: - uc.micro: 2.1.0 + detect-libc: 2.0.3 + optionalDependencies: + lightningcss-darwin-arm64: 1.29.2 + lightningcss-darwin-x64: 1.29.2 + lightningcss-freebsd-x64: 1.29.2 + lightningcss-linux-arm-gnueabihf: 1.29.2 + lightningcss-linux-arm64-gnu: 1.29.2 + lightningcss-linux-arm64-musl: 1.29.2 + lightningcss-linux-x64-gnu: 1.29.2 + lightningcss-linux-x64-musl: 1.29.2 + lightningcss-win32-arm64-msvc: 1.29.2 + lightningcss-win32-x64-msvc: 1.29.2 locate-path@6.0.0: dependencies: p-locate: 5.0.0 - lodash.isempty@4.4.0: {} - lodash.merge@4.6.2: {} - lodash.omitby@4.6.0: {} - - lodash.topath@4.5.2: {} - - lodash.uniq@4.5.0: {} - - lodash.uniqby@4.7.0: {} - - lodash.uniqwith@4.5.0: {} - - lodash@4.17.21: {} - - loglevel-plugin-prefix@0.8.4: {} - - loglevel@1.9.2: {} - loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - lru-cache@10.4.3: {} - - lru-cache@5.1.1: + lucide-react@0.487.0(react@19.1.0): dependencies: - yallist: 3.1.1 - - lunr@2.3.9: {} - - markdown-it@14.1.0: - dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.0 - mdurl: 2.0.0 - punycode.js: 2.3.1 - uc.micro: 2.1.0 + react: 19.1.0 math-intrinsics@1.1.0: {} - mdurl@2.0.0: {} - - merge-stream@2.0.0: {} - merge2@1.4.1: {} micromatch@4.0.8: @@ -8155,111 +5035,79 @@ snapshots: dependencies: mime-db: 1.52.0 - mimic-fn@2.1.0: {} - minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - minimatch@6.2.0: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 minimist@1.2.8: {} - minipass@7.1.2: {} - - motion-dom@12.4.10: + motion-dom@12.7.3: dependencies: - motion-utils: 12.4.10 + motion-utils: 12.7.2 - motion-utils@12.4.10: {} + motion-utils@12.7.2: {} ms@2.1.3: {} - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 + nanoid@3.3.11: {} - nanoid@3.3.8: {} - - nanoid@5.1.2: {} + nanoid@5.1.5: {} natural-compare@1.4.0: {} - nimma@0.2.3: + negotiator@1.0.0: {} + + next-intl@4.0.2(next@15.2.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(typescript@5.8.2): dependencies: - '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) - '@jsep-plugin/ternary': 1.1.4(jsep@1.4.0) - astring: 1.9.0 - jsep: 1.4.0 + "@formatjs/intl-localematcher": 0.5.10 + negotiator: 1.0.0 + next: 15.2.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + use-intl: 4.0.2(react@19.1.0) optionalDependencies: - jsonpath-plus: 10.2.0 - lodash.topath: 4.5.2 + typescript: 5.8.2 - node-fetch-h2@2.3.0: + next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - http2-client: 1.3.5 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) - node-fetch@2.7.0: + next@15.2.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - whatwg-url: 5.0.0 + "@next/env": 15.2.4 + "@swc/counter": 0.1.3 + "@swc/helpers": 0.5.15 + busboy: 1.6.0 + caniuse-lite: 1.0.30001714 + postcss: 8.4.31 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + styled-jsx: 5.1.6(react@19.1.0) + optionalDependencies: + "@next/swc-darwin-arm64": 15.2.4 + "@next/swc-darwin-x64": 15.2.4 + "@next/swc-linux-arm64-gnu": 15.2.4 + "@next/swc-linux-arm64-musl": 15.2.4 + "@next/swc-linux-x64-gnu": 15.2.4 + "@next/swc-linux-x64-musl": 15.2.4 + "@next/swc-win32-arm64-msvc": 15.2.4 + "@next/swc-win32-x64-msvc": 15.2.4 + sharp: 0.33.5 + transitivePeerDependencies: + - "@babel/core" + - babel-plugin-macros - node-readfiles@0.2.0: + nookies@2.5.2: dependencies: - es6-promise: 3.3.1 - - node-releases@2.0.19: {} - - normalize-path@3.0.0: {} - - normalize-range@0.1.2: {} - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - - oas-kit-common@1.0.8: - dependencies: - fast-safe-stringify: 2.1.1 - - oas-linter@3.2.2: - dependencies: - '@exodus/schemasafe': 1.3.0 - should: 13.2.3 - yaml: 1.10.2 - - oas-resolver@2.5.6: - dependencies: - node-fetch-h2: 2.3.0 - oas-kit-common: 1.0.8 - reftools: 1.1.9 - yaml: 1.10.2 - yargs: 17.7.2 - - oas-schema-walker@1.1.5: {} - - oas-validator@5.0.8: - dependencies: - call-me-maybe: 1.0.2 - oas-kit-common: 1.0.8 - oas-linter: 3.2.2 - oas-resolver: 2.5.6 - oas-schema-walker: 1.1.5 - reftools: 1.1.9 - should: 13.2.3 - yaml: 1.10.2 + cookie: 0.4.2 + set-cookie-parser: 2.7.1 object-assign@4.1.1: {} - object-hash@3.0.0: {} - object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -8273,9 +5121,10 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - object.entries@1.1.8: + object.entries@1.1.9: dependencies: call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -8299,24 +5148,6 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - openapi-types@12.1.3: {} - - openapi3-ts@4.2.2: - dependencies: - yaml: 2.7.0 - - openapi3-ts@4.4.0: - dependencies: - yaml: 2.7.0 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -8326,38 +5157,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - orval@7.6.0(openapi-types@12.1.3): - dependencies: - '@apidevtools/swagger-parser': 10.1.1(openapi-types@12.1.3) - '@orval/angular': 7.6.0(openapi-types@12.1.3) - '@orval/axios': 7.6.0(openapi-types@12.1.3) - '@orval/core': 7.6.0(openapi-types@12.1.3) - '@orval/fetch': 7.6.0(openapi-types@12.1.3) - '@orval/hono': 7.6.0(openapi-types@12.1.3) - '@orval/mock': 7.6.0(openapi-types@12.1.3) - '@orval/query': 7.6.0(openapi-types@12.1.3) - '@orval/swr': 7.6.0(openapi-types@12.1.3) - '@orval/zod': 7.6.0(openapi-types@12.1.3) - ajv: 8.17.1 - cac: 6.7.14 - chalk: 4.1.2 - chokidar: 4.0.3 - enquirer: 2.4.1 - execa: 5.1.1 - find-up: 5.0.0 - fs-extra: 11.3.0 - lodash.uniq: 4.5.0 - openapi3-ts: 4.2.2 - string-argv: 0.3.2 - tsconfck: 2.1.2(typescript@5.7.3) - typedoc: 0.27.9(typescript@5.7.3) - typedoc-plugin-markdown: 4.4.2(typedoc@0.27.9(typescript@5.7.3)) - typescript: 5.7.3 - transitivePeerDependencies: - - encoding - - openapi-types - - supports-color - own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -8372,79 +5171,33 @@ snapshots: dependencies: p-limit: 3.1.0 - package-json-from-dist@1.0.1: {} - parent-module@1.0.1: dependencies: callsites: 3.1.0 path-exists@4.0.0: {} - path-is-absolute@1.0.1: {} - path-key@3.1.1: {} path-parse@1.0.7: {} - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-type@4.0.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} - pify@2.3.0: {} - - pirates@4.0.6: {} - - pony-cause@1.1.1: {} + picomatch@4.0.2: {} possible-typed-array-names@1.1.0: {} - postcss-import@15.1.0(postcss@8.5.1): + postcss@8.4.31: dependencies: - postcss: 8.5.1 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.10 - - postcss-js@4.0.1(postcss@8.5.1): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.5.1 - - postcss-load-config@4.0.2(postcss@8.5.1): - dependencies: - lilconfig: 3.1.3 - yaml: 2.7.0 - optionalDependencies: - postcss: 8.5.1 - - postcss-nested@6.2.0(postcss@8.5.1): - dependencies: - postcss: 8.5.1 - postcss-selector-parser: 6.1.2 - - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-value-parser@4.2.0: {} - - postcss@8.5.1: - dependencies: - nanoid: 3.3.8 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 postcss@8.5.3: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -8454,7 +5207,11 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.4.2: {} + prettier-plugin-sort-json@4.1.1(prettier@3.5.3): + dependencies: + prettier: 3.5.3 + + prettier@3.5.3: {} prop-types@15.8.1: dependencies: @@ -8464,77 +5221,53 @@ snapshots: proxy-from-env@1.1.0: {} - punycode.js@2.3.1: {} - punycode@2.3.1: {} queue-microtask@1.2.3: {} - react-country-flag@3.1.0(react@18.3.1): + react-country-flag@3.1.0(react@19.1.0): dependencies: - react: 18.3.1 + react: 19.1.0 - react-dom@18.3.1(react@18.3.1): + react-dom@19.1.0(react@19.1.0): dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 + react: 19.1.0 + scheduler: 0.26.0 - react-hook-form@7.54.2(react@18.3.1): + react-hook-form@7.55.0(react@19.1.0): dependencies: - react: 18.3.1 - - react-i18next@15.4.1(i18next@24.2.2(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): - dependencies: - '@babel/runtime': 7.26.9 - html-parse-stringify: 3.0.1 - i18next: 24.2.2(typescript@5.7.3) - react: 18.3.1 - optionalDependencies: - react-dom: 18.3.1(react@18.3.1) - - react-icons@5.5.0(react@18.3.1): - dependencies: - react: 18.3.1 + react: 19.1.0 react-is@16.13.1: {} - react-refresh@0.14.2: {} - - react-router-dom@6.23.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-remove-scroll-bar@2.3.8(@types/react@19.1.0)(react@19.1.0): dependencies: - '@remix-run/router': 1.16.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-router: 6.23.0(react@18.3.1) + react: 19.1.0 + react-style-singleton: 2.2.3(@types/react@19.1.0)(react@19.1.0) + tslib: 2.8.1 + optionalDependencies: + "@types/react": 19.1.0 - react-router@6.23.0(react@18.3.1): + react-remove-scroll@2.6.3(@types/react@19.1.0)(react@19.1.0): dependencies: - '@remix-run/router': 1.16.0 - react: 18.3.1 + react: 19.1.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.0)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.0)(react@19.1.0) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.1.0)(react@19.1.0) + use-sidecar: 1.1.3(@types/react@19.1.0)(react@19.1.0) + optionalDependencies: + "@types/react": 19.1.0 - react-textarea-autosize@8.5.7(@types/react@18.3.3)(react@18.3.1): + react-style-singleton@2.2.3(@types/react@19.1.0)(react@19.1.0): dependencies: - '@babel/runtime': 7.26.9 - react: 18.3.1 - use-composed-ref: 1.4.0(@types/react@18.3.3)(react@18.3.1) - use-latest: 1.3.0(@types/react@18.3.3)(react@18.3.1) - transitivePeerDependencies: - - '@types/react' + get-nonce: 1.0.1 + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + "@types/react": 19.1.0 - react@18.3.1: - dependencies: - loose-envify: 1.4.0 - - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - readdirp@4.1.2: {} + react@19.1.0: {} reflect.getprototypeof@1.0.10: dependencies: @@ -8547,10 +5280,6 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - reftools@1.1.9: {} - - regenerator-runtime@0.14.1: {} - regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -8560,14 +5289,10 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 - regexpp@3.2.0: {} - - require-directory@2.1.1: {} - - require-from-string@2.0.2: {} - resolve-from@4.0.0: {} + resolve-pkg-maps@1.0.0: {} + resolve@1.22.10: dependencies: is-core-module: 2.16.1 @@ -8582,35 +5307,6 @@ snapshots: reusify@1.1.0: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - rollup@4.34.9: - dependencies: - '@types/estree': 1.0.6 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.9 - '@rollup/rollup-android-arm64': 4.34.9 - '@rollup/rollup-darwin-arm64': 4.34.9 - '@rollup/rollup-darwin-x64': 4.34.9 - '@rollup/rollup-freebsd-arm64': 4.34.9 - '@rollup/rollup-freebsd-x64': 4.34.9 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.9 - '@rollup/rollup-linux-arm-musleabihf': 4.34.9 - '@rollup/rollup-linux-arm64-gnu': 4.34.9 - '@rollup/rollup-linux-arm64-musl': 4.34.9 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.9 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.9 - '@rollup/rollup-linux-riscv64-gnu': 4.34.9 - '@rollup/rollup-linux-s390x-gnu': 4.34.9 - '@rollup/rollup-linux-x64-gnu': 4.34.9 - '@rollup/rollup-linux-x64-musl': 4.34.9 - '@rollup/rollup-win32-arm64-msvc': 4.34.9 - '@rollup/rollup-win32-ia32-msvc': 4.34.9 - '@rollup/rollup-win32-x64-msvc': 4.34.9 - fsevents: 2.3.3 - run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -8634,16 +5330,14 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 - safe-stable-stringify@1.1.1: {} - - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 + scheduler@0.26.0: {} semver@6.3.1: {} semver@7.7.1: {} + set-cookie-parser@2.7.1: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -8666,38 +5360,39 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.7.1 + optionalDependencies: + "@img/sharp-darwin-arm64": 0.33.5 + "@img/sharp-darwin-x64": 0.33.5 + "@img/sharp-libvips-darwin-arm64": 1.0.4 + "@img/sharp-libvips-darwin-x64": 1.0.4 + "@img/sharp-libvips-linux-arm": 1.0.5 + "@img/sharp-libvips-linux-arm64": 1.0.4 + "@img/sharp-libvips-linux-s390x": 1.0.4 + "@img/sharp-libvips-linux-x64": 1.0.4 + "@img/sharp-libvips-linuxmusl-arm64": 1.0.4 + "@img/sharp-libvips-linuxmusl-x64": 1.0.4 + "@img/sharp-linux-arm": 0.33.5 + "@img/sharp-linux-arm64": 0.33.5 + "@img/sharp-linux-s390x": 0.33.5 + "@img/sharp-linux-x64": 0.33.5 + "@img/sharp-linuxmusl-arm64": 0.33.5 + "@img/sharp-linuxmusl-x64": 0.33.5 + "@img/sharp-wasm32": 0.33.5 + "@img/sharp-win32-ia32": 0.33.5 + "@img/sharp-win32-x64": 0.33.5 + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} - should-equal@2.0.0: - dependencies: - should-type: 1.4.0 - - should-format@3.0.3: - dependencies: - should-type: 1.4.0 - should-type-adaptors: 1.1.0 - - should-type-adaptors@1.1.0: - dependencies: - should-type: 1.4.0 - should-util: 1.0.1 - - should-type@1.4.0: {} - - should-util@1.0.1: {} - - should@13.2.3: - dependencies: - should-equal: 2.0.0 - should-format: 3.0.3 - should-type: 1.4.0 - should-type-adaptors: 1.1.0 - should-util: 1.0.1 - side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -8726,40 +5421,21 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-eval@1.0.1: - dependencies: - jsep: 1.4.0 - simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 + optional: true - slash@3.0.0: {} - - sonner@1.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + sonner@2.0.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) source-map-js@1.2.1: {} - string-argv@0.3.2: {} + stable-hash@0.0.5: {} - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + streamsearch@1.1.0: {} string.prototype.includes@2.0.1: dependencies: @@ -8811,29 +5487,14 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.1.0 - strip-bom@3.0.0: {} - strip-final-newline@2.0.0: {} - strip-json-comments@3.1.1: {} - sucrase@3.35.0: + styled-jsx@5.1.6(react@19.1.0): dependencies: - '@jridgewell/gen-mapping': 0.3.8 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 + client-only: 0.0.1 + react: 19.1.0 supports-color@7.2.0: dependencies: @@ -8841,117 +5502,45 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - swagger2openapi@7.0.8: + synckit@0.11.4: dependencies: - call-me-maybe: 1.0.2 - node-fetch: 2.7.0 - node-fetch-h2: 2.3.0 - node-readfiles: 0.2.0 - oas-kit-common: 1.0.8 - oas-resolver: 2.5.6 - oas-schema-walker: 1.1.5 - oas-validator: 5.0.8 - reftools: 1.1.9 - yaml: 1.10.2 - yargs: 17.7.2 - transitivePeerDependencies: - - encoding - - synckit@0.9.2: - dependencies: - '@pkgr/core': 0.1.1 + "@pkgr/core": 0.2.4 tslib: 2.8.1 - tailwind-merge@1.14.0: {} + tailwind-merge@3.2.0: {} - tailwind-merge@2.5.4: {} + tailwindcss@4.1.2: {} - tailwind-merge@2.6.0: {} + tapable@2.2.1: {} - tailwind-variants@0.1.20(tailwindcss@3.4.16): + tinyglobby@0.2.12: dependencies: - tailwind-merge: 1.14.0 - tailwindcss: 3.4.16 - - tailwind-variants@0.3.1(tailwindcss@3.4.16): - dependencies: - tailwind-merge: 2.5.4 - tailwindcss: 3.4.16 - - tailwindcss@3.4.16: - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.3 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.7 - lilconfig: 3.1.3 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.5.1 - postcss-import: 15.1.0(postcss@8.5.1) - postcss-js: 4.0.1(postcss@8.5.1) - postcss-load-config: 4.0.2(postcss@8.5.1) - postcss-nested: 6.2.0(postcss@8.5.1) - postcss-selector-parser: 6.1.2 - resolve: 1.22.10 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node - - text-table@0.2.0: {} - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - tr46@0.0.3: {} - - ts-api-utils@2.0.1(typescript@5.7.3): + ts-api-utils@2.1.0(typescript@5.8.2): dependencies: - typescript: 5.7.3 - - ts-interface-checker@0.1.13: {} - - tsconfck@2.1.2(typescript@5.7.3): - optionalDependencies: - typescript: 5.7.3 - - tsconfck@3.1.5(typescript@5.7.3): - optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 tsconfig-paths@3.15.0: dependencies: - '@types/json5': 0.0.29 + "@types/json5": 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - tslib@1.14.1: {} - tslib@2.8.1: {} + tw-animate-css@1.2.5: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - type-fest@0.20.2: {} - typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -8985,22 +5574,7 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typedoc-plugin-markdown@4.4.2(typedoc@0.27.9(typescript@5.7.3)): - dependencies: - typedoc: 0.27.9(typescript@5.7.3) - - typedoc@0.27.9(typescript@5.7.3): - dependencies: - '@gerrit0/mini-shiki': 1.27.2 - lunr: 2.3.9 - markdown-it: 14.1.0 - minimatch: 9.0.5 - typescript: 5.7.3 - yaml: 2.7.0 - - typescript@5.7.3: {} - - uc.micro@2.1.0: {} + typescript@5.8.2: {} unbox-primitive@1.1.0: dependencies: @@ -9009,77 +5583,52 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@6.20.0: {} + undici-types@6.21.0: {} - universalify@2.0.1: {} - - update-browserslist-db@1.1.3(browserslist@4.24.4): - dependencies: - browserslist: 4.24.4 - escalade: 3.2.0 - picocolors: 1.1.1 + unrs-resolver@1.5.0: + optionalDependencies: + "@unrs/resolver-binding-darwin-arm64": 1.5.0 + "@unrs/resolver-binding-darwin-x64": 1.5.0 + "@unrs/resolver-binding-freebsd-x64": 1.5.0 + "@unrs/resolver-binding-linux-arm-gnueabihf": 1.5.0 + "@unrs/resolver-binding-linux-arm-musleabihf": 1.5.0 + "@unrs/resolver-binding-linux-arm64-gnu": 1.5.0 + "@unrs/resolver-binding-linux-arm64-musl": 1.5.0 + "@unrs/resolver-binding-linux-ppc64-gnu": 1.5.0 + "@unrs/resolver-binding-linux-riscv64-gnu": 1.5.0 + "@unrs/resolver-binding-linux-s390x-gnu": 1.5.0 + "@unrs/resolver-binding-linux-x64-gnu": 1.5.0 + "@unrs/resolver-binding-linux-x64-musl": 1.5.0 + "@unrs/resolver-binding-wasm32-wasi": 1.5.0 + "@unrs/resolver-binding-win32-arm64-msvc": 1.5.0 + "@unrs/resolver-binding-win32-ia32-msvc": 1.5.0 + "@unrs/resolver-binding-win32-x64-msvc": 1.5.0 uri-js@4.4.1: dependencies: punycode: 2.3.1 - urijs@1.19.11: {} - - use-composed-ref@1.4.0(@types/react@18.3.3)(react@18.3.1): + use-callback-ref@1.3.3(@types/react@19.1.0)(react@19.1.0): dependencies: - react: 18.3.1 + react: 19.1.0 + tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.3 + "@types/react": 19.1.0 - use-isomorphic-layout-effect@1.2.0(@types/react@18.3.3)(react@18.3.1): + use-intl@4.0.2(react@19.1.0): dependencies: - react: 18.3.1 + "@formatjs/fast-memoize": 2.2.7 + "@schummar/icu-type-parser": 1.21.5 + intl-messageformat: 10.7.16 + react: 19.1.0 + + use-sidecar@1.1.3(@types/react@19.1.0)(react@19.1.0): + dependencies: + detect-node-es: 1.1.0 + react: 19.1.0 + tslib: 2.8.1 optionalDependencies: - '@types/react': 18.3.3 - - use-latest@1.3.0(@types/react@18.3.3)(react@18.3.1): - dependencies: - react: 18.3.1 - use-isomorphic-layout-effect: 1.2.0(@types/react@18.3.3)(react@18.3.1) - optionalDependencies: - '@types/react': 18.3.3 - - util-deprecate@1.0.2: {} - - utility-types@3.11.0: {} - - validator@13.12.0: {} - - vite-tsconfig-paths@4.3.2(typescript@5.7.3)(vite@6.2.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0)): - dependencies: - debug: 4.4.0 - globrex: 0.1.2 - tsconfck: 3.1.5(typescript@5.7.3) - optionalDependencies: - vite: 6.2.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0) - transitivePeerDependencies: - - supports-color - - typescript - - vite@6.2.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0): - dependencies: - esbuild: 0.25.0 - postcss: 8.5.3 - rollup: 4.34.9 - optionalDependencies: - '@types/node': 22.13.1 - fsevents: 2.3.3 - jiti: 1.21.7 - yaml: 2.7.0 - - void-elements@3.1.0: {} - - webidl-conversions@3.0.1: {} - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 + "@types/react": 19.1.0 which-boxed-primitive@1.1.1: dependencies: @@ -9103,7 +5652,7 @@ snapshots: isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 which-collection@1.0.2: dependencies: @@ -9112,12 +5661,13 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-typed-array@1.1.18: + which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 call-bound: 1.0.4 for-each: 0.3.5 + get-proto: 1.0.1 gopd: 1.2.0 has-tostringtag: 1.0.2 @@ -9127,40 +5677,11 @@ snapshots: word-wrap@1.2.5: {} - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - - wrappy@1.0.2: {} - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yaml@1.10.2: {} - - yaml@2.7.0: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - yocto-queue@0.1.0: {} zod@3.24.2: {} + + zustand@5.0.3(@types/react@19.1.0)(react@19.1.0): + optionalDependencies: + "@types/react": 19.1.0 + react: 19.1.0 diff --git a/apps/web/postcss.config.js b/apps/web/postcss.config.js deleted file mode 100644 index 2aa7205..0000000 --- a/apps/web/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/apps/web/postcss.config.mjs b/apps/web/postcss.config.mjs new file mode 100644 index 0000000..c7bcb4b --- /dev/null +++ b/apps/web/postcss.config.mjs @@ -0,0 +1,5 @@ +const config = { + plugins: ["@tailwindcss/postcss"], +}; + +export default config; diff --git a/apps/web/routes.json b/apps/web/routes.json deleted file mode 100644 index ca9ef55..0000000 --- a/apps/web/routes.json +++ /dev/null @@ -1 +0,0 @@ -{"openapi":"3.0.3","info":{"title":"๐ŸŒด Palmr. API","description":"API documentation for Palmr file sharing system","version":"1.0.0"},"components":{"schemas":{"def-0":{"type":"string","format":"date-time","title":"dateFormat"}}},"paths":{"/auth/login":{"post":{"operationId":"login","summary":"Login","tags":["Authentication"],"description":"Performs login and returns user data","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"User email"},"password":{"type":"string","minLength":8,"description":"User password"}},"required":["email","password"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","description":"User ID"},"firstName":{"type":"string","description":"User first name"},"lastName":{"type":"string","description":"User last name"},"username":{"type":"string","description":"User username"},"email":{"type":"string","format":"email","description":"User email"},"isAdmin":{"type":"boolean","description":"User is admin"},"isActive":{"type":"boolean","description":"User is active"},"createdAt":{"type":"string","format":"date-time","description":"User creation date"},"updatedAt":{"type":"string","format":"date-time","description":"User last update date"}},"required":["id","firstName","lastName","username","email","isAdmin","isActive","createdAt","updatedAt"],"additionalProperties":false}},"required":["user"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/auth/logout":{"post":{"operationId":"logout","summary":"Logout","tags":["Authentication"],"description":"Performs logout by clearing the token cookie","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Logout message"}},"required":["message"],"additionalProperties":false}}}}}}},"/auth/forgot-password":{"post":{"operationId":"requestPasswordReset","summary":"Request Password Reset","tags":["Authentication"],"description":"Request password reset email","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"User email"}},"required":["email"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Reset password email sent"}},"required":["message"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/auth/reset-password":{"post":{"operationId":"resetPassword","summary":"Reset Password","tags":["Authentication"],"description":"Reset password using token","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","minLength":1,"description":"Reset password token"},"password":{"type":"string","minLength":8,"description":"User password"}},"required":["token","password"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Reset password message"}},"required":["message"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/auth/me":{"get":{"operationId":"getCurrentUser","summary":"Get Current User","tags":["Authentication"],"description":"Returns the current authenticated user's information","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","description":"User ID"},"firstName":{"type":"string","description":"User first name"},"lastName":{"type":"string","description":"User last name"},"username":{"type":"string","description":"User username"},"email":{"type":"string","format":"email","description":"User email"},"image":{"type":"string","nullable":true,"description":"User profile image URL"},"isAdmin":{"type":"boolean","description":"User is admin"},"isActive":{"type":"boolean","description":"User is active"},"createdAt":{"type":"string","format":"date-time","description":"User creation date"},"updatedAt":{"type":"string","format":"date-time","description":"User last update date"}},"required":["id","firstName","lastName","username","email","image","isAdmin","isActive","createdAt","updatedAt"],"additionalProperties":false}},"required":["user"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/auth/register":{"post":{"operationId":"registerUser","summary":"Register New User","tags":["User"],"description":"Register a new user (admin only)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"firstName":{"type":"string","minLength":1,"description":"User first name"},"lastName":{"type":"string","minLength":1,"description":"User last name"},"username":{"type":"string","minLength":3,"description":"User username"},"email":{"type":"string","format":"email","description":"User email"},"image":{"type":"string","description":"User profile image URL"},"password":{"type":"string","minLength":8,"description":"User password"}},"required":["firstName","lastName","username","email","password"],"additionalProperties":false}}},"required":true},"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","description":"User ID"},"firstName":{"type":"string","description":"User first name"},"lastName":{"type":"string","description":"User last name"},"username":{"type":"string","description":"User username"},"email":{"type":"string","format":"email","description":"User email"},"image":{"type":"string","nullable":true,"description":"User profile image URL"},"isAdmin":{"type":"boolean","description":"User is admin"},"isActive":{"type":"boolean","description":"User is active"},"createdAt":{"type":"string","format":"date-time","description":"User creation date"},"updatedAt":{"type":"string","format":"date-time","description":"User last update date"}},"required":["id","firstName","lastName","username","email","image","isAdmin","isActive","createdAt","updatedAt"],"additionalProperties":false},"message":{"type":"string","description":"User registration message"}},"required":["user","message"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/users":{"get":{"operationId":"listUsers","summary":"List All Users","tags":["User"],"description":"List all users (admin only)","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"User ID"},"firstName":{"type":"string","description":"User first name"},"lastName":{"type":"string","description":"User last name"},"username":{"type":"string","description":"User username"},"email":{"type":"string","format":"email","description":"User email"},"image":{"type":"string","nullable":true,"description":"User profile image URL"},"isAdmin":{"type":"boolean","description":"User is admin"},"isActive":{"type":"boolean","description":"User is active"},"createdAt":{"type":"string","format":"date-time","description":"User creation date"},"updatedAt":{"type":"string","format":"date-time","description":"User last update date"}},"required":["id","firstName","lastName","username","email","image","isAdmin","isActive","createdAt","updatedAt"],"additionalProperties":false}}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}},"put":{"operationId":"updateUser","summary":"Update User Data","tags":["User"],"description":"Update user data (admin only)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string","minLength":1},"lastName":{"type":"string","minLength":1},"username":{"type":"string","minLength":3},"email":{"type":"string","format":"email"},"image":{"type":"string"},"password":{"type":"string","minLength":8,"description":"User password"},"isAdmin":{"type":"boolean"}},"required":["id"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"User ID"},"firstName":{"type":"string","description":"User first name"},"lastName":{"type":"string","description":"User last name"},"username":{"type":"string","description":"User username"},"email":{"type":"string","format":"email","description":"User email"},"image":{"type":"string","nullable":true,"description":"User profile image URL"},"isAdmin":{"type":"boolean","description":"User is admin"},"isActive":{"type":"boolean","description":"User is active"},"createdAt":{"type":"string","format":"date-time","description":"User creation date"},"updatedAt":{"type":"string","format":"date-time","description":"User last update date"}},"required":["id","firstName","lastName","username","email","image","isAdmin","isActive","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/users/{id}":{"get":{"operationId":"getUserById","summary":"Get User by ID","tags":["User"],"description":"Get a user by ID (admin only)","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true,"description":"User ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"User ID"},"firstName":{"type":"string","description":"User first name"},"lastName":{"type":"string","description":"User last name"},"username":{"type":"string","description":"User username"},"email":{"type":"string","format":"email","description":"User email"},"image":{"type":"string","nullable":true,"description":"User profile image URL"},"isAdmin":{"type":"boolean","description":"User is admin"},"isActive":{"type":"boolean","description":"User is active"},"createdAt":{"type":"string","format":"date-time","description":"User creation date"},"updatedAt":{"type":"string","format":"date-time","description":"User last update date"}},"required":["id","firstName","lastName","username","email","image","isAdmin","isActive","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"operationId":"deleteUser","summary":"Delete User","tags":["User"],"description":"Delete a user (admin only)","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true,"description":"User ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"User ID"},"firstName":{"type":"string","description":"User first name"},"lastName":{"type":"string","description":"User last name"},"username":{"type":"string","description":"User username"},"email":{"type":"string","format":"email","description":"User email"},"image":{"type":"string","nullable":true,"description":"User profile image URL"},"isAdmin":{"type":"boolean","description":"User is admin"},"isActive":{"type":"boolean","description":"User is active"},"createdAt":{"type":"string","format":"date-time","description":"User creation date"},"updatedAt":{"type":"string","format":"date-time","description":"User last update date"}},"required":["id","firstName","lastName","username","email","image","isAdmin","isActive","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/users/{id}/activate":{"patch":{"operationId":"activateUser","summary":"Activate User","tags":["User"],"description":"Activate a user (admin only)","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true,"description":"User ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"User ID"},"firstName":{"type":"string","description":"User first name"},"lastName":{"type":"string","description":"User last name"},"username":{"type":"string","description":"User username"},"email":{"type":"string","format":"email","description":"User email"},"image":{"type":"string","nullable":true,"description":"User profile image URL"},"isAdmin":{"type":"boolean","description":"User is admin"},"isActive":{"type":"boolean","description":"User is active"},"createdAt":{"type":"string","format":"date-time","description":"User creation date"},"updatedAt":{"type":"string","format":"date-time","description":"User last update date"}},"required":["id","firstName","lastName","username","email","image","isAdmin","isActive","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/users/{id}/deactivate":{"patch":{"operationId":"deactivateUser","summary":"Deactivate User","tags":["User"],"description":"Deactivate a user (admin only)","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true,"description":"User ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"User ID"},"firstName":{"type":"string","description":"User first name"},"lastName":{"type":"string","description":"User last name"},"username":{"type":"string","description":"User username"},"email":{"type":"string","format":"email","description":"User email"},"image":{"type":"string","nullable":true,"description":"User profile image URL"},"isAdmin":{"type":"boolean","description":"User is admin"},"isActive":{"type":"boolean","description":"User is active"},"createdAt":{"type":"string","format":"date-time","description":"User creation date"},"updatedAt":{"type":"string","format":"date-time","description":"User last update date"}},"required":["id","firstName","lastName","username","email","image","isAdmin","isActive","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/users/{id}/image":{"patch":{"operationId":"updateUserImage","summary":"Update User Image","tags":["User"],"description":"Update user profile image (admin only)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"image":{"type":"string","format":"uri","description":"User profile image URL"}},"required":["image"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true,"description":"User ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"User ID"},"firstName":{"type":"string","description":"User first name"},"lastName":{"type":"string","description":"User last name"},"username":{"type":"string","description":"User username"},"email":{"type":"string","format":"email","description":"User email"},"image":{"type":"string","nullable":true,"description":"User profile image URL"},"isAdmin":{"type":"boolean","description":"User is admin"},"isActive":{"type":"boolean","description":"User is active"},"createdAt":{"type":"string","format":"date-time","description":"User creation date"},"updatedAt":{"type":"string","format":"date-time","description":"User last update date"}},"required":["id","firstName","lastName","username","email","image","isAdmin","isActive","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/users/avatar":{"post":{"operationId":"uploadAvatar","summary":"Upload user avatar","tags":["User"],"description":"Upload and update user profile image","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"description":"Image file (JPG, PNG, GIF)"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"username":{"type":"string"},"email":{"type":"string"},"image":{"type":"string","nullable":true},"isAdmin":{"type":"boolean"},"isActive":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","firstName","lastName","username","email","image","isAdmin","isActive","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"operationId":"removeAvatar","summary":"Remove user avatar","tags":["User"],"description":"Remove user profile image","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"username":{"type":"string"},"email":{"type":"string"},"image":{"type":"string","nullable":true},"isAdmin":{"type":"boolean"},"isActive":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","firstName","lastName","username","email","image","isAdmin","isActive","createdAt","updatedAt"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/files/presigned-url":{"get":{"operationId":"getPresignedUrl","summary":"Get Presigned URL","tags":["File"],"description":"Generates a pre-signed URL for direct upload to MinIO","parameters":[{"schema":{"type":"string","minLength":1},"in":"query","name":"filename","required":true,"description":"The filename of the file"},{"schema":{"type":"string","minLength":1},"in":"query","name":"extension","required":true,"description":"The extension of the file"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"The pre-signed URL"},"objectName":{"type":"string","description":"The object name of the file"}},"required":["url","objectName"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/files":{"post":{"operationId":"registerFile","summary":"Register File Metadata","tags":["File"],"description":"Registers file metadata in the database","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"extension":{"type":"string","minLength":1},"size":{"type":"number"},"objectName":{"type":"string","minLength":1}},"required":["name","extension","size","objectName"],"additionalProperties":false}}},"required":true},"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"file":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The object name of the file"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","format":"date-time","description":"The file creation date"},"updatedAt":{"type":"string","format":"date-time","description":"The file last update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false},"message":{"type":"string","description":"The file registration message"}},"required":["file","message"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}},"get":{"operationId":"listFiles","summary":"List Files","tags":["File"],"description":"Lists user files","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The object name of the file"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","format":"date-time","description":"The file creation date"},"updatedAt":{"type":"string","format":"date-time","description":"The file last update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false}}},"required":["files"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/files/{objectName}/download":{"get":{"operationId":"getDownloadUrl","summary":"Get Download URL","tags":["File"],"description":"Generates a pre-signed URL for downloading a private file","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"objectName","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"The download URL"},"expiresIn":{"type":"number","description":"The expiration time in seconds"}},"required":["url","expiresIn"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/files/{id}":{"delete":{"operationId":"deleteFile","summary":"Delete File","tags":["File"],"description":"Deletes a user file","parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true,"description":"The file ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"The file deletion message"}},"required":["message"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}},"patch":{"operationId":"updateFile","summary":"Update File Metadata","tags":["File"],"description":"Updates file metadata in the database","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1},"in":"path","name":"id","required":true,"description":"The file ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"file":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The object name of the file"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","format":"date-time","description":"The file creation date"},"updatedAt":{"type":"string","format":"date-time","description":"The file last update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false},"message":{"type":"string","description":"Success message"}},"required":["file","message"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/shares":{"post":{"operationId":"createShare","summary":"Create a new share","tags":["Share"],"description":"Create a new share","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The share name"},"description":{"type":"string","description":"The share description"},"expiration":{"type":"string","format":"date-time"},"files":{"type":"array","items":{"type":"string"},"description":"The file IDs"},"password":{"type":"string","description":"The share password"},"maxViews":{"type":"number","nullable":true,"description":"The maximum number of views"},"recipients":{"type":"array","items":{"type":"string","format":"email"},"description":"The recipient emails"}},"required":["files"],"additionalProperties":false}}},"required":true},"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"share":{"type":"object","properties":{"id":{"type":"string","description":"The share ID"},"name":{"type":"string","nullable":true,"description":"The share name"},"description":{"type":"string","nullable":true,"description":"The share description"},"expiration":{"type":"string","nullable":true,"description":"The share expiration date"},"views":{"type":"number","description":"The number of views"},"createdAt":{"type":"string","description":"The share creation date"},"updatedAt":{"type":"string","description":"The share update date"},"creatorId":{"type":"string","description":"The creator ID"},"security":{"type":"object","properties":{"maxViews":{"type":"number","nullable":true,"description":"The maximum number of views"},"hasPassword":{"type":"boolean","description":"Whether the share has a password"}},"required":["maxViews","hasPassword"],"additionalProperties":false},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The file object name"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","description":"The file creation date"},"updatedAt":{"type":"string","description":"The file update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false}},"recipients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The recipient ID"},"email":{"type":"string","format":"email","description":"The recipient email"},"createdAt":{"type":"string","description":"The recipient creation date"},"updatedAt":{"type":"string","description":"The recipient update date"}},"required":["id","email","createdAt","updatedAt"],"additionalProperties":false}},"alias":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"shareId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","alias","shareId","createdAt","updatedAt"],"additionalProperties":false,"nullable":true}},"required":["id","name","description","expiration","views","createdAt","updatedAt","creatorId","security","files","recipients","alias"],"additionalProperties":false}},"required":["share"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}},"put":{"operationId":"updateShare","summary":"Update a share","tags":["Share"],"description":"Update a share","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"expiration":{"type":"string","format":"date-time"},"password":{"type":"string"},"maxViews":{"type":"number","nullable":true},"recipients":{"type":"array","items":{"type":"string","format":"email"}}},"required":["id"],"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"share":{"type":"object","properties":{"id":{"type":"string","description":"The share ID"},"name":{"type":"string","nullable":true,"description":"The share name"},"description":{"type":"string","nullable":true,"description":"The share description"},"expiration":{"type":"string","nullable":true,"description":"The share expiration date"},"views":{"type":"number","description":"The number of views"},"createdAt":{"type":"string","description":"The share creation date"},"updatedAt":{"type":"string","description":"The share update date"},"creatorId":{"type":"string","description":"The creator ID"},"security":{"type":"object","properties":{"maxViews":{"type":"number","nullable":true,"description":"The maximum number of views"},"hasPassword":{"type":"boolean","description":"Whether the share has a password"}},"required":["maxViews","hasPassword"],"additionalProperties":false},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The file object name"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","description":"The file creation date"},"updatedAt":{"type":"string","description":"The file update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false}},"recipients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The recipient ID"},"email":{"type":"string","format":"email","description":"The recipient email"},"createdAt":{"type":"string","description":"The recipient creation date"},"updatedAt":{"type":"string","description":"The recipient update date"}},"required":["id","email","createdAt","updatedAt"],"additionalProperties":false}},"alias":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"shareId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","alias","shareId","createdAt","updatedAt"],"additionalProperties":false,"nullable":true}},"required":["id","name","description","expiration","views","createdAt","updatedAt","creatorId","security","files","recipients","alias"],"additionalProperties":false}},"required":["share"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/shares/me":{"get":{"operationId":"listUserShares","summary":"List all shares created by the authenticated user","tags":["Share"],"description":"List all shares created by the authenticated user","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"shares":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The share ID"},"name":{"type":"string","nullable":true,"description":"The share name"},"description":{"type":"string","nullable":true,"description":"The share description"},"expiration":{"type":"string","nullable":true,"description":"The share expiration date"},"views":{"type":"number","description":"The number of views"},"createdAt":{"type":"string","description":"The share creation date"},"updatedAt":{"type":"string","description":"The share update date"},"creatorId":{"type":"string","description":"The creator ID"},"security":{"type":"object","properties":{"maxViews":{"type":"number","nullable":true,"description":"The maximum number of views"},"hasPassword":{"type":"boolean","description":"Whether the share has a password"}},"required":["maxViews","hasPassword"],"additionalProperties":false},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The file object name"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","description":"The file creation date"},"updatedAt":{"type":"string","description":"The file update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false}},"recipients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The recipient ID"},"email":{"type":"string","format":"email","description":"The recipient email"},"createdAt":{"type":"string","description":"The recipient creation date"},"updatedAt":{"type":"string","description":"The recipient update date"}},"required":["id","email","createdAt","updatedAt"],"additionalProperties":false}},"alias":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"shareId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","alias","shareId","createdAt","updatedAt"],"additionalProperties":false,"nullable":true}},"required":["id","name","description","expiration","views","createdAt","updatedAt","creatorId","security","files","recipients","alias"],"additionalProperties":false}}},"required":["shares"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/shares/{shareId}":{"get":{"operationId":"getShare","summary":"Get a share by ID","tags":["Share"],"description":"Get a share by ID","parameters":[{"schema":{"type":"string"},"in":"query","name":"password","required":false,"description":"The share password"},{"schema":{"type":"string"},"in":"path","name":"shareId","required":true,"description":"The share ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"share":{"type":"object","properties":{"id":{"type":"string","description":"The share ID"},"name":{"type":"string","nullable":true,"description":"The share name"},"description":{"type":"string","nullable":true,"description":"The share description"},"expiration":{"type":"string","nullable":true,"description":"The share expiration date"},"views":{"type":"number","description":"The number of views"},"createdAt":{"type":"string","description":"The share creation date"},"updatedAt":{"type":"string","description":"The share update date"},"creatorId":{"type":"string","description":"The creator ID"},"security":{"type":"object","properties":{"maxViews":{"type":"number","nullable":true,"description":"The maximum number of views"},"hasPassword":{"type":"boolean","description":"Whether the share has a password"}},"required":["maxViews","hasPassword"],"additionalProperties":false},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The file object name"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","description":"The file creation date"},"updatedAt":{"type":"string","description":"The file update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false}},"recipients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The recipient ID"},"email":{"type":"string","format":"email","description":"The recipient email"},"createdAt":{"type":"string","description":"The recipient creation date"},"updatedAt":{"type":"string","description":"The recipient update date"}},"required":["id","email","createdAt","updatedAt"],"additionalProperties":false}},"alias":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"shareId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","alias","shareId","createdAt","updatedAt"],"additionalProperties":false,"nullable":true}},"required":["id","name","description","expiration","views","createdAt","updatedAt","creatorId","security","files","recipients","alias"],"additionalProperties":false}},"required":["share"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/shares/{id}":{"delete":{"operationId":"deleteShare","summary":"Delete a share","tags":["Share"],"description":"Delete a share","parameters":[{"schema":{"type":"string"},"in":"path","name":"id","required":true,"description":"The share ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"share":{"type":"object","properties":{"id":{"type":"string","description":"The share ID"},"name":{"type":"string","nullable":true,"description":"The share name"},"description":{"type":"string","nullable":true,"description":"The share description"},"expiration":{"type":"string","nullable":true,"description":"The share expiration date"},"views":{"type":"number","description":"The number of views"},"createdAt":{"type":"string","description":"The share creation date"},"updatedAt":{"type":"string","description":"The share update date"},"creatorId":{"type":"string","description":"The creator ID"},"security":{"type":"object","properties":{"maxViews":{"type":"number","nullable":true,"description":"The maximum number of views"},"hasPassword":{"type":"boolean","description":"Whether the share has a password"}},"required":["maxViews","hasPassword"],"additionalProperties":false},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The file object name"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","description":"The file creation date"},"updatedAt":{"type":"string","description":"The file update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false}},"recipients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The recipient ID"},"email":{"type":"string","format":"email","description":"The recipient email"},"createdAt":{"type":"string","description":"The recipient creation date"},"updatedAt":{"type":"string","description":"The recipient update date"}},"required":["id","email","createdAt","updatedAt"],"additionalProperties":false}},"alias":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"shareId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","alias","shareId","createdAt","updatedAt"],"additionalProperties":false,"nullable":true}},"required":["id","name","description","expiration","views","createdAt","updatedAt","creatorId","security","files","recipients","alias"],"additionalProperties":false}},"required":["share"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/shares/{shareId}/password":{"patch":{"operationId":"updateSharePassword","summary":"Update share password","tags":["Share"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","nullable":true,"description":"The new password. Send null to remove password"}},"required":["password"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"path","name":"shareId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"share":{"type":"object","properties":{"id":{"type":"string","description":"The share ID"},"name":{"type":"string","nullable":true,"description":"The share name"},"description":{"type":"string","nullable":true,"description":"The share description"},"expiration":{"type":"string","nullable":true,"description":"The share expiration date"},"views":{"type":"number","description":"The number of views"},"createdAt":{"type":"string","description":"The share creation date"},"updatedAt":{"type":"string","description":"The share update date"},"creatorId":{"type":"string","description":"The creator ID"},"security":{"type":"object","properties":{"maxViews":{"type":"number","nullable":true,"description":"The maximum number of views"},"hasPassword":{"type":"boolean","description":"Whether the share has a password"}},"required":["maxViews","hasPassword"],"additionalProperties":false},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The file object name"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","description":"The file creation date"},"updatedAt":{"type":"string","description":"The file update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false}},"recipients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The recipient ID"},"email":{"type":"string","format":"email","description":"The recipient email"},"createdAt":{"type":"string","description":"The recipient creation date"},"updatedAt":{"type":"string","description":"The recipient update date"}},"required":["id","email","createdAt","updatedAt"],"additionalProperties":false}},"alias":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"shareId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","alias","shareId","createdAt","updatedAt"],"additionalProperties":false,"nullable":true}},"required":["id","name","description","expiration","views","createdAt","updatedAt","creatorId","security","files","recipients","alias"],"additionalProperties":false}},"required":["share"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/shares/{shareId}/files":{"post":{"operationId":"addFiles","summary":"Add files to share","tags":["Share"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"string","minLength":1,"description":"The file IDs"}}},"required":["files"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"path","name":"shareId","required":true,"description":"The share ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"share":{"type":"object","properties":{"id":{"type":"string","description":"The share ID"},"name":{"type":"string","nullable":true,"description":"The share name"},"description":{"type":"string","nullable":true,"description":"The share description"},"expiration":{"type":"string","nullable":true,"description":"The share expiration date"},"views":{"type":"number","description":"The number of views"},"createdAt":{"type":"string","description":"The share creation date"},"updatedAt":{"type":"string","description":"The share update date"},"creatorId":{"type":"string","description":"The creator ID"},"security":{"type":"object","properties":{"maxViews":{"type":"number","nullable":true,"description":"The maximum number of views"},"hasPassword":{"type":"boolean","description":"Whether the share has a password"}},"required":["maxViews","hasPassword"],"additionalProperties":false},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The file object name"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","description":"The file creation date"},"updatedAt":{"type":"string","description":"The file update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false}},"recipients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The recipient ID"},"email":{"type":"string","format":"email","description":"The recipient email"},"createdAt":{"type":"string","description":"The recipient creation date"},"updatedAt":{"type":"string","description":"The recipient update date"}},"required":["id","email","createdAt","updatedAt"],"additionalProperties":false}},"alias":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"shareId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","alias","shareId","createdAt","updatedAt"],"additionalProperties":false,"nullable":true}},"required":["id","name","description","expiration","views","createdAt","updatedAt","creatorId","security","files","recipients","alias"],"additionalProperties":false}},"required":["share"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"operationId":"removeFiles","summary":"Remove files from share","tags":["Share"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"string","minLength":1,"description":"The file IDs"}}},"required":["files"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"path","name":"shareId","required":true,"description":"The share ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"share":{"type":"object","properties":{"id":{"type":"string","description":"The share ID"},"name":{"type":"string","nullable":true,"description":"The share name"},"description":{"type":"string","nullable":true,"description":"The share description"},"expiration":{"type":"string","nullable":true,"description":"The share expiration date"},"views":{"type":"number","description":"The number of views"},"createdAt":{"type":"string","description":"The share creation date"},"updatedAt":{"type":"string","description":"The share update date"},"creatorId":{"type":"string","description":"The creator ID"},"security":{"type":"object","properties":{"maxViews":{"type":"number","nullable":true,"description":"The maximum number of views"},"hasPassword":{"type":"boolean","description":"Whether the share has a password"}},"required":["maxViews","hasPassword"],"additionalProperties":false},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The file object name"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","description":"The file creation date"},"updatedAt":{"type":"string","description":"The file update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false}},"recipients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The recipient ID"},"email":{"type":"string","format":"email","description":"The recipient email"},"createdAt":{"type":"string","description":"The recipient creation date"},"updatedAt":{"type":"string","description":"The recipient update date"}},"required":["id","email","createdAt","updatedAt"],"additionalProperties":false}},"alias":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"shareId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","alias","shareId","createdAt","updatedAt"],"additionalProperties":false,"nullable":true}},"required":["id","name","description","expiration","views","createdAt","updatedAt","creatorId","security","files","recipients","alias"],"additionalProperties":false}},"required":["share"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/shares/{shareId}/recipients":{"post":{"operationId":"addRecipients","summary":"Add recipients to a share","tags":["Share"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string","format":"email","description":"The recipient emails"}}},"required":["emails"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"path","name":"shareId","required":true,"description":"The share ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"share":{"type":"object","properties":{"id":{"type":"string","description":"The share ID"},"name":{"type":"string","nullable":true,"description":"The share name"},"description":{"type":"string","nullable":true,"description":"The share description"},"expiration":{"type":"string","nullable":true,"description":"The share expiration date"},"views":{"type":"number","description":"The number of views"},"createdAt":{"type":"string","description":"The share creation date"},"updatedAt":{"type":"string","description":"The share update date"},"creatorId":{"type":"string","description":"The creator ID"},"security":{"type":"object","properties":{"maxViews":{"type":"number","nullable":true,"description":"The maximum number of views"},"hasPassword":{"type":"boolean","description":"Whether the share has a password"}},"required":["maxViews","hasPassword"],"additionalProperties":false},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The file object name"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","description":"The file creation date"},"updatedAt":{"type":"string","description":"The file update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false}},"recipients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The recipient ID"},"email":{"type":"string","format":"email","description":"The recipient email"},"createdAt":{"type":"string","description":"The recipient creation date"},"updatedAt":{"type":"string","description":"The recipient update date"}},"required":["id","email","createdAt","updatedAt"],"additionalProperties":false}},"alias":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"shareId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","alias","shareId","createdAt","updatedAt"],"additionalProperties":false,"nullable":true}},"required":["id","name","description","expiration","views","createdAt","updatedAt","creatorId","security","files","recipients","alias"],"additionalProperties":false}},"required":["share"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"operationId":"removeRecipients","summary":"Remove recipients from a share","tags":["Share"],"description":"Remove recipients from a share","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string","format":"email","description":"The recipient emails"}}},"required":["emails"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"path","name":"shareId","required":true,"description":"The share ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"share":{"type":"object","properties":{"id":{"type":"string","description":"The share ID"},"name":{"type":"string","nullable":true,"description":"The share name"},"description":{"type":"string","nullable":true,"description":"The share description"},"expiration":{"type":"string","nullable":true,"description":"The share expiration date"},"views":{"type":"number","description":"The number of views"},"createdAt":{"type":"string","description":"The share creation date"},"updatedAt":{"type":"string","description":"The share update date"},"creatorId":{"type":"string","description":"The creator ID"},"security":{"type":"object","properties":{"maxViews":{"type":"number","nullable":true,"description":"The maximum number of views"},"hasPassword":{"type":"boolean","description":"Whether the share has a password"}},"required":["maxViews","hasPassword"],"additionalProperties":false},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The file object name"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","description":"The file creation date"},"updatedAt":{"type":"string","description":"The file update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false}},"recipients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The recipient ID"},"email":{"type":"string","format":"email","description":"The recipient email"},"createdAt":{"type":"string","description":"The recipient creation date"},"updatedAt":{"type":"string","description":"The recipient update date"}},"required":["id","email","createdAt","updatedAt"],"additionalProperties":false}},"alias":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"shareId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","alias","shareId","createdAt","updatedAt"],"additionalProperties":false,"nullable":true}},"required":["id","name","description","expiration","views","createdAt","updatedAt","creatorId","security","files","recipients","alias"],"additionalProperties":false}},"required":["share"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/shares/{shareId}/alias":{"post":{"operationId":"createShareAlias","summary":"Create or update share alias","tags":["Share"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-zA-Z0-9]+$","minLength":3,"maxLength":30}},"required":["alias"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"path","name":"shareId","required":true,"description":"The share ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"alias":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"shareId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","alias","shareId","createdAt","updatedAt"],"additionalProperties":false}},"required":["alias"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/shares/alias/{alias}":{"get":{"operationId":"getShareByAlias","summary":"Get share by alias","tags":["Share"],"parameters":[{"schema":{"type":"string"},"in":"query","name":"password","required":false,"description":"The share password"},{"schema":{"type":"string"},"in":"path","name":"alias","required":true,"description":"The share alias"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"share":{"type":"object","properties":{"id":{"type":"string","description":"The share ID"},"name":{"type":"string","nullable":true,"description":"The share name"},"description":{"type":"string","nullable":true,"description":"The share description"},"expiration":{"type":"string","nullable":true,"description":"The share expiration date"},"views":{"type":"number","description":"The number of views"},"createdAt":{"type":"string","description":"The share creation date"},"updatedAt":{"type":"string","description":"The share update date"},"creatorId":{"type":"string","description":"The creator ID"},"security":{"type":"object","properties":{"maxViews":{"type":"number","nullable":true,"description":"The maximum number of views"},"hasPassword":{"type":"boolean","description":"Whether the share has a password"}},"required":["maxViews","hasPassword"],"additionalProperties":false},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The file ID"},"name":{"type":"string","description":"The file name"},"description":{"type":"string","nullable":true,"description":"The file description"},"extension":{"type":"string","description":"The file extension"},"size":{"type":"string","description":"The file size"},"objectName":{"type":"string","description":"The file object name"},"userId":{"type":"string","description":"The user ID"},"createdAt":{"type":"string","description":"The file creation date"},"updatedAt":{"type":"string","description":"The file update date"}},"required":["id","name","description","extension","size","objectName","userId","createdAt","updatedAt"],"additionalProperties":false}},"recipients":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The recipient ID"},"email":{"type":"string","format":"email","description":"The recipient email"},"createdAt":{"type":"string","description":"The recipient creation date"},"updatedAt":{"type":"string","description":"The recipient update date"}},"required":["id","email","createdAt","updatedAt"],"additionalProperties":false}},"alias":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string"},"shareId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","alias","shareId","createdAt","updatedAt"],"additionalProperties":false,"nullable":true}},"required":["id","name","description","expiration","views","createdAt","updatedAt","creatorId","security","files","recipients","alias"],"additionalProperties":false}},"required":["share"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/shares/{shareId}/notify":{"post":{"operationId":"notifyRecipients","summary":"Send email notification to share recipients","tags":["Share"],"description":"Send email notification with share link to all recipients","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"shareLink":{"type":"string","format":"uri","description":"The frontend share URL"}},"required":["shareLink"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"path","name":"shareId","required":true,"description":"The share ID"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Success message"},"notifiedRecipients":{"type":"array","items":{"type":"string"},"description":"List of notified email addresses"}},"required":["message","notifiedRecipients"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":false}}}}}}},"/storage/disk-space":{"get":{"operationId":"getDiskSpace","summary":"Get server disk space information","tags":["Storage"],"description":"Get server disk space information","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"diskSizeGB":{"type":"number","description":"The server disk size in GB"},"diskUsedGB":{"type":"number","description":"The server disk used in GB"},"diskAvailableGB":{"type":"number","description":"The server disk available in GB"},"uploadAllowed":{"type":"boolean","description":"Whether file upload is allowed"}},"required":["diskSizeGB","diskUsedGB","diskAvailableGB","uploadAllowed"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/storage/check-upload":{"get":{"operationId":"checkUploadAllowed","summary":"Check if file upload is allowed","tags":["Storage"],"description":"Check if file upload is allowed based on available space (fileSize in bytes)","parameters":[{"schema":{"type":"string"},"in":"query","name":"fileSize","required":true,"description":"The file size in bytes"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"diskSizeGB":{"type":"number","description":"The server disk size in GB"},"diskUsedGB":{"type":"number","description":"The server disk used in GB"},"diskAvailableGB":{"type":"number","description":"The server disk available in GB"},"uploadAllowed":{"type":"boolean","description":"Whether file upload is allowed"},"fileSizeInfo":{"type":"object","properties":{"bytes":{"type":"number"},"kb":{"type":"number"},"mb":{"type":"number"},"gb":{"type":"number"}},"required":["bytes","kb","mb","gb"],"additionalProperties":false}},"required":["diskSizeGB","diskUsedGB","diskAvailableGB","uploadAllowed","fileSizeInfo"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/app/info":{"get":{"operationId":"getAppInfo","summary":"Get application base information","tags":["App"],"description":"Get application base information","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"appName":{"type":"string","description":"The application name"},"appDescription":{"type":"string","description":"The application description"},"appLogo":{"type":"string","description":"The application logo"}},"required":["appName","appDescription","appLogo"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/app/configs/{key}":{"patch":{"operationId":"updateConfig","summary":"Update a configuration value","tags":["App"],"description":"Update a configuration value (admin only)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string","description":"The config value"}},"required":["value"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string"},"in":"path","name":"key","required":true,"description":"The config key"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"config":{"type":"object","properties":{"key":{"type":"string","description":"The config key"},"value":{"type":"string","description":"The config value"},"type":{"type":"string","description":"The config type"},"group":{"type":"string","description":"The config group"},"updatedAt":{"type":"string","format":"date-time","description":"The config update date"}},"required":["key","value","type","group","updatedAt"],"additionalProperties":false}},"required":["config"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/app/configs":{"get":{"operationId":"getAllConfigs","summary":"List all configurations","tags":["App"],"description":"List all configurations (admin only)","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"configs":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The config key"},"value":{"type":"string","description":"The config value"},"type":{"type":"string","description":"The config type"},"group":{"type":"string","description":"The config group"},"updatedAt":{"type":"string","format":"date-time","description":"The config update date"}},"required":["key","value","type","group","updatedAt"],"additionalProperties":false}}},"required":["configs"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}},"patch":{"operationId":"bulkUpdateConfigs","summary":"Bulk update configuration values","tags":["App"],"description":"Bulk update configuration values (admin only)","requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The config key"},"value":{"type":"string","description":"The config value"}},"required":["key","value"],"additionalProperties":false}}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"configs":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The config key"},"value":{"type":"string","description":"The config value"},"type":{"type":"string","description":"The config type"},"group":{"type":"string","description":"The config group"},"updatedAt":{"type":"string","format":"date-time","description":"The config update date"}},"required":["key","value","type","group","updatedAt"],"additionalProperties":false}}},"required":["configs"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/app/logo":{"post":{"operationId":"uploadLogo","summary":"Upload app logo","tags":["App"],"description":"Upload a new app logo (admin only)","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"description":"Image file (JPG, PNG, GIF)"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"logo":{"type":"string","description":"The logo URL"}},"required":["logo"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}},"delete":{"operationId":"removeLogo","summary":"Remove app logo","tags":["App"],"description":"Remove the current app logo (admin only)","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Success message"}},"required":["message"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false}}}}}}},"/health":{"get":{"operationId":"checkHealth","summary":"Check API Health","tags":["Health"],"description":"Returns the health status of the API","responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"The health status"},"timestamp":{"type":"string","description":"The timestamp of the health check"}},"required":["status","timestamp"],"additionalProperties":false}}}}}}}},"tags":[{"name":"Health","description":"Health check endpoints"},{"name":"Authentication","description":"Authentication related endpoints"},{"name":"User","description":"User management endpoints"},{"name":"File","description":"File management endpoints"},{"name":"Share","description":"File sharing endpoints"},{"name":"Storage","description":"Storage management endpoints"},{"name":"App","description":"Application configuration endpoints"}]} \ No newline at end of file diff --git a/apps/web/src/App.tsx b/apps/web/src/App.tsx deleted file mode 100644 index f4f6754..0000000 --- a/apps/web/src/App.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { FilesPage } from "./pages/files/page"; -import { ForgotPasswordPage } from "./pages/forgot-password/page"; -import { ResetPasswordPage } from "./pages/reset-password/page"; -import { SettingsPage } from "./pages/settings/page"; -import { PublicSharePage } from "./pages/share/[alias]/page"; -import { SharesPage } from "./pages/shares/page"; -import { AdminProtectedRoute } from "@/components/route-protector/admin-protected-route"; -import { ProtectedRoute } from "@/components/route-protector/protected-route"; -import { DashboardPage } from "@/pages/dashboard/page"; -import { HomePage } from "@/pages/home/page"; -import { LoginPage } from "@/pages/login/page"; -import { ProfilePage } from "@/pages/profile/page"; -import { AdminAreaPage } from "@/pages/users-management/page"; -import { useEffect } from "react"; -import { useTranslation } from "react-i18next"; -import { Route, Routes } from "react-router-dom"; - -function App() { - const { i18n } = useTranslation(); - - useEffect(() => { - document.documentElement.dir = i18n.language === "ar-SA" ? "rtl" : "ltr"; - document.documentElement.lang = i18n.language; - }, [i18n.language]); - - return ( - - } path="/" /> - } path="/login" /> - - - - } - path="/dashboard" - /> - - - - } - path="/profile" - /> - - - - } - path="/settings" - /> - - - - } - path="/admin" - /> - - - - } - path="/files" - /> - - - - } - path="/shares" - /> - } path="/s/:alias" /> - } path="/forgot-password" /> - } path="/reset-password" /> - - ); -} - -export default App; diff --git a/apps/web/src/app/(home)/components/home-content.tsx b/apps/web/src/app/(home)/components/home-content.tsx new file mode 100644 index 0000000..97c1d2f --- /dev/null +++ b/apps/web/src/app/(home)/components/home-content.tsx @@ -0,0 +1,73 @@ +import Link from "next/link"; +import { IconBrandGithubFilled } from "@tabler/icons-react"; +import { motion } from "framer-motion"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { siteConfig } from "@/config/site"; +import { BackgroundLights } from "../../../components/ui/background-lights"; +import { HomeContentProps } from "../types"; +import { HomeHeader } from "./home-header"; + +const fadeInAnimation = { + animate: { opacity: 1 }, + initial: { opacity: 0 }, + transition: { duration: 0.5 }, +}; + +const fadeInUpAnimation = { + animate: { opacity: 1, y: 0 }, + initial: { opacity: 0, y: 20 }, + transition: { duration: 0.5 }, +}; + +function ActionButtons({ t }: { t: (key: string) => string }) { + return ( +
    + + +
    + ); +} + +export function HomeContent({ isLoading }: HomeContentProps) { + const t = useTranslations(); + + if (isLoading) { + return null; + } + + return ( +
    + +
    + + + {t("home.description")} + + + + +

    {t("home.privacyMessage")}

    +
    +
    +
    + ); +} diff --git a/apps/web/src/app/(home)/components/home-header.tsx b/apps/web/src/app/(home)/components/home-header.tsx new file mode 100644 index 0000000..77a733a --- /dev/null +++ b/apps/web/src/app/(home)/components/home-header.tsx @@ -0,0 +1,50 @@ +import { motion } from "framer-motion"; +import { useTranslations } from "next-intl"; + +import { HomeHeaderProps } from "../types"; + +const fadeInUpAnimation = { + animate: { opacity: 1, y: 0 }, + initial: { opacity: 0, y: 20 }, + transition: { duration: 0.5 }, +}; + +const titleAnimation = { + animate: { scale: 1 }, + initial: { scale: 0.9 }, + transition: { duration: 0.3 }, +}; + +const slideInAnimation = (delay: number, direction: -1 | 1) => ({ + animate: { opacity: 1, x: 0 }, + initial: { opacity: 0, x: 20 * direction }, + transition: { delay, duration: 0.5 }, +}); + +export function HomeHeader({ title }: HomeHeaderProps) { + const t = useTranslations(); + + return ( + +
    + + {title} + +
    + + {t("home.header.fileSharing")} + + + {t("home.header.tagline")} + +
    +
    +
    + ); +} diff --git a/apps/web/src/app/(home)/components/navbar.tsx b/apps/web/src/app/(home)/components/navbar.tsx new file mode 100644 index 0000000..fe3969a --- /dev/null +++ b/apps/web/src/app/(home)/components/navbar.tsx @@ -0,0 +1,91 @@ +"use client"; + +import { useEffect, useState } from "react"; // Add this import +import Link from "next/link"; +import { IconHeart, IconMenu2 } from "@tabler/icons-react"; + +import { LanguageSwitcher } from "@/components/general/language-switcher"; +import { ModeToggle } from "@/components/general/mode-toggle"; +import { Button } from "@/components/ui/button"; +import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet"; +import { siteConfig } from "@/config/site"; +import { useAppInfo } from "@/contexts/app-info-context"; +import { cn } from "@/lib/utils"; + +export function Navbar() { + const { appName, appLogo, refreshAppInfo } = useAppInfo(); + const [isMenuOpen, setIsMenuOpen] = useState(false); + + useEffect(() => { + refreshAppInfo(); + }, [refreshAppInfo]); + + return ( +
    +
    +
    +
    + + {appLogo && App Logo} +

    {appName}

    + + +
    +
    + + + + +
    + +
    + + + + + + + +
    +
    + {siteConfig.navMenuItems.map((item, index) => ( + setIsMenuOpen(false)} + > + {item.label} + + ))} +
    +
    +
    +
    +
    +
    +
    +
    + ); +} diff --git a/apps/web/src/app/(home)/hooks/use-home.ts b/apps/web/src/app/(home)/hooks/use-home.ts new file mode 100644 index 0000000..e0c0d5a --- /dev/null +++ b/apps/web/src/app/(home)/hooks/use-home.ts @@ -0,0 +1,52 @@ +"use client"; + +import { useEffect } from "react"; +import { useRouter } from "next/navigation"; +import { create } from "zustand"; + +import { getAllConfigs } from "@/http/endpoints"; + +interface Config { + key: string; + value: string; +} + +interface HomeStore { + isLoading: boolean; + checkHomePageAccess: () => Promise; +} + +const useHomeStore = create((set) => ({ + isLoading: true, + checkHomePageAccess: async () => { + try { + const response = await getAllConfigs(); + const showHomePage = + response.data.configs.find((config: Config) => config.key === "showHomePage")?.value === "true"; + + set({ isLoading: false }); + return showHomePage; + } catch (error) { + console.error("Failed to check homepage access:", error); + set({ isLoading: false }); + return false; + } + }, +})); + +export function useHome() { + const router = useRouter(); + const { isLoading, checkHomePageAccess } = useHomeStore(); + + useEffect(() => { + checkHomePageAccess().then((hasAccess) => { + if (!hasAccess) { + router.push("/login"); + } + }); + }, [router, checkHomePageAccess]); + + return { + isLoading, + }; +} diff --git a/apps/web/src/app/(home)/layout.tsx b/apps/web/src/app/(home)/layout.tsx new file mode 100644 index 0000000..9aaabe2 --- /dev/null +++ b/apps/web/src/app/(home)/layout.tsx @@ -0,0 +1,14 @@ +import { Metadata } from "next"; +import { getTranslations } from "next-intl/server"; + +export async function generateMetadata(): Promise { + const t = await getTranslations(); + + return { + title: `${t("home.pageTitle")} `, + }; +} + +export default function HomeLayout({ children }: { children: React.ReactNode }) { + return <>{children}; +} diff --git a/apps/web/src/pages/home/page.tsx b/apps/web/src/app/(home)/page.tsx similarity index 72% rename from apps/web/src/pages/home/page.tsx rename to apps/web/src/app/(home)/page.tsx index 441a4f0..32f0a1c 100644 --- a/apps/web/src/pages/home/page.tsx +++ b/apps/web/src/app/(home)/page.tsx @@ -1,16 +1,12 @@ +"use client"; + +import { LoadingScreen } from "@/components/layout/loading-screen"; +import { DefaultFooter } from "@/components/ui/default-footer"; import { HomeContent } from "./components/home-content"; import { Navbar } from "./components/navbar"; import { useHome } from "./hooks/use-home"; -import { LoadingScreen } from "@/components/layout/loading-screen"; -import { DefaultFooter } from "@/components/ui/default-footer"; -import { usePageTitle } from "@/hooks/use-page-title"; -import { useTranslation } from "react-i18next"; - -export function HomePage() { - const { t } = useTranslation(); - - usePageTitle(t("home.pageTitle")); +export default function HomePage() { const { isLoading } = useHome(); if (isLoading) { diff --git a/apps/web/src/pages/home/types/index.ts b/apps/web/src/app/(home)/types/index.ts similarity index 65% rename from apps/web/src/pages/home/types/index.ts rename to apps/web/src/app/(home)/types/index.ts index 9c7f811..e5a790e 100644 --- a/apps/web/src/pages/home/types/index.ts +++ b/apps/web/src/app/(home)/types/index.ts @@ -5,3 +5,8 @@ export interface HomeContentProps { export interface HomeHeaderProps { title: string; } + +export interface Config { + key: string; + value: string; +} diff --git a/apps/web/src/app/(shares)/s/[alias]/components/files-table.tsx b/apps/web/src/app/(shares)/s/[alias]/components/files-table.tsx new file mode 100644 index 0000000..11b5582 --- /dev/null +++ b/apps/web/src/app/(shares)/s/[alias]/components/files-table.tsx @@ -0,0 +1,78 @@ +import { IconDownload } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; +import { getFileIcon } from "@/utils/file-icons"; +import { formatFileSize } from "@/utils/format-file-size"; +import { ShareFilesTableProps } from "../types"; + +export function ShareFilesTable({ files, onDownload }: ShareFilesTableProps) { + const t = useTranslations(); + + const formatDateTime = (dateString: string) => { + const date = new Date(dateString); + return new Intl.DateTimeFormat("en-US", { + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + hour12: false, + }).format(date); + }; + + return ( +
    +
    + + + + + {t("filesTable.columns.name")} + + + {t("filesTable.columns.size")} + + + {t("filesTable.columns.createdAt")} + + + {t("filesTable.columns.actions")} + + + + + {files.map((file) => { + const { icon: FileIcon, color } = getFileIcon(file.name); + + return ( + + +
    + + {file.name} +
    +
    + {formatFileSize(Number(file.size))} + {formatDateTime(file.createdAt)} + + + +
    + ); + })} +
    +
    +
    +
    + ); +} diff --git a/apps/web/src/app/(shares)/s/[alias]/components/password-modal.tsx b/apps/web/src/app/(shares)/s/[alias]/components/password-modal.tsx new file mode 100644 index 0000000..12344f8 --- /dev/null +++ b/apps/web/src/app/(shares)/s/[alias]/components/password-modal.tsx @@ -0,0 +1,42 @@ +import { IconLock } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { Dialog, DialogContent, DialogFooter, DialogHeader } from "@/components/ui/dialog"; +import { Input } from "@/components/ui/input"; +import { PasswordModalProps } from "../types"; + +export function PasswordModal({ isOpen, password, isError, onPasswordChange, onSubmit }: PasswordModalProps) { + const t = useTranslations(); + + return ( + {}} modal> + + +

    {t("share.password.title")}

    +
    + +

    {t("share.password.protected")}

    +
    + {isError && ( +
    +

    {t("share.password.incorrect")}

    +
    + )} +
    +
    + onPasswordChange(e.target.value)} + onKeyDown={(e) => e.key === "Enter" && onSubmit()} + /> +
    + + + +
    +
    + ); +} diff --git a/apps/web/src/pages/share/[alias]/components/share-details.tsx b/apps/web/src/app/(shares)/s/[alias]/components/share-details.tsx similarity index 70% rename from apps/web/src/pages/share/[alias]/components/share-details.tsx rename to apps/web/src/app/(shares)/s/[alias]/components/share-details.tsx index fa24250..09987c2 100644 --- a/apps/web/src/pages/share/[alias]/components/share-details.tsx +++ b/apps/web/src/app/(shares)/s/[alias]/components/share-details.tsx @@ -1,24 +1,25 @@ +import { IconShare } from "@tabler/icons-react"; +import { format } from "date-fns"; +import { useTranslations } from "next-intl"; + +import { Card, CardContent } from "@/components/ui/card"; import { ShareDetailsProps } from "../types"; import { ShareFilesTable } from "./files-table"; -import { Card, CardBody } from "@heroui/card"; -import { format } from "date-fns"; -import { useTranslation } from "react-i18next"; -import { FaShare } from "react-icons/fa"; export function ShareDetails({ share, onDownload }: ShareDetailsProps) { - const { t } = useTranslation(); + const t = useTranslations(); return ( - +
    - +

    {share.name || t("share.details.untitled")}

    - {share.description &&

    {share.description}

    } -
    + {share.description &&

    {share.description}

    } +
    {t("share.details.created", { date: format(new Date(share.createdAt), "MM/dd/yyyy HH:mm"), @@ -36,7 +37,7 @@ export function ShareDetails({ share, onDownload }: ShareDetailsProps) {
    - + ); } diff --git a/apps/web/src/pages/share/[alias]/components/share-header.tsx b/apps/web/src/app/(shares)/s/[alias]/components/share-header.tsx similarity index 80% rename from apps/web/src/pages/share/[alias]/components/share-header.tsx rename to apps/web/src/app/(shares)/s/[alias]/components/share-header.tsx index ccb3e48..73204e3 100644 --- a/apps/web/src/pages/share/[alias]/components/share-header.tsx +++ b/apps/web/src/app/(shares)/s/[alias]/components/share-header.tsx @@ -1,7 +1,9 @@ +import Image from "next/image"; +import Link from "next/link"; + import { LanguageSwitcher } from "@/components/general/language-switcher"; -import { ThemeSwitch } from "@/components/general/theme-switch"; +import { ModeToggle } from "@/components/general/mode-toggle"; import { useAppInfo } from "@/contexts/app-info-context"; -import { Link } from "@heroui/link"; export function ShareHeader() { const { appName, appLogo } = useAppInfo(); @@ -10,12 +12,12 @@ export function ShareHeader() {
    - {appLogo && App Logo} + {appLogo && App Logo}

    {appName}

    - +
    diff --git a/apps/web/src/app/(shares)/s/[alias]/components/share-not-found.tsx b/apps/web/src/app/(shares)/s/[alias]/components/share-not-found.tsx new file mode 100644 index 0000000..4bed381 --- /dev/null +++ b/apps/web/src/app/(shares)/s/[alias]/components/share-not-found.tsx @@ -0,0 +1,24 @@ +import { IconLock } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Card, CardContent } from "@/components/ui/card"; + +export function ShareNotFound() { + const t = useTranslations(); + + return ( + + +
    +
    + +
    +

    {t("share.notFound.title")}

    +
    +
    +

    {t("share.notFound.description")}

    +
    +
    +
    + ); +} diff --git a/apps/web/src/pages/share/[alias]/hooks/use-public-share.ts b/apps/web/src/app/(shares)/s/[alias]/hooks/use-public-share.ts similarity index 91% rename from apps/web/src/pages/share/[alias]/hooks/use-public-share.ts rename to apps/web/src/app/(shares)/s/[alias]/hooks/use-public-share.ts index a3c0ed8..3fb07ea 100644 --- a/apps/web/src/pages/share/[alias]/hooks/use-public-share.ts +++ b/apps/web/src/app/(shares)/s/[alias]/hooks/use-public-share.ts @@ -1,13 +1,17 @@ -import { getDownloadUrl, getShareByAlias } from "@/http/endpoints"; -import type { GetShareByAlias200Share } from "@/http/models/getShareByAlias200Share"; -import { useState, useEffect } from "react"; -import { useTranslation } from "react-i18next"; -import { useParams } from "react-router-dom"; +"use client"; + +import { useEffect, useState } from "react"; +import { useParams } from "next/navigation"; +import { useTranslations } from "next-intl"; import { toast } from "sonner"; +import { getDownloadUrl, getShareByAlias } from "@/http/endpoints"; +import type { GetShareByAlias200Share } from "@/http/models/getShareByAlias200Share"; + export function usePublicShare() { - const { t } = useTranslation(); - const { alias } = useParams<{ alias: string }>(); + const t = useTranslations(); + const params = useParams(); + const alias = params?.alias as string; const [share, setShare] = useState(null); const [isLoading, setIsLoading] = useState(true); const [password, setPassword] = useState(""); diff --git a/apps/web/src/app/(shares)/s/[alias]/layout.tsx b/apps/web/src/app/(shares)/s/[alias]/layout.tsx new file mode 100644 index 0000000..c5954f0 --- /dev/null +++ b/apps/web/src/app/(shares)/s/[alias]/layout.tsx @@ -0,0 +1,25 @@ +import { Metadata } from "next"; +import { getTranslations } from "next-intl/server"; + +import { getAllConfigs } from "@/http/endpoints"; +import { Config } from "@/types/layout"; + +interface LayoutProps { + children: React.ReactNode; +} + +export async function generateMetadata(): Promise { + const t = await getTranslations(); + + const response = await getAllConfigs(); + const appNameConfig = response.data.configs.find((config: Config) => config.key === "appName"); + const appName = appNameConfig?.value || "Palmr"; + + return { + title: `${t("share.pageTitle")} | ${appName}`, + }; +} + +export default function DashboardLayout({ children }: LayoutProps) { + return <>{children}; +} diff --git a/apps/web/src/pages/share/[alias]/page.tsx b/apps/web/src/app/(shares)/s/[alias]/page.tsx similarity index 85% rename from apps/web/src/pages/share/[alias]/page.tsx rename to apps/web/src/app/(shares)/s/[alias]/page.tsx index daf27dc..d2b188a 100644 --- a/apps/web/src/pages/share/[alias]/page.tsx +++ b/apps/web/src/app/(shares)/s/[alias]/page.tsx @@ -1,15 +1,14 @@ +"use client"; + +import { LoadingScreen } from "@/components/layout/loading-screen"; +import { DefaultFooter } from "@/components/ui/default-footer"; import { PasswordModal } from "./components/password-modal"; import { ShareDetails } from "./components/share-details"; import { ShareHeader } from "./components/share-header"; import { ShareNotFound } from "./components/share-not-found"; import { usePublicShare } from "./hooks/use-public-share"; -import { LoadingScreen } from "@/components/layout/loading-screen"; -import { DefaultFooter } from "@/components/ui/default-footer"; -import { usePageTitle } from "@/hooks/use-page-title"; -import { useTranslation } from "react-i18next"; -export function PublicSharePage() { - const { t } = useTranslation(); +export default function PublicSharePage() { const { isLoading, share, @@ -21,8 +20,6 @@ export function PublicSharePage() { handleDownload, } = usePublicShare(); - usePageTitle(share?.name ?? t("share.pageTitle")); - if (isLoading) { return ; } diff --git a/apps/web/src/pages/share/[alias]/types/index.tsx b/apps/web/src/app/(shares)/s/[alias]/types/index.tsx similarity index 100% rename from apps/web/src/pages/share/[alias]/types/index.tsx rename to apps/web/src/app/(shares)/s/[alias]/types/index.tsx diff --git a/apps/web/src/pages/shares/components/empty-shares-state.tsx b/apps/web/src/app/(shares)/shares/components/empty-shares-state.tsx similarity index 50% rename from apps/web/src/pages/shares/components/empty-shares-state.tsx rename to apps/web/src/app/(shares)/shares/components/empty-shares-state.tsx index 3dd0f9b..e38d07a 100644 --- a/apps/web/src/pages/shares/components/empty-shares-state.tsx +++ b/apps/web/src/app/(shares)/shares/components/empty-shares-state.tsx @@ -1,19 +1,21 @@ -import { Button } from "@heroui/button"; -import { useTranslation } from "react-i18next"; -import { FaShare, FaPlus } from "react-icons/fa"; +import { IconPlus, IconShare } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; interface EmptySharesStateProps { onCreateShare: () => void; } export function EmptySharesState({ onCreateShare }: EmptySharesStateProps) { - const { t } = useTranslation(); + const t = useTranslations(); return (
    - +

    {t("shares.empty.message")}

    -
    diff --git a/apps/web/src/app/(shares)/shares/components/shares-header.tsx b/apps/web/src/app/(shares)/shares/components/shares-header.tsx new file mode 100644 index 0000000..f8b8a68 --- /dev/null +++ b/apps/web/src/app/(shares)/shares/components/shares-header.tsx @@ -0,0 +1,44 @@ +import Link from "next/link"; +import { IconLayoutDashboard, IconShare } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbSeparator, +} from "@/components/ui/breadcrumb"; +import { Separator } from "@/components/ui/separator"; + +export function SharesHeader() { + const t = useTranslations(); + + return ( +
    +
    + +

    {t("shares.header.title")}

    +
    + + + + + + + + {t("common.dashboard")} + + + + + + + {t("shares.header.myShares")} + + + + +
    + ); +} diff --git a/apps/web/src/pages/shares/components/shares-modals.tsx b/apps/web/src/app/(shares)/shares/components/shares-modals.tsx similarity index 100% rename from apps/web/src/pages/shares/components/shares-modals.tsx rename to apps/web/src/app/(shares)/shares/components/shares-modals.tsx index 8628f61..e3801a3 100644 --- a/apps/web/src/pages/shares/components/shares-modals.tsx +++ b/apps/web/src/app/(shares)/shares/components/shares-modals.tsx @@ -1,8 +1,8 @@ -import { SharesModalsProps } from "../types"; import { CreateShareModal } from "@/components/modals/create-share-modal"; import { GenerateShareLinkModal } from "@/components/modals/generate-share-link-modal"; import { ShareActionsModals } from "@/components/modals/share-actions-modals"; import { ShareDetailsModal } from "@/components/modals/share-details-modal"; +import { SharesModalsProps } from "../types"; export function SharesModals({ isCreateModalOpen, diff --git a/apps/web/src/app/(shares)/shares/components/shares-search.tsx b/apps/web/src/app/(shares)/shares/components/shares-search.tsx new file mode 100644 index 0000000..8845c68 --- /dev/null +++ b/apps/web/src/app/(shares)/shares/components/shares-search.tsx @@ -0,0 +1,48 @@ +import { IconPlus, IconSearch } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { SharesSearchProps } from "../types"; + +export function SharesSearch({ + searchQuery, + onSearchChange, + onCreateShare, + totalShares, + filteredCount, +}: SharesSearchProps) { + const t = useTranslations(); + + return ( +
    +
    +

    {t("shares.search.title")}

    + +
    + +
    +
    + + onSearchChange(e.target.value)} + /> +
    + {searchQuery && ( + + {t("shares.search.results", { + filtered: filteredCount, + total: totalShares, + })} + + )} +
    +
    + ); +} diff --git a/apps/web/src/pages/shares/components/shares-table-container.tsx b/apps/web/src/app/(shares)/shares/components/shares-table-container.tsx similarity index 100% rename from apps/web/src/pages/shares/components/shares-table-container.tsx rename to apps/web/src/app/(shares)/shares/components/shares-table-container.tsx index 04c17c0..4f35e76 100644 --- a/apps/web/src/pages/shares/components/shares-table-container.tsx +++ b/apps/web/src/app/(shares)/shares/components/shares-table-container.tsx @@ -1,6 +1,6 @@ +import { SharesTable } from "@/components/tables/shares-table"; import { SharesTableContainerProps } from "../types"; import { EmptySharesState } from "./empty-shares-state"; -import { SharesTable } from "@/components/tables/shares-table"; export function SharesTableContainer({ shares, onCopyLink, onCreateShare, shareManager }: SharesTableContainerProps) { return shares.length > 0 ? ( diff --git a/apps/web/src/pages/shares/hooks/use-shares.ts b/apps/web/src/app/(shares)/shares/hooks/use-shares.ts similarity index 87% rename from apps/web/src/pages/shares/hooks/use-shares.ts rename to apps/web/src/app/(shares)/shares/hooks/use-shares.ts index 66db2f5..a9d95ff 100644 --- a/apps/web/src/pages/shares/hooks/use-shares.ts +++ b/apps/web/src/app/(shares)/shares/hooks/use-shares.ts @@ -1,17 +1,19 @@ -import { getAllConfigs, listUserShares, notifyRecipients } from "@/http/endpoints"; -import { ListUserShares200SharesItem } from "@/http/models/listUserShares200SharesItem"; -import { ShareType } from "@/types/share"; +"use client"; + import { useEffect, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useTranslations } from "next-intl"; import { toast } from "sonner"; +import { getAllConfigs, listUserShares, notifyRecipients } from "@/http/endpoints"; +import { ListUserShares200SharesItem } from "@/http/models/listUserShares200SharesItem"; + export function useShares() { - const { t } = useTranslation(); - const [shares, setShares] = useState([]); + const t = useTranslations(); + const [shares, setShares] = useState([]); const [isLoading, setIsLoading] = useState(true); const [searchQuery, setSearchQuery] = useState(""); - const [shareToViewDetails, setShareToViewDetails] = useState(null); - const [shareToGenerateLink, setShareToGenerateLink] = useState(null); + const [shareToViewDetails, setShareToViewDetails] = useState(null); + const [shareToGenerateLink, setShareToGenerateLink] = useState(null); const [smtpEnabled, setSmtpEnabled] = useState("false"); const loadShares = async () => { @@ -47,7 +49,6 @@ export function useShares() { loadConfigs(); }, []); - // Filter shares based on search query const filteredShares = shares.filter( (share) => share.name?.toLowerCase().includes(searchQuery.toLowerCase()) ?? false ); @@ -76,7 +77,6 @@ export function useShares() { }; return { - // State shares, isLoading, searchQuery, @@ -84,8 +84,6 @@ export function useShares() { shareToGenerateLink, filteredShares, smtpEnabled, - - // Actions setSearchQuery, setShareToViewDetails, setShareToGenerateLink, diff --git a/apps/web/src/app/(shares)/shares/layout.tsx b/apps/web/src/app/(shares)/shares/layout.tsx new file mode 100644 index 0000000..fce242e --- /dev/null +++ b/apps/web/src/app/(shares)/shares/layout.tsx @@ -0,0 +1,18 @@ +import { Metadata } from "next"; +import { getTranslations } from "next-intl/server"; + +interface LayoutProps { + children: React.ReactNode; +} + +export async function generateMetadata(): Promise { + const t = await getTranslations(); + + return { + title: `${t("shares.pageTitle")}`, + }; +} + +export default function UsersManagementLayout({ children }: LayoutProps) { + return <>{children}; +} diff --git a/apps/web/src/app/(shares)/shares/page.tsx b/apps/web/src/app/(shares)/shares/page.tsx new file mode 100644 index 0000000..69c04ca --- /dev/null +++ b/apps/web/src/app/(shares)/shares/page.tsx @@ -0,0 +1,84 @@ +"use client"; + +import { ProtectedRoute } from "@/components/auth/protected-route"; +import { LoadingScreen } from "@/components/layout/loading-screen"; +import { Navbar } from "@/components/layout/navbar"; +import { Card, CardContent } from "@/components/ui/card"; +import { DefaultFooter } from "@/components/ui/default-footer"; +import { useDisclosure } from "@/hooks/use-disclosure"; +import { useShareManager } from "@/hooks/use-share-manager"; +import { SharesHeader } from "./components/shares-header"; +import { SharesModals } from "./components/shares-modals"; +import { SharesSearch } from "./components/shares-search"; +import { SharesTableContainer } from "./components/shares-table-container"; +import { useShares } from "./hooks/use-shares"; + +export default function SharesPage() { + const { + shares, + isLoading, + searchQuery, + setSearchQuery, + filteredShares, + shareToViewDetails, + shareToGenerateLink, + handleCopyLink, + loadShares, + setShareToViewDetails, + setShareToGenerateLink, + smtpEnabled, + } = useShares(); + + const { isOpen: isCreateModalOpen, onOpen: onOpenCreateModal, onClose: onCloseCreateModal } = useDisclosure(); + const shareManager = useShareManager(loadShares); + + if (isLoading) { + return ; + } + + return ( + +
    + +
    +
    + + + +
    + + + +
    +
    +
    + + setShareToGenerateLink(null)} + onCloseViewDetails={() => setShareToViewDetails(null)} + onSuccess={loadShares} + /> +
    +
    + +
    +
    + ); +} diff --git a/apps/web/src/pages/shares/types/index.ts b/apps/web/src/app/(shares)/shares/types/index.ts similarity index 54% rename from apps/web/src/pages/shares/types/index.ts rename to apps/web/src/app/(shares)/shares/types/index.ts index 7679805..a2165cc 100644 --- a/apps/web/src/pages/shares/types/index.ts +++ b/apps/web/src/app/(shares)/shares/types/index.ts @@ -1,4 +1,4 @@ -import { ShareType } from "@/types/share"; +import { ListUserShares200SharesItem } from "@/http/models"; export interface SharesSearchProps { searchQuery: string; @@ -16,25 +16,23 @@ export interface SharesTableContainerProps { } export interface ShareManager { - // State properties - shareToDelete: ShareType | null; - shareToEdit: ShareType | null; - shareToManageFiles: ShareType | null; - shareToManageRecipients: ShareType | null; + shareToDelete: ListUserShares200SharesItem | null; + shareToEdit: ListUserShares200SharesItem | null; + shareToManageFiles: ListUserShares200SharesItem | null; + shareToManageRecipients: ListUserShares200SharesItem | null; - // Actions (existing properties) - setShareToDelete: (share: ShareType | null) => void; - setShareToEdit: (share: ShareType | null) => void; - setShareToManageFiles: (share: ShareType | null) => void; - setShareToManageRecipients: (share: ShareType | null) => void; - setShareToViewDetails: (share: ShareType | null) => void; - setShareToGenerateLink: (share: ShareType | null) => void; + setShareToDelete: (share: ListUserShares200SharesItem | null) => void; + setShareToEdit: (share: ListUserShares200SharesItem | null) => void; + setShareToManageFiles: (share: ListUserShares200SharesItem | null) => void; + setShareToManageRecipients: (share: ListUserShares200SharesItem | null) => void; + setShareToViewDetails: (share: ListUserShares200SharesItem | null) => void; + setShareToGenerateLink: (share: ListUserShares200SharesItem | null) => void; handleDelete: (shareId: string) => Promise; handleEdit: (shareId: string, data: any) => Promise; handleManageFiles: (shareId: string, files: any[]) => Promise; handleManageRecipients: (shareId: string, recipients: any[]) => Promise; handleGenerateLink: (shareId: string, alias: string) => Promise; - handleNotifyRecipients: (share: ShareType) => Promise; + handleNotifyRecipients: (share: ListUserShares200SharesItem) => Promise; } export interface SharesModalsProps { diff --git a/apps/web/src/app/api/(proxy)/app/check-upload/route.ts b/apps/web/src/app/api/(proxy)/app/check-upload/route.ts new file mode 100644 index 0000000..05645b2 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/app/check-upload/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/storage/check-upload`, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/app/configs/route.ts b/apps/web/src/app/api/(proxy)/app/configs/route.ts new file mode 100644 index 0000000..70d5090 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/app/configs/route.ts @@ -0,0 +1,30 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/app/configs`, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + console.log(res); + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/app/disk-space/route.ts b/apps/web/src/app/api/(proxy)/app/disk-space/route.ts new file mode 100644 index 0000000..d753ce9 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/app/disk-space/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/storage/disk-space`, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/app/health/route.ts b/apps/web/src/app/api/(proxy)/app/health/route.ts new file mode 100644 index 0000000..4366da6 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/app/health/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/health`, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/app/info/route.ts b/apps/web/src/app/api/(proxy)/app/info/route.ts new file mode 100644 index 0000000..c443cd5 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/app/info/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/app/info`, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/app/remove-logo/route.ts b/apps/web/src/app/api/(proxy)/app/remove-logo/route.ts new file mode 100644 index 0000000..e1a7172 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/app/remove-logo/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function DELETE(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/app/logo`, { + method: "DELETE", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/app/upload-logo/route.ts b/apps/web/src/app/api/(proxy)/app/upload-logo/route.ts new file mode 100644 index 0000000..284ba95 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/app/upload-logo/route.ts @@ -0,0 +1,29 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + const formData = await req.formData(); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/app/logo`, { + method: "POST", + headers: { + cookie: cookieHeader || "", + }, + body: formData, + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/auth/forgot-password/route.ts b/apps/web/src/app/api/(proxy)/auth/forgot-password/route.ts new file mode 100644 index 0000000..38eeaef --- /dev/null +++ b/apps/web/src/app/api/(proxy)/auth/forgot-password/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest) { + const body = await req.text(); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/auth/forgot-password`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body, + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/auth/login/route.ts b/apps/web/src/app/api/(proxy)/auth/login/route.ts new file mode 100644 index 0000000..99ee519 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/auth/login/route.ts @@ -0,0 +1,29 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest) { + const body = await req.text(); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/auth/login`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/auth/logout/route.ts b/apps/web/src/app/api/(proxy)/auth/logout/route.ts new file mode 100644 index 0000000..bdffe0a --- /dev/null +++ b/apps/web/src/app/api/(proxy)/auth/logout/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/auth/logout`, { + method: "POST", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/auth/me/route.ts b/apps/web/src/app/api/(proxy)/auth/me/route.ts new file mode 100644 index 0000000..424545d --- /dev/null +++ b/apps/web/src/app/api/(proxy)/auth/me/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/auth/me`, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/auth/reset-password/route.ts b/apps/web/src/app/api/(proxy)/auth/reset-password/route.ts new file mode 100644 index 0000000..3d704ac --- /dev/null +++ b/apps/web/src/app/api/(proxy)/auth/reset-password/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest) { + const body = await req.text(); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/auth/reset-password`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body, + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/config/list/route.ts b/apps/web/src/app/api/(proxy)/config/list/route.ts new file mode 100644 index 0000000..7f0cbb2 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/config/list/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/app/configs`, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/config/update/[key]/route.ts b/apps/web/src/app/api/(proxy)/config/update/[key]/route.ts new file mode 100644 index 0000000..bfa10d5 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/config/update/[key]/route.ts @@ -0,0 +1,33 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function PATCH(req: NextRequest, { params }: { params: { key: string } }) { + const { key } = params; + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/app/configs/${key}`, { + method: "PATCH", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/config/update/bulk/route.ts b/apps/web/src/app/api/(proxy)/config/update/bulk/route.ts new file mode 100644 index 0000000..294f8c7 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/config/update/bulk/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function PATCH(req: NextRequest) { + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/app/configs`, { + method: "PATCH", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/files/(download)/[objectName]/download/route.ts b/apps/web/src/app/api/(proxy)/files/(download)/[objectName]/download/route.ts new file mode 100644 index 0000000..c3f4f62 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/files/(download)/[objectName]/download/route.ts @@ -0,0 +1,33 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest, { params }: { params: { objectName: string } }) { + // Await params before destructuring + const { objectName } = await params; + const cookieHeader = req.headers.get("cookie"); + + const url = `${process.env.API_BASE_URL}/files/${encodeURIComponent(objectName)}/download`; + + const apiRes = await fetch(url, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/files/delete/[id]/route.ts b/apps/web/src/app/api/(proxy)/files/delete/[id]/route.ts new file mode 100644 index 0000000..240c12c --- /dev/null +++ b/apps/web/src/app/api/(proxy)/files/delete/[id]/route.ts @@ -0,0 +1,30 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function DELETE(req: NextRequest, { params }: { params: { id: string } }) { + const { id } = params; + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/files/${encodeURIComponent(id)}`, { + method: "DELETE", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/files/generate-presigned-url/route.ts b/apps/web/src/app/api/(proxy)/files/generate-presigned-url/route.ts new file mode 100644 index 0000000..8aeadfc --- /dev/null +++ b/apps/web/src/app/api/(proxy)/files/generate-presigned-url/route.ts @@ -0,0 +1,31 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + const searchParams = req.nextUrl.searchParams.toString(); + const url = `${process.env.API_BASE_URL}/files/presigned-url${searchParams ? `?${searchParams}` : ""}`; + + const apiRes = await fetch(url, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/files/list/route.ts b/apps/web/src/app/api/(proxy)/files/list/route.ts new file mode 100644 index 0000000..4c08b7a --- /dev/null +++ b/apps/web/src/app/api/(proxy)/files/list/route.ts @@ -0,0 +1,28 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/files`, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/files/register/route.ts b/apps/web/src/app/api/(proxy)/files/register/route.ts new file mode 100644 index 0000000..c71ad2d --- /dev/null +++ b/apps/web/src/app/api/(proxy)/files/register/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest) { + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/files`, { + method: "POST", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/files/update/[id]/route.ts b/apps/web/src/app/api/(proxy)/files/update/[id]/route.ts new file mode 100644 index 0000000..7baeb28 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/files/update/[id]/route.ts @@ -0,0 +1,33 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function PATCH(req: NextRequest, { params }: { params: { id: string } }) { + const { id } = params; + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/files/${encodeURIComponent(id)}`, { + method: "PATCH", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/alias/create/[shareId]/route.ts b/apps/web/src/app/api/(proxy)/shares/alias/create/[shareId]/route.ts new file mode 100644 index 0000000..19ef52b --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/alias/create/[shareId]/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest, { params }: { params: { shareId: string } }) { + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/alias`, { + method: "POST", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/alias/get/[alias]/route.ts b/apps/web/src/app/api/(proxy)/shares/alias/get/[alias]/route.ts new file mode 100644 index 0000000..4e45063 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/alias/get/[alias]/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest, { params }: { params: { alias: string } }) { + const cookieHeader = req.headers.get("cookie"); + const queryParams = new URLSearchParams(req.url.split("?")[1]) || undefined; + + const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/alias/${params.alias}`, { + method: "GET", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + redirect: "manual", + ...(queryParams ? { params: queryParams } : {}), + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/create/route.ts b/apps/web/src/app/api/(proxy)/shares/create/route.ts new file mode 100644 index 0000000..1575733 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/create/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + const body = await req.text(); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/shares`, { + method: "POST", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/delete/[id]/route.ts b/apps/web/src/app/api/(proxy)/shares/delete/[id]/route.ts new file mode 100644 index 0000000..50e87c4 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/delete/[id]/route.ts @@ -0,0 +1,29 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function DELETE(req: NextRequest, { params }: { params: { id: string } }) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.id}`, { + method: "DELETE", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/details/[shareId]/route.ts b/apps/web/src/app/api/(proxy)/shares/details/[shareId]/route.ts new file mode 100644 index 0000000..3b4a62b --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/details/[shareId]/route.ts @@ -0,0 +1,34 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest, { params }: { params: { shareId: string } }) { + const cookieHeader = req.headers.get("cookie"); + const url = new URL(req.url); + const searchParams = url.searchParams.toString(); + + const apiRes = await fetch( + `${process.env.API_BASE_URL}/shares/${params.shareId}${searchParams ? `?${searchParams}` : ""}`, + { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + } + ); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/files/add/[shareId]/route.ts b/apps/web/src/app/api/(proxy)/shares/files/add/[shareId]/route.ts new file mode 100644 index 0000000..3993705 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/files/add/[shareId]/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest, { params }: { params: { shareId: string } }) { + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/files`, { + method: "POST", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/files/remove/[shareId]/route.ts b/apps/web/src/app/api/(proxy)/shares/files/remove/[shareId]/route.ts new file mode 100644 index 0000000..d5516fc --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/files/remove/[shareId]/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function DELETE(req: NextRequest, { params }: { params: { shareId: string } }) { + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/files`, { + method: "DELETE", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/list/route.ts b/apps/web/src/app/api/(proxy)/shares/list/route.ts new file mode 100644 index 0000000..4a67118 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/list/route.ts @@ -0,0 +1,29 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/me`, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/password/update/shareId/route.ts b/apps/web/src/app/api/(proxy)/shares/password/update/shareId/route.ts new file mode 100644 index 0000000..636c5d3 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/password/update/shareId/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function PATCH(req: NextRequest, { params }: { params: { shareId: string } }) { + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/password`, { + method: "PATCH", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/recipients/add/[shareId]/route.ts b/apps/web/src/app/api/(proxy)/shares/recipients/add/[shareId]/route.ts new file mode 100644 index 0000000..a8a4ea4 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/recipients/add/[shareId]/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest, { params }: { params: { shareId: string } }) { + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/recipients`, { + method: "POST", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/recipients/notify/[shareId]/route.ts b/apps/web/src/app/api/(proxy)/shares/recipients/notify/[shareId]/route.ts new file mode 100644 index 0000000..104fd0f --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/recipients/notify/[shareId]/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest, { params }: { params: { shareId: string } }) { + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/notify`, { + method: "POST", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/recipients/remove/[shareId]/route.ts b/apps/web/src/app/api/(proxy)/shares/recipients/remove/[shareId]/route.ts new file mode 100644 index 0000000..83c2e77 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/recipients/remove/[shareId]/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function DELETE(req: NextRequest, { params }: { params: { shareId: string } }) { + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/shares/${params.shareId}/recipients`, { + method: "DELETE", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/shares/update/route.ts b/apps/web/src/app/api/(proxy)/shares/update/route.ts new file mode 100644 index 0000000..691a60c --- /dev/null +++ b/apps/web/src/app/api/(proxy)/shares/update/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function PUT(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + const body = await req.text(); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/shares`, { + method: "PUT", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/users/activate/[id]/route.ts b/apps/web/src/app/api/(proxy)/users/activate/[id]/route.ts new file mode 100644 index 0000000..8bdce2f --- /dev/null +++ b/apps/web/src/app/api/(proxy)/users/activate/[id]/route.ts @@ -0,0 +1,29 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function PATCH(req: NextRequest, { params }: { params: { id: string } }) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/users/${params.id}/activate`, { + method: "PATCH", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/users/avatar/remove/route.ts b/apps/web/src/app/api/(proxy)/users/avatar/remove/route.ts new file mode 100644 index 0000000..0b240bf --- /dev/null +++ b/apps/web/src/app/api/(proxy)/users/avatar/remove/route.ts @@ -0,0 +1,29 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function DELETE(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/users/avatar`, { + method: "DELETE", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/users/avatar/upload/route.ts b/apps/web/src/app/api/(proxy)/users/avatar/upload/route.ts new file mode 100644 index 0000000..fadbbb4 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/users/avatar/upload/route.ts @@ -0,0 +1,29 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + const formData = await req.formData(); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/users/avatar`, { + method: "POST", + headers: { + cookie: cookieHeader || "", + }, + body: formData, + }); + + const resBody = await apiRes.text(); + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/users/deactivate/[id]/route.ts b/apps/web/src/app/api/(proxy)/users/deactivate/[id]/route.ts new file mode 100644 index 0000000..b00bcd0 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/users/deactivate/[id]/route.ts @@ -0,0 +1,29 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function PATCH(req: NextRequest, { params }: { params: { id: string } }) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/users/${params.id}/deactivate`, { + method: "PATCH", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/users/delete/[id]/route.ts b/apps/web/src/app/api/(proxy)/users/delete/[id]/route.ts new file mode 100644 index 0000000..ee73c45 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/users/delete/[id]/route.ts @@ -0,0 +1,29 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function DELETE(req: NextRequest, { params }: { params: { id: string } }) { + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/users/${params.id}`, { + method: "DELETE", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/users/details/[id]/route.ts b/apps/web/src/app/api/(proxy)/users/details/[id]/route.ts new file mode 100644 index 0000000..b591bb2 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/users/details/[id]/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest, { params }: { params: { id: string } }) { + const cookieHeader = req.headers.get("cookie"); + const searchParams = req.nextUrl.searchParams.toString(); + + const url = `${process.env.API_BASE_URL}/users/${params.id}${searchParams ? `?${searchParams}` : ""}`; + + const apiRes = await fetch(url, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/users/list/route.ts b/apps/web/src/app/api/(proxy)/users/list/route.ts new file mode 100644 index 0000000..b2d2b5f --- /dev/null +++ b/apps/web/src/app/api/(proxy)/users/list/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function GET(req: NextRequest) { + const cookieHeader = req.headers.get("cookie"); + const searchParams = req.nextUrl.searchParams.toString(); + + const url = `${process.env.API_BASE_URL}/users${searchParams ? `?${searchParams}` : ""}`; + + const apiRes = await fetch(url, { + method: "GET", + headers: { + cookie: cookieHeader || "", + }, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/users/register/route.ts b/apps/web/src/app/api/(proxy)/users/register/route.ts new file mode 100644 index 0000000..48d730d --- /dev/null +++ b/apps/web/src/app/api/(proxy)/users/register/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function POST(req: NextRequest) { + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/auth/register`, { + method: "POST", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/users/update-image/[id]/route.ts b/apps/web/src/app/api/(proxy)/users/update-image/[id]/route.ts new file mode 100644 index 0000000..dab2015 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/users/update-image/[id]/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function PATCH(req: NextRequest, { params }: { params: { id: string } }) { + const cookieHeader = req.headers.get("cookie"); + const body = await req.text(); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/users/${params.id}/image`, { + method: "PATCH", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/api/(proxy)/users/update/route.ts b/apps/web/src/app/api/(proxy)/users/update/route.ts new file mode 100644 index 0000000..af1e9e3 --- /dev/null +++ b/apps/web/src/app/api/(proxy)/users/update/route.ts @@ -0,0 +1,32 @@ +import { NextRequest, NextResponse } from "next/server"; + +export async function PUT(req: NextRequest) { + const body = await req.text(); + const cookieHeader = req.headers.get("cookie"); + + const apiRes = await fetch(`${process.env.API_BASE_URL}/users`, { + method: "PUT", + headers: { + "Content-Type": "application/json", + cookie: cookieHeader || "", + }, + body, + redirect: "manual", + }); + + const resBody = await apiRes.text(); + + const res = new NextResponse(resBody, { + status: apiRes.status, + headers: { + "Content-Type": "application/json", + }, + }); + + const setCookie = apiRes.headers.getSetCookie?.() || []; + if (setCookie.length > 0) { + res.headers.set("Set-Cookie", setCookie.join(",")); + } + + return res; +} diff --git a/apps/web/src/app/dashboard/components/empty-file-state.tsx b/apps/web/src/app/dashboard/components/empty-file-state.tsx new file mode 100644 index 0000000..4f8d0bb --- /dev/null +++ b/apps/web/src/app/dashboard/components/empty-file-state.tsx @@ -0,0 +1,19 @@ +import { IconCloudUpload, IconFolderOpen } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; + +export function EmptyFilesState({ onUpload }: { onUpload: () => void }) { + const t = useTranslations(); + + return ( +
    + +

    {t("recentFiles.noFiles")}

    + +
    + ); +} diff --git a/apps/web/src/app/dashboard/components/empty-shares-state.tsx b/apps/web/src/app/dashboard/components/empty-shares-state.tsx new file mode 100644 index 0000000..7da158e --- /dev/null +++ b/apps/web/src/app/dashboard/components/empty-shares-state.tsx @@ -0,0 +1,21 @@ +import { IconPlus, IconShare } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; + +export function EmptySharesState({ onCreate }: { onCreate: () => void }) { + const t = useTranslations(); + + return ( +
    + +
    +

    {t("recentShares.noShares")}

    + +
    +
    + ); +} diff --git a/apps/web/src/pages/dashboard/components/quick-access-cards.tsx b/apps/web/src/app/dashboard/components/quick-access-cards.tsx similarity index 57% rename from apps/web/src/pages/dashboard/components/quick-access-cards.tsx rename to apps/web/src/app/dashboard/components/quick-access-cards.tsx index 6b4b32a..31dabe2 100644 --- a/apps/web/src/pages/dashboard/components/quick-access-cards.tsx +++ b/apps/web/src/app/dashboard/components/quick-access-cards.tsx @@ -1,26 +1,27 @@ -import { Card, CardBody } from "@heroui/card"; -import { useTranslation } from "react-i18next"; -import { FaFolderOpen, FaShareAlt } from "react-icons/fa"; -import { useNavigate } from "react-router-dom"; +import { useRouter } from "next/navigation"; +import { IconFoldersFilled, IconShare2 } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Card, CardContent } from "@/components/ui/card"; export function QuickAccessCards() { - const { t } = useTranslation(); - const navigate = useNavigate(); + const t = useTranslations(); + const router = useRouter(); const QUICK_ACCESS_ITEMS = [ { title: t("quickAccess.files.title"), - icon: , + icon: , description: t("quickAccess.files.description"), path: "/files", - color: "bg-primary-500", + color: "bg-primary", }, { title: t("quickAccess.shares.title"), - icon: , + icon: , description: t("quickAccess.shares.description"), path: "/shares", - color: "bg-warning-500", + color: "bg-orange-400", }, ] as const; @@ -29,13 +30,14 @@ export function QuickAccessCards() { {QUICK_ACCESS_ITEMS.map((card) => ( navigate(card.path)} + className="cursor-pointer transform transition-all hover:scale-102" + onClick={() => router.push(card.path)} > - +
    -
    +
    {card.icon}
    @@ -43,7 +45,7 @@ export function QuickAccessCards() {

    {card.description}

    - + ))}
    diff --git a/apps/web/src/app/dashboard/components/recent-files.tsx b/apps/web/src/app/dashboard/components/recent-files.tsx new file mode 100644 index 0000000..c95c279 --- /dev/null +++ b/apps/web/src/app/dashboard/components/recent-files.tsx @@ -0,0 +1,59 @@ +import { useRouter } from "next/navigation"; +import { IconCloudUpload, IconFolderOpen } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { FilesTable } from "@/components/tables/files-table"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent } from "@/components/ui/card"; +import type { RecentFilesProps } from "../types"; +import { EmptyFilesState } from "./empty-file-state"; + +export function RecentFiles({ files, fileManager, onOpenUploadModal }: RecentFilesProps) { + const t = useTranslations(); + const router = useRouter(); + + return ( + + +
    +

    + + {t("recentFiles.title")} +

    + {files.length >= 5 ? ( + + ) : files.length === 0 ? null : ( + + )} +
    + {files.length > 0 ? ( + + ) : ( + + )} +
    +
    + ); +} diff --git a/apps/web/src/pages/dashboard/components/recent-shares.tsx b/apps/web/src/app/dashboard/components/recent-shares.tsx similarity index 51% rename from apps/web/src/pages/dashboard/components/recent-shares.tsx rename to apps/web/src/app/dashboard/components/recent-shares.tsx index fb88cf2..6d27ed2 100644 --- a/apps/web/src/pages/dashboard/components/recent-shares.tsx +++ b/apps/web/src/app/dashboard/components/recent-shares.tsx @@ -1,44 +1,44 @@ -import { RecentSharesProps } from "../types"; +import { useRouter } from "next/navigation"; +import { IconPlus, IconShare } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + import { SharesTable } from "@/components/tables/shares-table"; -import { Button } from "@heroui/button"; -import { Card, CardBody } from "@heroui/card"; -import { useTranslation } from "react-i18next"; -import { FaShareAlt, FaPlus } from "react-icons/fa"; -import { useNavigate } from "react-router-dom"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent } from "@/components/ui/card"; +import { RecentSharesProps } from "../types"; +import { EmptySharesState } from "./empty-shares-state"; export function RecentShares({ shares, shareManager, onOpenCreateModal, onCopyLink }: RecentSharesProps) { - const { t } = useTranslation(); - const navigate = useNavigate(); + const t = useTranslations(); + const router = useRouter(); return ( - +

    - + {t("recentShares.title")}

    {shares.length >= 5 ? ( ) : shares.length === 0 ? null : ( )} @@ -60,23 +60,7 @@ export function RecentShares({ shares, shareManager, onOpenCreateModal, onCopyLi )}
    - + ); } - -function EmptySharesState({ onCreate }: { onCreate: () => void }) { - const { t } = useTranslation(); - - return ( -
    - -
    -

    {t("recentShares.noShares")}

    - -
    -
    - ); -} diff --git a/apps/web/src/app/dashboard/components/storage-usage.tsx b/apps/web/src/app/dashboard/components/storage-usage.tsx new file mode 100644 index 0000000..86345c0 --- /dev/null +++ b/apps/web/src/app/dashboard/components/storage-usage.tsx @@ -0,0 +1,42 @@ +import { IconDatabaseCog } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Card, CardContent } from "@/components/ui/card"; +import { Progress } from "@/components/ui/progress"; +import type { StorageUsageProps } from "../types"; +import { formatStorageSize } from "../utils/format-storage-size"; + +export function StorageUsage({ diskSpace }: StorageUsageProps) { + const t = useTranslations(); + console.log("diskSpace:", diskSpace); + + return ( + + +
    +

    + + {t("storageUsage.title")} +

    +
    + +
    + + {" "} + {formatStorageSize(diskSpace?.diskUsedGB || 0)} {t("storageUsage.used")} + + + {" "} + {formatStorageSize(diskSpace?.diskAvailableGB || 0)} {t("storageUsage.available")} + +
    +
    +
    +
    +
    + ); +} diff --git a/apps/web/src/pages/dashboard/hooks/use-dashboard.ts b/apps/web/src/app/dashboard/hooks/use-dashboard.ts similarity index 82% rename from apps/web/src/pages/dashboard/hooks/use-dashboard.ts rename to apps/web/src/app/dashboard/hooks/use-dashboard.ts index 47f7cb1..8ad8549 100644 --- a/apps/web/src/pages/dashboard/hooks/use-dashboard.ts +++ b/apps/web/src/app/dashboard/hooks/use-dashboard.ts @@ -1,14 +1,16 @@ -import { useFileManager } from "@/hooks/use-file-manager"; -import { useShareManager } from "@/hooks/use-share-manager"; -import { getDiskSpace, listFiles, listUserShares, getAllConfigs } from "@/http/endpoints"; -import { ListUserShares200SharesItem } from "@/http/models/listUserShares200SharesItem"; -import { useDisclosure } from "@heroui/modal"; +"use client"; + import { useEffect, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useTranslations } from "next-intl"; import { toast } from "sonner"; +import { useFileManager } from "@/hooks/use-file-manager"; +import { useShareManager } from "@/hooks/use-share-manager"; +import { getAllConfigs, getDiskSpace, listFiles, listUserShares } from "@/http/endpoints"; +import { ListUserShares200SharesItem } from "@/http/models/listUserShares200SharesItem"; + export function useDashboard() { - const { t } = useTranslation(); + const t = useTranslations(); const [diskSpace, setDiskSpace] = useState<{ diskSizeGB: number; diskUsedGB: number; @@ -20,8 +22,13 @@ export function useDashboard() { const [isLoading, setIsLoading] = useState(true); const [smtpEnabled, setSmtpEnabled] = useState("false"); - const { isOpen: isUploadModalOpen, onOpen: onOpenUploadModal, onClose: onCloseUploadModal } = useDisclosure(); - const { isOpen: isCreateModalOpen, onOpen: onOpenCreateModal, onClose: onCloseCreateModal } = useDisclosure(); + const [isUploadModalOpen, setIsUploadModalOpen] = useState(false); + const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); + + const onOpenUploadModal = () => setIsUploadModalOpen(true); + const onCloseUploadModal = () => setIsUploadModalOpen(false); + const onOpenCreateModal = () => setIsCreateModalOpen(true); + const onCloseCreateModal = () => setIsCreateModalOpen(false); const loadDashboardData = async () => { try { diff --git a/apps/web/src/app/dashboard/layout.tsx b/apps/web/src/app/dashboard/layout.tsx new file mode 100644 index 0000000..dd52f74 --- /dev/null +++ b/apps/web/src/app/dashboard/layout.tsx @@ -0,0 +1,18 @@ +import { Metadata } from "next"; +import { getTranslations } from "next-intl/server"; + +interface LayoutProps { + children: React.ReactNode; +} + +export async function generateMetadata(): Promise { + const t = await getTranslations(); + + return { + title: `${t("home.pageTitle")}`, + }; +} + +export default function DashboardLayout({ children }: LayoutProps) { + return <>{children}; +} diff --git a/apps/web/src/pages/dashboard/modals/dashboard-modals.tsx b/apps/web/src/app/dashboard/modals/dashboard-modals.tsx similarity index 100% rename from apps/web/src/pages/dashboard/modals/dashboard-modals.tsx rename to apps/web/src/app/dashboard/modals/dashboard-modals.tsx index 6a5fc11..674af5b 100644 --- a/apps/web/src/pages/dashboard/modals/dashboard-modals.tsx +++ b/apps/web/src/app/dashboard/modals/dashboard-modals.tsx @@ -1,4 +1,3 @@ -import { DashboardModalsProps } from "../types"; import { CreateShareModal } from "@/components/modals/create-share-modal"; import { FileActionsModals } from "@/components/modals/file-actions-modals"; import { FilePreviewModal } from "@/components/modals/file-preview-modal"; @@ -6,6 +5,7 @@ import { GenerateShareLinkModal } from "@/components/modals/generate-share-link- import { ShareActionsModals } from "@/components/modals/share-actions-modals"; import { ShareDetailsModal } from "@/components/modals/share-details-modal"; import { UploadFileModal } from "@/components/modals/upload-file-modal"; +import { DashboardModalsProps } from "../types"; export function DashboardModals({ modals, fileManager, shareManager, onSuccess }: DashboardModalsProps) { return ( diff --git a/apps/web/src/app/dashboard/page.tsx b/apps/web/src/app/dashboard/page.tsx new file mode 100644 index 0000000..bdc1689 --- /dev/null +++ b/apps/web/src/app/dashboard/page.tsx @@ -0,0 +1,72 @@ +"use client"; + +import { IconLayoutDashboardFilled } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { ProtectedRoute } from "@/components/auth/protected-route"; +import { FileManagerLayout } from "@/components/layout/file-manager-layout"; +import { LoadingScreen } from "@/components/layout/loading-screen"; +import { QuickAccessCards } from "./components/quick-access-cards"; +import { RecentFiles } from "./components/recent-files"; +import { RecentShares } from "./components/recent-shares"; +import { StorageUsage } from "./components/storage-usage"; +import { useDashboard } from "./hooks/use-dashboard"; +import { DashboardModals } from "./modals/dashboard-modals"; + +export default function DashboardPage() { + const t = useTranslations(); + + const { + isLoading, + diskSpace, + recentFiles, + recentShares, + modals, + fileManager, + shareManager, + handleCopyLink, + loadDashboardData, + } = useDashboard(); + + if (isLoading) { + return ; + } + + return ( + + } + showBreadcrumb={false} + title={t("dashboard.pageTitle")} + > + + + +
    + + + +
    + + +
    +
    + ); +} diff --git a/apps/web/src/pages/dashboard/types/index.ts b/apps/web/src/app/dashboard/types/index.ts similarity index 100% rename from apps/web/src/pages/dashboard/types/index.ts rename to apps/web/src/app/dashboard/types/index.ts diff --git a/apps/web/src/pages/dashboard/utils/format-storage-size.ts b/apps/web/src/app/dashboard/utils/format-storage-size.ts similarity index 100% rename from apps/web/src/pages/dashboard/utils/format-storage-size.ts rename to apps/web/src/app/dashboard/utils/format-storage-size.ts diff --git a/apps/web/favicon.ico b/apps/web/src/app/favicon.ico similarity index 100% rename from apps/web/favicon.ico rename to apps/web/src/app/favicon.ico diff --git a/apps/web/src/app/files/components/empty-state.tsx b/apps/web/src/app/files/components/empty-state.tsx new file mode 100644 index 0000000..6e7bef9 --- /dev/null +++ b/apps/web/src/app/files/components/empty-state.tsx @@ -0,0 +1,20 @@ +import { IconCloudUpload, IconFolder } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import type { EmptyStateProps } from "../types"; + +export function EmptyState({ onUpload }: EmptyStateProps) { + const t = useTranslations(); + + return ( +
    + +

    {t("emptyState.noFiles")}

    + +
    + ); +} diff --git a/apps/web/src/pages/files/components/file-list.tsx b/apps/web/src/app/files/components/file-list.tsx similarity index 91% rename from apps/web/src/pages/files/components/file-list.tsx rename to apps/web/src/app/files/components/file-list.tsx index 8321ada..30da5ad 100644 --- a/apps/web/src/pages/files/components/file-list.tsx +++ b/apps/web/src/app/files/components/file-list.tsx @@ -1,14 +1,14 @@ +import { FilesTable } from "@/components/tables/files-table"; +import { Card, CardContent } from "@/components/ui/card"; import { FileListProps } from "../types"; import { EmptyState } from "./empty-state"; import { Header } from "./header"; import { SearchBar } from "./search-bar"; -import { FilesTable } from "@/components/tables/files-table"; -import { Card, CardBody } from "@heroui/card"; export function FileList({ files, filteredFiles, fileManager, searchQuery, onSearch, onUpload }: FileListProps) { return ( - +
    )}
    -
    +
    ); } diff --git a/apps/web/src/pages/files/components/header.tsx b/apps/web/src/app/files/components/header.tsx similarity index 51% rename from apps/web/src/pages/files/components/header.tsx rename to apps/web/src/app/files/components/header.tsx index 07a844b..397ad45 100644 --- a/apps/web/src/pages/files/components/header.tsx +++ b/apps/web/src/app/files/components/header.tsx @@ -1,15 +1,17 @@ +import { IconCloudUpload } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; import type { HeaderProps } from "../types"; -import { Button } from "@heroui/button"; -import { useTranslation } from "react-i18next"; -import { FaCloudUploadAlt } from "react-icons/fa"; export function Header({ onUpload }: HeaderProps) { - const { t } = useTranslation(); + const t = useTranslations(); return (

    {t("files.title")}

    -
    diff --git a/apps/web/src/app/files/components/search-bar.tsx b/apps/web/src/app/files/components/search-bar.tsx new file mode 100644 index 0000000..ebb6fe0 --- /dev/null +++ b/apps/web/src/app/files/components/search-bar.tsx @@ -0,0 +1,28 @@ +import { IconSearch } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Input } from "@/components/ui/input"; +import type { SearchBarProps } from "../types"; + +export function SearchBar({ searchQuery, onSearch, totalFiles, filteredCount }: SearchBarProps) { + const t = useTranslations(); + + return ( +
    +
    + + onSearch(e.target.value)} + /> +
    + {searchQuery && ( + + {t("searchBar.results", { filtered: filteredCount, total: totalFiles })} + + )} +
    + ); +} diff --git a/apps/web/src/pages/files/hooks/use-files.ts b/apps/web/src/app/files/hooks/use-files.ts similarity index 80% rename from apps/web/src/pages/files/hooks/use-files.ts rename to apps/web/src/app/files/hooks/use-files.ts index ec9fcb2..17c4f49 100644 --- a/apps/web/src/pages/files/hooks/use-files.ts +++ b/apps/web/src/app/files/hooks/use-files.ts @@ -1,16 +1,18 @@ -import { useFileManager } from "@/hooks/use-file-manager"; -import { listFiles } from "@/http/endpoints"; -import { useDisclosure } from "@heroui/modal"; +"use client"; + import { useEffect, useState } from "react"; -import { useTranslation } from "react-i18next"; +import { useTranslations } from "next-intl"; import { toast } from "sonner"; +import { useFileManager } from "@/hooks/use-file-manager"; +import { listFiles } from "@/http/endpoints"; + export function useFiles() { - const { t } = useTranslation(); + const t = useTranslations(); const [files, setFiles] = useState([]); const [isLoading, setIsLoading] = useState(true); const [searchQuery, setSearchQuery] = useState(""); - const { isOpen: isUploadModalOpen, onOpen: onOpenUploadModal, onClose: onCloseUploadModal } = useDisclosure(); + const [isUploadModalOpen, setIsUploadModalOpen] = useState(false); const loadFiles = async () => { try { @@ -42,8 +44,8 @@ export function useFiles() { searchQuery, modals: { isUploadModalOpen, - onOpenUploadModal, - onCloseUploadModal, + onOpenUploadModal: () => setIsUploadModalOpen(true), + onCloseUploadModal: () => setIsUploadModalOpen(false), }, fileManager, filteredFiles, diff --git a/apps/web/src/app/files/layout.tsx b/apps/web/src/app/files/layout.tsx new file mode 100644 index 0000000..ac935b9 --- /dev/null +++ b/apps/web/src/app/files/layout.tsx @@ -0,0 +1,18 @@ +import { Metadata } from "next"; +import { getTranslations } from "next-intl/server"; + +interface LayoutProps { + children: React.ReactNode; +} + +export async function generateMetadata(): Promise { + const t = await getTranslations(); + + return { + title: `${t("files.pageTitle")} `, + }; +} + +export default function FilesLayout({ children }: LayoutProps) { + return <>{children}; +} diff --git a/apps/web/src/pages/files/modals/files-modals.tsx b/apps/web/src/app/files/modals/files-modals.tsx similarity index 100% rename from apps/web/src/pages/files/modals/files-modals.tsx rename to apps/web/src/app/files/modals/files-modals.tsx index 51d4030..df54ce6 100644 --- a/apps/web/src/pages/files/modals/files-modals.tsx +++ b/apps/web/src/app/files/modals/files-modals.tsx @@ -1,7 +1,7 @@ -import type { FilesModalsProps } from "../types"; import { FileActionsModals } from "@/components/modals/file-actions-modals"; import { FilePreviewModal } from "@/components/modals/file-preview-modal"; import { UploadFileModal } from "@/components/modals/upload-file-modal"; +import type { FilesModalsProps } from "../types"; export function FilesModals({ fileManager, modals, onSuccess }: FilesModalsProps) { return ( diff --git a/apps/web/src/app/files/page.tsx b/apps/web/src/app/files/page.tsx new file mode 100644 index 0000000..56832bc --- /dev/null +++ b/apps/web/src/app/files/page.tsx @@ -0,0 +1,42 @@ +"use client"; + +import { IconFolderOpen } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { ProtectedRoute } from "@/components/auth/protected-route"; +import { FileManagerLayout } from "@/components/layout/file-manager-layout"; +import { LoadingScreen } from "@/components/layout/loading-screen"; +import { FileList } from "./components/file-list"; +import { useFiles } from "./hooks/use-files"; +import { FilesModals } from "./modals/files-modals"; + +export default function FilesPage() { + const t = useTranslations(); + + const { isLoading, files, searchQuery, modals, fileManager, filteredFiles, handleSearch, loadFiles } = useFiles(); + + if (isLoading) { + return ; + } + + return ( + + } + title={t("files.pageTitle")} + > + + + + + + ); +} diff --git a/apps/web/src/pages/files/types/index.ts b/apps/web/src/app/files/types/index.ts similarity index 100% rename from apps/web/src/pages/files/types/index.ts rename to apps/web/src/app/files/types/index.ts diff --git a/apps/web/src/app/forgot-password/components/forgot-password-form.tsx b/apps/web/src/app/forgot-password/components/forgot-password-form.tsx new file mode 100644 index 0000000..48d490e --- /dev/null +++ b/apps/web/src/app/forgot-password/components/forgot-password-form.tsx @@ -0,0 +1,48 @@ +import Link from "next/link"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; +import { ForgotPasswordFormProps } from "../types"; + +export function ForgotPasswordForm({ form, onSubmit }: ForgotPasswordFormProps) { + const t = useTranslations(); + const isSubmitting = form.formState.isSubmitting; + + return ( +
    + + ( + + {t("forgotPassword.emailLabel")} + + + + + + )} + /> + + + +
    + + {t("forgotPassword.backToLogin")} + +
    + + + ); +} diff --git a/apps/web/src/pages/forgot-password/components/forgot-password-header.tsx b/apps/web/src/app/forgot-password/components/forgot-password-header.tsx similarity index 51% rename from apps/web/src/pages/forgot-password/components/forgot-password-header.tsx rename to apps/web/src/app/forgot-password/components/forgot-password-header.tsx index 029cc37..07eea69 100644 --- a/apps/web/src/pages/forgot-password/components/forgot-password-header.tsx +++ b/apps/web/src/app/forgot-password/components/forgot-password-header.tsx @@ -1,16 +1,16 @@ -import { useTranslation } from "react-i18next"; -import { RiLockPasswordFill } from "react-icons/ri"; +import { IconLock } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; export function ForgotPasswordHeader() { - const { t } = useTranslation(); + const t = useTranslations(); return (
    - +

    {t("forgotPassword.title")}

    -

    {t("forgotPassword.description")}

    +

    {t("forgotPassword.description")}

    ); } diff --git a/apps/web/src/pages/forgot-password/hooks/use-forgot-password.ts b/apps/web/src/app/forgot-password/hooks/use-forgot-password.ts similarity index 83% rename from apps/web/src/pages/forgot-password/hooks/use-forgot-password.ts rename to apps/web/src/app/forgot-password/hooks/use-forgot-password.ts index fc7e762..f35af22 100644 --- a/apps/web/src/pages/forgot-password/hooks/use-forgot-password.ts +++ b/apps/web/src/app/forgot-password/hooks/use-forgot-password.ts @@ -1,19 +1,22 @@ -import { requestPasswordReset } from "@/http/endpoints"; +"use client"; + +import { useRouter } from "next/navigation"; import { zodResolver } from "@hookform/resolvers/zod"; import axios from "axios"; +import { useTranslations } from "next-intl"; import { useForm } from "react-hook-form"; -import { useTranslation } from "react-i18next"; -import { useNavigate } from "react-router-dom"; import { toast } from "sonner"; import { z } from "zod"; +import { requestPasswordReset } from "@/http/endpoints"; + export type ForgotPasswordFormData = { email: string; }; export function useForgotPassword() { - const { t } = useTranslation(); - const navigate = useNavigate(); + const t = useTranslations(); + const router = useRouter(); const forgotPasswordSchema = z.object({ email: z.string().email(t("validation.invalidEmail")), @@ -27,7 +30,7 @@ export function useForgotPassword() { try { await requestPasswordReset(data); toast.success(t("forgotPassword.resetInstructions")); - navigate("/login"); + router.push("/login"); } catch (err) { if (axios.isAxiosError(err) && err.response?.data?.message) { toast.error(t(err.response.data.message)); diff --git a/apps/web/src/app/forgot-password/layout.tsx b/apps/web/src/app/forgot-password/layout.tsx new file mode 100644 index 0000000..b66218e --- /dev/null +++ b/apps/web/src/app/forgot-password/layout.tsx @@ -0,0 +1,18 @@ +import { Metadata } from "next"; +import { getTranslations } from "next-intl/server"; + +interface LayoutProps { + children: React.ReactNode; +} + +export async function generateMetadata(): Promise { + const t = await getTranslations(); + + return { + title: `${t("forgotPassword.pageTitle")}`, + }; +} + +export default function ForgotPasswordLayout({ children }: LayoutProps) { + return <>{children}; +} diff --git a/apps/web/src/pages/forgot-password/page.tsx b/apps/web/src/app/forgot-password/page.tsx similarity index 78% rename from apps/web/src/pages/forgot-password/page.tsx rename to apps/web/src/app/forgot-password/page.tsx index 115fc73..d421b01 100644 --- a/apps/web/src/pages/forgot-password/page.tsx +++ b/apps/web/src/app/forgot-password/page.tsx @@ -1,24 +1,20 @@ +"use client"; + +import { motion } from "framer-motion"; + +import { DefaultFooter } from "@/components/ui/default-footer"; import { StaticBackgroundLights } from "../login/components/static-background-lights"; import { ForgotPasswordForm } from "./components/forgot-password-form"; import { ForgotPasswordHeader } from "./components/forgot-password-header"; import { useForgotPassword } from "./hooks/use-forgot-password"; -import { DefaultFooter } from "@/components/ui/default-footer"; -import { GridPattern } from "@/components/ui/grid-pattern"; -import { usePageTitle } from "@/hooks/use-page-title"; -import { motion } from "framer-motion"; -import { useTranslation } from "react-i18next"; -export function ForgotPasswordPage() { - const { t } = useTranslation(); - - usePageTitle(t("forgotPassword.pageTitle")); +export default function ForgotPasswordPage() { const forgotPassword = useForgotPassword(); return (
    -
    ; onSubmit: (data: ForgotPasswordFormData) => Promise; diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css new file mode 100644 index 0000000..fa695d8 --- /dev/null +++ b/apps/web/src/app/globals.css @@ -0,0 +1,122 @@ +@import "tailwindcss"; +@import "tw-animate-css"; + +@custom-variant dark (&:is(.dark *)); + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --font-sans: var(--font-geist-sans); + --font-mono: var(--font-geist-mono); + --color-sidebar-ring: var(--sidebar-ring); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar: var(--sidebar); + --color-chart-5: var(--chart-5); + --color-chart-4: var(--chart-4); + --color-chart-3: var(--chart-3); + --color-chart-2: var(--chart-2); + --color-chart-1: var(--chart-1); + --color-ring: var(--ring); + --color-input: var(--input); + --color-border: var(--border); + --color-destructive: var(--destructive); + --color-accent-foreground: var(--accent-foreground); + --color-accent: var(--accent); + --color-muted-foreground: var(--muted-foreground); + --color-muted: var(--muted); + --color-secondary-foreground: var(--secondary-foreground); + --color-secondary: var(--secondary); + --color-primary-foreground: var(--primary-foreground); + --color-primary: var(--primary); + --color-popover-foreground: var(--popover-foreground); + --color-popover: var(--popover); + --color-card-foreground: var(--card-foreground); + --color-card: var(--card); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); +} + +:root { + --radius: 0.75rem; + --background: oklch(1 0 0); + --foreground: oklch(0.141 0.005 285.823); + --card: oklch(1 0 0); + --card-foreground: oklch(0.141 0.005 285.823); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.141 0.005 285.823); + --primary: oklch(0.723 0.219 149.579); + --primary-foreground: oklch(0.982 0.018 155.826); + --secondary: oklch(0.967 0.001 286.375); + --secondary-foreground: oklch(0.21 0.006 285.885); + --muted: oklch(0.967 0.001 286.375); + --muted-foreground: oklch(0.552 0.016 285.938); + --accent: oklch(0.967 0.001 286.375); + --accent-foreground: oklch(0.21 0.006 285.885); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.92 0.004 286.32); + --input: oklch(0.92 0.004 286.32); + --ring: oklch(0.723 0.219 149.579); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.141 0.005 285.823); + --sidebar-primary: oklch(0.723 0.219 149.579); + --sidebar-primary-foreground: oklch(0.982 0.018 155.826); + --sidebar-accent: oklch(0.967 0.001 286.375); + --sidebar-accent-foreground: oklch(0.21 0.006 285.885); + --sidebar-border: oklch(0.92 0.004 286.32); + --sidebar-ring: oklch(0.723 0.219 149.579); +} + +.dark { + --background: oklch(0 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.21 0.006 285.885); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.21 0.006 285.885); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.723 0.219 149.579); + --primary-foreground: oklch(0.393 0.095 152.535); + --secondary: oklch(0.274 0.006 286.033); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.274 0.006 286.033); + --muted-foreground: oklch(0.705 0.015 286.067); + --accent: oklch(0.274 0.006 286.033); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 15%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.527 0.154 150.069); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.723 0.219 149.579); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.21 0.006 285.885); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.723 0.219 149.579); + --sidebar-primary-foreground: oklch(0.393 0.095 152.535); + --sidebar-accent: oklch(0.274 0.006 286.033); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.527 0.154 150.069); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx new file mode 100644 index 0000000..b67fbcd --- /dev/null +++ b/apps/web/src/app/layout.tsx @@ -0,0 +1,56 @@ +import { Geist, Geist_Mono } from "next/font/google"; +import { NextIntlClientProvider } from "next-intl"; +import { getLocale } from "next-intl/server"; + +import "./globals.css"; + +import { Toaster } from "sonner"; + +import { Favicon } from "@/components/layout/favicon"; +import { useAppInfo } from "@/contexts/app-info-context"; +import { AuthProvider } from "@/contexts/auth-context"; +import { ShareProvider } from "@/contexts/share-context"; +import { ThemeProvider } from "../providers/theme-provider"; + +const geistSans = Geist({ + variable: "--font-geist-sans", + subsets: ["latin"], +}); + +const geistMono = Geist_Mono({ + variable: "--font-geist-mono", + subsets: ["latin"], +}); + +export default async function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + const locale = await getLocale(); + const isRTL = locale === "ar-SA"; + + if (typeof window !== "undefined") { + useAppInfo.getState().refreshAppInfo(); + } + + return ( + + + + + + + + + + {children} + + + + + + + + ); +} diff --git a/apps/web/src/app/login/components/login-form.tsx b/apps/web/src/app/login/components/login-form.tsx new file mode 100644 index 0000000..b9632a5 --- /dev/null +++ b/apps/web/src/app/login/components/login-form.tsx @@ -0,0 +1,106 @@ +import Link from "next/link"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useTranslations } from "next-intl"; +import { useForm } from "react-hook-form"; + +import { Button } from "@/components/ui/button"; +import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; +import { createLoginSchema, type LoginFormValues } from "../schemas/schema"; +import { PasswordVisibilityToggle } from "./password-visibility-toggle"; + +interface LoginFormProps { + error?: string; + isVisible: boolean; + onToggleVisibility: () => void; + onSubmit: (data: LoginFormValues) => Promise; +} + +export function LoginForm({ error, isVisible, onToggleVisibility, onSubmit }: LoginFormProps) { + const t = useTranslations(); + const loginSchema = createLoginSchema(t); + const form = useForm({ + resolver: zodResolver(loginSchema), + defaultValues: { + email: "", + password: "", + }, + }); + + const isSubmitting = form.formState.isSubmitting; + + const renderErrorMessage = () => + error && ( +

    + {error.replace("errors.", "")} +

    + ); + + const renderEmailField = () => ( + ( + + {t("login.emailLabel")} + + + + + + )} + /> + ); + + const renderPasswordField = () => ( + ( + + {t("login.passwordLabel")} + +
    + + +
    +
    + +
    + )} + /> + ); + + return ( + <> + {renderErrorMessage()} +
    + + {renderEmailField()} + {renderPasswordField()} + +
    + + +
    + + {t("login.forgotPassword")} + +
    + + ); +} diff --git a/apps/web/src/app/login/components/login-header.tsx b/apps/web/src/app/login/components/login-header.tsx new file mode 100644 index 0000000..8b641fb --- /dev/null +++ b/apps/web/src/app/login/components/login-header.tsx @@ -0,0 +1,28 @@ +import { useEffect } from "react"; +import { motion } from "framer-motion"; +import { useTranslations } from "next-intl"; + +import { useAppInfo } from "@/contexts/app-info-context"; + +export function LoginHeader() { + const t = useTranslations(); + const { appName, refreshAppInfo } = useAppInfo(); + + useEffect(() => { + refreshAppInfo(); + }, [refreshAppInfo]); + + return ( + +

    + {t("login.welcome")} {appName} +

    +

    {t("login.signInToContinue")}

    +
    + ); +} diff --git a/apps/web/src/app/login/components/password-visibility-toggle.tsx b/apps/web/src/app/login/components/password-visibility-toggle.tsx new file mode 100644 index 0000000..fa12fa6 --- /dev/null +++ b/apps/web/src/app/login/components/password-visibility-toggle.tsx @@ -0,0 +1,25 @@ +import { IconEye, IconEyeClosed } from "@tabler/icons-react"; + +import { Button } from "@/components/ui/button"; + +interface PasswordVisibilityToggleProps { + isVisible: boolean; + onToggle: () => void; +} + +export function PasswordVisibilityToggle({ isVisible, onToggle }: PasswordVisibilityToggleProps) { + return ( + + ); +} diff --git a/apps/web/src/pages/login/components/static-background-lights.tsx b/apps/web/src/app/login/components/static-background-lights.tsx similarity index 100% rename from apps/web/src/pages/login/components/static-background-lights.tsx rename to apps/web/src/app/login/components/static-background-lights.tsx diff --git a/apps/web/src/app/login/hooks/use-login.ts b/apps/web/src/app/login/hooks/use-login.ts new file mode 100644 index 0000000..06ff14c --- /dev/null +++ b/apps/web/src/app/login/hooks/use-login.ts @@ -0,0 +1,87 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { useRouter } from "next/navigation"; +import axios from "axios"; +import { useTranslations } from "next-intl"; +import { z } from "zod"; + +import { useAuth } from "@/contexts/auth-context"; +import { getCurrentUser, login } from "@/http/endpoints"; +import { LoginFormValues } from "../schemas/schema"; + +export const loginSchema = z.object({ + email: z.string(), + password: z.string(), +}); + +export type LoginFormData = z.infer; + +export function useLogin() { + const router = useRouter(); + const t = useTranslations(); + const { isAuthenticated, setUser, setIsAdmin, setIsAuthenticated } = useAuth(); + const [isVisible, setIsVisible] = useState(false); + const [error, setError] = useState(); + const [isInitialized, setIsInitialized] = useState(false); + + useEffect(() => { + const checkAuth = async () => { + try { + const userResponse = await getCurrentUser(); + if (!userResponse?.data?.user) { + throw new Error("No user data"); + } + + const { isAdmin, ...userData } = userResponse.data.user; + setUser(userData); + setIsAdmin(isAdmin); + setIsAuthenticated(true); + router.push("/dashboard"); + } catch (err) { + console.error(err); + setUser(null); + setIsAdmin(false); + setIsAuthenticated(false); + } finally { + setIsInitialized(true); + } + }; + + checkAuth(); + }, [router, setUser, setIsAdmin, setIsAuthenticated]); + + const toggleVisibility = () => setIsVisible(!isVisible); + + const onSubmit = async (data: LoginFormValues) => { + setError(undefined); + + try { + await login(data); + const userResponse = await getCurrentUser(); + const { isAdmin, ...userData } = userResponse.data.user; + + setUser(userData); + setIsAdmin(isAdmin); + setIsAuthenticated(true); + router.replace("/dashboard"); + } catch (err) { + if (axios.isAxiosError(err) && err.response?.data?.error) { + setError(t(`errors.${err.response.data.error}`)); + } else { + setError(t("errors.unexpectedError")); + } + setIsAuthenticated(false); + setUser(null); + setIsAdmin(false); + } + }; + + return { + isAuthenticated: !isInitialized ? null : isAuthenticated, + error, + isVisible, + toggleVisibility, + onSubmit, + }; +} diff --git a/apps/web/src/app/login/layout.tsx b/apps/web/src/app/login/layout.tsx new file mode 100644 index 0000000..31aba1d --- /dev/null +++ b/apps/web/src/app/login/layout.tsx @@ -0,0 +1,18 @@ +import { Metadata } from "next"; +import { getTranslations } from "next-intl/server"; + +interface LayoutProps { + children: React.ReactNode; +} + +export async function generateMetadata(): Promise { + const t = await getTranslations(); + + return { + title: `${t("login.pageTitle")} `, + }; +} + +export default function LoginLayout({ children }: LayoutProps) { + return <>{children}; +} diff --git a/apps/web/src/pages/login/page.tsx b/apps/web/src/app/login/page.tsx similarity index 77% rename from apps/web/src/pages/login/page.tsx rename to apps/web/src/app/login/page.tsx index 91170a3..378ee0a 100644 --- a/apps/web/src/pages/login/page.tsx +++ b/apps/web/src/app/login/page.tsx @@ -1,19 +1,16 @@ +"use client"; + +import { motion } from "framer-motion"; + +import { LanguageSwitcher } from "@/components/general/language-switcher"; +import { LoadingScreen } from "@/components/layout/loading-screen"; +import { DefaultFooter } from "@/components/ui/default-footer"; import { LoginForm } from "./components/login-form"; import { LoginHeader } from "./components/login-header"; import { StaticBackgroundLights } from "./components/static-background-lights"; import { useLogin } from "./hooks/use-login"; -import { LoadingScreen } from "@/components/layout/loading-screen"; -import { DefaultFooter } from "@/components/ui/default-footer"; -import { GridPattern } from "@/components/ui/grid-pattern"; -import { usePageTitle } from "@/hooks/use-page-title"; -import { motion } from "framer-motion"; -import { useTranslation } from "react-i18next"; - -export function LoginPage() { - const { t } = useTranslation(); - - usePageTitle(t("login.pageTitle")); +export default function LoginPage() { const login = useLogin(); if (login.isAuthenticated === null) { @@ -22,20 +19,22 @@ export function LoginPage() { return (
    +
    + +
    +
    -
    ; + +export const createLoginSchema = (t: TFunction) => + z.object({ + email: z.string().min(1, t("validation.emailRequired")).email(t("validation.invalidEmail")), + password: z.string().min(1, t("validation.passwordRequired")), + }); + +export type LoginFormValues = z.infer>; diff --git a/apps/web/src/pages/login/types/index.ts b/apps/web/src/app/login/types/index.ts similarity index 99% rename from apps/web/src/pages/login/types/index.ts rename to apps/web/src/app/login/types/index.ts index d98fa6f..8853e6c 100644 --- a/apps/web/src/pages/login/types/index.ts +++ b/apps/web/src/app/login/types/index.ts @@ -1,6 +1,7 @@ -import { LoginFormData } from "../hooks/use-login"; import { UseFormReturn } from "react-hook-form"; +import { LoginFormData } from "../hooks/use-login"; + export interface LoginFormProps { form: UseFormReturn; error: string | null; diff --git a/apps/web/src/app/profile/components/password-form.tsx b/apps/web/src/app/profile/components/password-form.tsx new file mode 100644 index 0000000..3dee8dd --- /dev/null +++ b/apps/web/src/app/profile/components/password-form.tsx @@ -0,0 +1,79 @@ +import { IconEye, IconEyeClosed, IconLock } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { PasswordFormProps } from "../types"; + +export function PasswordForm({ + form, + isNewPasswordVisible, + isConfirmPasswordVisible, + onToggleNewPassword, + onToggleConfirmPassword, + onSubmit, +}: PasswordFormProps) { + const t = useTranslations(); + const { + register, + handleSubmit, + formState: { errors, isSubmitting }, + } = form; + + return ( + + +

    {t("profile.password.title")}

    +
    + +
    +
    + + + {errors.newPassword &&

    {errors.newPassword.message}

    } +
    + +
    + + + {errors.confirmPassword && ( +

    {errors.confirmPassword.message}

    + )} +
    + +
    + +
    +
    +
    +
    + ); +} diff --git a/apps/web/src/app/profile/components/profile-form.tsx b/apps/web/src/app/profile/components/profile-form.tsx new file mode 100644 index 0000000..939d7fe --- /dev/null +++ b/apps/web/src/app/profile/components/profile-form.tsx @@ -0,0 +1,77 @@ +import { IconUserEdit } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader } from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { ProfileFormProps } from "../types"; + +export function ProfileForm({ form, onSubmit }: ProfileFormProps) { + const t = useTranslations(); + const { + register, + handleSubmit, + formState: { errors, isSubmitting }, + } = form; + + return ( + + +

    {t("profile.form.title")}

    +
    + +
    +
    +
    + + {errors.firstName && {errors.firstName.message}} +
    +
    + + {errors.lastName && {errors.lastName.message}} +
    +
    +
    + + {errors.username && {errors.username.message}} +
    +
    + + {errors.email && {errors.email.message}} +
    +
    + +
    +
    +
    +
    + ); +} diff --git a/apps/web/src/app/profile/components/profile-header.tsx b/apps/web/src/app/profile/components/profile-header.tsx new file mode 100644 index 0000000..26afe32 --- /dev/null +++ b/apps/web/src/app/profile/components/profile-header.tsx @@ -0,0 +1,44 @@ +import Link from "next/link"; +import { IconLayoutDashboard, IconUser } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbSeparator, +} from "@/components/ui/breadcrumb"; +import { Separator } from "@/components/ui/separator"; + +export function ProfileHeader() { + const t = useTranslations(); + + return ( +
    +
    + +

    {t("profile.header.title")}

    +
    + + + + + + + + {t("navigation.dashboard")} + + + + + + + {t("profile.header.title")} + + + + +
    + ); +} diff --git a/apps/web/src/app/profile/components/profile-picture.tsx b/apps/web/src/app/profile/components/profile-picture.tsx new file mode 100644 index 0000000..8c1b470 --- /dev/null +++ b/apps/web/src/app/profile/components/profile-picture.tsx @@ -0,0 +1,84 @@ +"use client"; + +import { useRef } from "react"; +import { IconCamera, IconTrash } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { Button } from "@/components/ui/button"; +import { Card, CardHeader } from "@/components/ui/card"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { Input } from "@/components/ui/input"; +import type { ProfilePictureProps } from "../types"; + +export function ProfilePicture({ userData, onImageChange, onImageRemove }: ProfilePictureProps) { + const t = useTranslations(); + const fileInputRef = useRef(null); + + const handleAvatarClick = () => { + fileInputRef.current?.click(); + }; + + const handleFileChange = (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + + if (file) { + onImageChange(file); + } + }; + + return ( + + +
    + + + + {userData?.firstName + ? userData.firstName + .split(" ") + .map((firstName) => firstName[0]) + .join("") + .toUpperCase() + : ""} + + + + + + + + {!!userData?.image ? ( + + + {t("profile.picture.removePhoto")} + + ) : ( + + + {t("profile.picture.uploadPhoto")} + + )} + + + +
    +
    +

    {t("profile.picture.title")}

    +

    {t("profile.picture.description")}

    +
    +
    +
    + ); +} diff --git a/apps/web/src/pages/profile/hooks/use-profile.ts b/apps/web/src/app/profile/hooks/use-profile.ts similarity index 95% rename from apps/web/src/pages/profile/hooks/use-profile.ts rename to apps/web/src/app/profile/hooks/use-profile.ts index 4e94449..29a8a71 100644 --- a/apps/web/src/pages/profile/hooks/use-profile.ts +++ b/apps/web/src/app/profile/hooks/use-profile.ts @@ -1,14 +1,16 @@ -import { useAuth } from "@/contexts/auth-context"; -import { getCurrentUser, updateUser, uploadAvatar, removeAvatar } from "@/http/endpoints"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { TFunction } from "i18next"; +"use client"; + import { useEffect, useState } from "react"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useTranslations } from "next-intl"; import { useForm } from "react-hook-form"; -import { useTranslation } from "react-i18next"; import { toast } from "sonner"; import { z } from "zod"; -const createSchemas = (t: TFunction) => ({ +import { useAuth } from "@/contexts/auth-context"; +import { getCurrentUser, removeAvatar, updateUser, uploadAvatar } from "@/http/endpoints"; + +const createSchemas = (t: (key: string) => string) => ({ profileSchema: z.object({ firstName: z.string().min(1, t("validation.firstNameRequired")), lastName: z.string().min(1, t("validation.lastNameRequired")), @@ -34,7 +36,7 @@ export type PasswordFormData = z.infer["passwor export type ProfileFormData = z.infer["profileSchema"]>; export function useProfile() { - const { t } = useTranslation(); + const t = useTranslations(); const { profileSchema, passwordSchema } = createSchemas(t); const { setUser } = useAuth(); diff --git a/apps/web/src/app/profile/layout.tsx b/apps/web/src/app/profile/layout.tsx new file mode 100644 index 0000000..0fd4b28 --- /dev/null +++ b/apps/web/src/app/profile/layout.tsx @@ -0,0 +1,18 @@ +import { Metadata } from "next"; +import { getTranslations } from "next-intl/server"; + +interface LayoutProps { + children: React.ReactNode; +} + +export async function generateMetadata(): Promise { + const t = await getTranslations(); + + return { + title: `${t("profile.pageTitle")}`, + }; +} + +export default function ProfileLayout({ children }: LayoutProps) { + return <>{children}; +} diff --git a/apps/web/src/app/profile/page.tsx b/apps/web/src/app/profile/page.tsx new file mode 100644 index 0000000..b71b3e9 --- /dev/null +++ b/apps/web/src/app/profile/page.tsx @@ -0,0 +1,49 @@ +"use client"; + +import { ProtectedRoute } from "@/components/auth/protected-route"; +import { LoadingScreen } from "@/components/layout/loading-screen"; +import { Navbar } from "@/components/layout/navbar"; +import { DefaultFooter } from "@/components/ui/default-footer"; +import { PasswordForm } from "./components/password-form"; +import { ProfileForm } from "./components/profile-form"; +import { ProfileHeader } from "./components/profile-header"; +import { ProfilePicture } from "./components/profile-picture"; +import { useProfile } from "./hooks/use-profile"; + +export default function ProfilePage() { + const profile = useProfile(); + + if (profile.isLoading) { + return ; + } + + return ( + +
    + +
    +
    + +
    + + + profile.setIsConfirmPasswordVisible(!profile.isConfirmPasswordVisible)} + onToggleNewPassword={() => profile.setIsNewPasswordVisible(!profile.isNewPasswordVisible)} + /> +
    +
    +
    + +
    +
    + ); +} diff --git a/apps/web/src/pages/profile/types/index.ts b/apps/web/src/app/profile/types/index.ts similarity index 99% rename from apps/web/src/pages/profile/types/index.ts rename to apps/web/src/app/profile/types/index.ts index b36ba96..023a0da 100644 --- a/apps/web/src/pages/profile/types/index.ts +++ b/apps/web/src/app/profile/types/index.ts @@ -1,6 +1,7 @@ -import { PasswordFormData, ProfileFormData } from "../hooks/use-profile"; import { UseFormReturn } from "react-hook-form"; +import { PasswordFormData, ProfileFormData } from "../hooks/use-profile"; + export interface PasswordFormProps { form: UseFormReturn; isNewPasswordVisible: boolean; diff --git a/apps/web/src/app/reset-password/components/reset-password-form.tsx b/apps/web/src/app/reset-password/components/reset-password-form.tsx new file mode 100644 index 0000000..f211a01 --- /dev/null +++ b/apps/web/src/app/reset-password/components/reset-password-form.tsx @@ -0,0 +1,94 @@ +import Link from "next/link"; +import { IconEye, IconEyeOff } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; +import { ResetPasswordFormProps } from "../types"; + +export function ResetPasswordForm({ + form, + isPasswordVisible, + isConfirmPasswordVisible, + onTogglePassword, + onToggleConfirmPassword, + onSubmit, +}: ResetPasswordFormProps) { + const t = useTranslations(); + const isSubmitting = form.formState.isSubmitting; + + return ( +
    + + ( + + {t("resetPassword.form.newPassword")} + +
    + + +
    +
    + +
    + )} + /> + + ( + + {t("resetPassword.form.confirmPassword")} + +
    + + +
    +
    + +
    + )} + /> + + + +
    + + {t("resetPassword.form.backToLogin")} + +
    + + + ); +} diff --git a/apps/web/src/pages/reset-password/components/reset-password-header.tsx b/apps/web/src/app/reset-password/components/reset-password-header.tsx similarity index 66% rename from apps/web/src/pages/reset-password/components/reset-password-header.tsx rename to apps/web/src/app/reset-password/components/reset-password-header.tsx index 2a5f05e..57dbde1 100644 --- a/apps/web/src/pages/reset-password/components/reset-password-header.tsx +++ b/apps/web/src/app/reset-password/components/reset-password-header.tsx @@ -1,13 +1,13 @@ -import { useTranslation } from "react-i18next"; -import { RiLockPasswordFill } from "react-icons/ri"; +import { IconLock } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; export function ResetPasswordHeader() { - const { t } = useTranslation(); + const t = useTranslations(); return (
    - +

    {t("resetPassword.header.title")}

    {t("resetPassword.header.description")}

    diff --git a/apps/web/src/pages/reset-password/hooks/use-reset-password.ts b/apps/web/src/app/reset-password/hooks/use-reset-password.ts similarity index 83% rename from apps/web/src/pages/reset-password/hooks/use-reset-password.ts rename to apps/web/src/app/reset-password/hooks/use-reset-password.ts index d53f02e..18e1676 100644 --- a/apps/web/src/pages/reset-password/hooks/use-reset-password.ts +++ b/apps/web/src/app/reset-password/hooks/use-reset-password.ts @@ -1,15 +1,17 @@ -import { resetPassword } from "@/http/endpoints"; +"use client"; + +import { useState } from "react"; +import { useRouter, useSearchParams } from "next/navigation"; import { zodResolver } from "@hookform/resolvers/zod"; import axios from "axios"; -import { TFunction } from "i18next"; -import { useState } from "react"; +import { useTranslations } from "next-intl"; import { useForm } from "react-hook-form"; -import { useTranslation } from "react-i18next"; -import { useNavigate, useSearchParams } from "react-router-dom"; import { toast } from "sonner"; import { z } from "zod"; -const createSchema = (t: TFunction) => +import { resetPassword } from "@/http/endpoints"; + +const createSchema = (t: (key: string) => string) => z .object({ password: z.string().min(8, t("validation.passwordLength")), @@ -23,10 +25,10 @@ const createSchema = (t: TFunction) => export type ResetPasswordFormData = z.infer>; export function useResetPassword() { - const { t } = useTranslation(); + const t = useTranslations(); const schema = createSchema(t); - const navigate = useNavigate(); - const [searchParams] = useSearchParams(); + const router = useRouter(); + const searchParams = useSearchParams(); const token = searchParams.get("token"); const [isPasswordVisible, setIsPasswordVisible] = useState(false); const [isConfirmPasswordVisible, setIsConfirmPasswordVisible] = useState(false); @@ -45,7 +47,7 @@ export function useResetPassword() { }); toast.success(t("resetPassword.messages.success")); - navigate("/login"); + router.push("/login"); } catch (err) { if (axios.isAxiosError(err) && err.response?.data?.error) { toast.error(t("resetPassword.errors.serverError")); diff --git a/apps/web/src/app/reset-password/layout.tsx b/apps/web/src/app/reset-password/layout.tsx new file mode 100644 index 0000000..82cb6d9 --- /dev/null +++ b/apps/web/src/app/reset-password/layout.tsx @@ -0,0 +1,18 @@ +import { Metadata } from "next"; +import { getTranslations } from "next-intl/server"; + +interface LayoutProps { + children: React.ReactNode; +} + +export async function generateMetadata(): Promise { + const t = await getTranslations(); + + return { + title: `${t("resetPassword.pageTitle")} `, + }; +} + +export default function ResetPasswordLayout({ children }: LayoutProps) { + return <>{children}; +} diff --git a/apps/web/src/pages/reset-password/page.tsx b/apps/web/src/app/reset-password/page.tsx similarity index 79% rename from apps/web/src/pages/reset-password/page.tsx rename to apps/web/src/app/reset-password/page.tsx index 5c4a24a..dffe5b6 100644 --- a/apps/web/src/pages/reset-password/page.tsx +++ b/apps/web/src/app/reset-password/page.tsx @@ -1,35 +1,34 @@ +"use client"; + +import { useEffect } from "react"; +import { useRouter } from "next/navigation"; +import { motion } from "framer-motion"; +import { useTranslations } from "next-intl"; +import { toast } from "sonner"; + +import { DefaultFooter } from "@/components/ui/default-footer"; import { StaticBackgroundLights } from "../login/components/static-background-lights"; import { ResetPasswordForm } from "./components/reset-password-form"; import { ResetPasswordHeader } from "./components/reset-password-header"; import { useResetPassword } from "./hooks/use-reset-password"; -import { DefaultFooter } from "@/components/ui/default-footer"; -import { GridPattern } from "@/components/ui/grid-pattern"; -import { usePageTitle } from "@/hooks/use-page-title"; -import { motion } from "framer-motion"; -import { useEffect } from "react"; -import { useTranslation } from "react-i18next"; -import { useNavigate } from "react-router-dom"; -import { toast } from "sonner"; -export function ResetPasswordPage() { - const { t } = useTranslation(); +export default function ResetPasswordPage() { + const t = useTranslations(); - usePageTitle(t("resetPassword.pageTitle")); - const navigate = useNavigate(); + const router = useRouter(); const resetPassword = useResetPassword(); useEffect(() => { if (!resetPassword.token) { toast.error(t("resetPassword.errors.invalidToken")); - navigate("/login"); + router.push("/login"); } - }, [resetPassword.token, navigate, t]); + }, [resetPassword.token, router, t]); return (
    -
    ; isPasswordVisible: boolean; diff --git a/apps/web/src/pages/settings/components/logo-input.tsx b/apps/web/src/app/settings/components/logo-input.tsx similarity index 72% rename from apps/web/src/pages/settings/components/logo-input.tsx rename to apps/web/src/app/settings/components/logo-input.tsx index 256a269..4cdba72 100644 --- a/apps/web/src/pages/settings/components/logo-input.tsx +++ b/apps/web/src/app/settings/components/logo-input.tsx @@ -1,11 +1,13 @@ +"use client"; + +import { useEffect, useRef, useState } from "react"; +import { IconCloudUpload, IconTrash } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; +import { toast } from "sonner"; + +import { Button } from "@/components/ui/button"; import { useAppInfo } from "@/contexts/app-info-context"; import { removeLogo, uploadLogo } from "@/http/endpoints"; -import { Button } from "@heroui/button"; -import { Image } from "@heroui/image"; -import { useEffect, useRef, useState } from "react"; -import { useTranslation } from "react-i18next"; -import { FaCloudUploadAlt, FaTrash } from "react-icons/fa"; -import { toast } from "sonner"; interface LogoInputProps { value?: string; @@ -14,7 +16,7 @@ interface LogoInputProps { } export function LogoInput({ value, onChange, isDisabled }: LogoInputProps) { - const { t } = useTranslation(); + const t = useTranslations(); const [isUploading, setIsUploading] = useState(false); const [currentLogo, setCurrentLogo] = useState(value); const fileInputRef = useRef(null); @@ -78,31 +80,22 @@ export function LogoInput({ value, onChange, isDisabled }: LogoInputProps) { {currentLogo ? (
    - {t("logo.labels.appLogo")} -
    ) : ( )} diff --git a/apps/web/src/pages/settings/components/settings-form.tsx b/apps/web/src/app/settings/components/settings-form.tsx similarity index 92% rename from apps/web/src/pages/settings/components/settings-form.tsx rename to apps/web/src/app/settings/components/settings-form.tsx index ceb2ab1..7ba737a 100644 --- a/apps/web/src/pages/settings/components/settings-form.tsx +++ b/apps/web/src/app/settings/components/settings-form.tsx @@ -1,5 +1,4 @@ -import { ValidGroup } from "../types"; -import { SettingsFormProps } from "../types"; +import { SettingsFormProps, ValidGroup } from "../types"; import { SettingsGroup } from "./settings-group"; const GROUP_ORDER: ValidGroup[] = ["general", "email", "security", "storage"]; diff --git a/apps/web/src/pages/settings/components/settings-group.tsx b/apps/web/src/app/settings/components/settings-group.tsx similarity index 63% rename from apps/web/src/pages/settings/components/settings-group.tsx rename to apps/web/src/app/settings/components/settings-group.tsx index 1074719..f7a11d7 100644 --- a/apps/web/src/pages/settings/components/settings-group.tsx +++ b/apps/web/src/app/settings/components/settings-group.tsx @@ -1,15 +1,16 @@ -import { createGroupMetadata, createFieldDescriptions } from "../constants"; +import React from "react"; +import { IconChevronDown, IconChevronUp, IconDeviceFloppy } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader } from "@/components/ui/card"; +import { Separator } from "@/components/ui/separator"; +import { createFieldDescriptions, createGroupMetadata } from "../constants"; import { SettingsGroupProps } from "../types"; import { SettingsInput } from "./settings-input"; -import { Button } from "@heroui/button"; -import { Card, CardBody, CardHeader } from "@heroui/card"; -import { Divider } from "@heroui/divider"; -import React from "react"; -import { useTranslation } from "react-i18next"; -import { FaChevronDown, FaChevronUp, FaSave } from "react-icons/fa"; export function SettingsGroup({ group, configs, form, isCollapsed, onToggleCollapse, onSubmit }: SettingsGroupProps) { - const { t } = useTranslation(); + const t = useTranslations(); const GROUP_METADATA = createGroupMetadata(t); const FIELD_DESCRIPTIONS = createFieldDescriptions(t); @@ -20,23 +21,30 @@ export function SettingsGroup({ group, configs, form, isCollapsed, onToggleColla return (
    - - + +
    - {metadata.icon && React.createElement(metadata.icon, { className: "text-xl text-gray-500" })} + {metadata.icon && React.createElement(metadata.icon, { className: "text-xl text-muted-foreground" })}

    {t(`settings.groups.${group}.title`, { defaultValue: metadata.title })}

    -

    +

    {t(`settings.groups.${group}.description`, { defaultValue: metadata.description })}

    - {isCollapsed ? : } + {isCollapsed ? ( + + ) : ( + + )}
    - - + +
    {configs.map((config) => (
    @@ -47,7 +55,7 @@ export function SettingsGroup({ group, configs, form, isCollapsed, onToggleColla smtpEnabled={form.watch("configs.smtpEnabled")} watch={form.watch} /> -

    +

    {t(`settings.fields.${config.key}.description`, { defaultValue: FIELD_DESCRIPTIONS[config.key as keyof typeof FIELD_DESCRIPTIONS] || @@ -60,17 +68,18 @@ export function SettingsGroup({ group, configs, form, isCollapsed, onToggleColla

    - + ); diff --git a/apps/web/src/app/settings/components/settings-header.tsx b/apps/web/src/app/settings/components/settings-header.tsx new file mode 100644 index 0000000..5fa6f4c --- /dev/null +++ b/apps/web/src/app/settings/components/settings-header.tsx @@ -0,0 +1,44 @@ +import Link from "next/link"; +import { IconLayoutDashboard, IconSettings } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbSeparator, +} from "@/components/ui/breadcrumb"; +import { Separator } from "@/components/ui/separator"; + +export function SettingsHeader() { + const t = useTranslations(); + + return ( +
    +
    + +

    {t("settings.title")}

    +
    + + + + + + + + {t("navigation.dashboard")} + + + + + + + {t("settings.breadcrumb")} + + + + +
    + ); +} diff --git a/apps/web/src/pages/settings/components/settings-input.tsx b/apps/web/src/app/settings/components/settings-input.tsx similarity index 60% rename from apps/web/src/pages/settings/components/settings-input.tsx rename to apps/web/src/app/settings/components/settings-input.tsx index a5d9ebe..9b00b03 100644 --- a/apps/web/src/pages/settings/components/settings-input.tsx +++ b/apps/web/src/app/settings/components/settings-input.tsx @@ -1,10 +1,10 @@ +import { useTranslations } from "next-intl"; +import { UseFormRegister, UseFormWatch } from "react-hook-form"; + +import { Input } from "@/components/ui/input"; import { createFieldTitles } from "../constants"; import { Config } from "../types"; import { LogoInput } from "./logo-input"; -import { Input } from "@heroui/input"; -import { Select, SelectItem } from "@heroui/select"; -import { UseFormRegister, UseFormWatch } from "react-hook-form"; -import { useTranslation } from "react-i18next"; export interface ConfigInputProps { config: Config; @@ -15,7 +15,7 @@ export interface ConfigInputProps { } export function SettingsInput({ config, register, watch, error, smtpEnabled }: ConfigInputProps) { - const { t } = useTranslation(); + const t = useTranslations(); const FIELD_TITLES = createFieldTitles(t); const isSmtpField = config.group === "email" && config.key !== "smtpEnabled"; const isDisabled = isSmtpField && smtpEnabled === "false"; @@ -44,25 +44,14 @@ export function SettingsInput({ config, register, watch, error, smtpEnabled }: C switch (config.type) { case "boolean": return ( - + + + ); case "number": @@ -72,15 +61,9 @@ export function SettingsInput({ config, register, watch, error, smtpEnabled }: C {...register(`configs.${config.key}`, { valueAsNumber: true, })} - classNames={{ - label: "font-semibold", - }} - errorMessage={error?.message} - isDisabled={isDisabled} - isInvalid={!!error} - label={friendlyLabel} - labelPlacement="outside" - size="md" + className="w-full" + disabled={isDisabled} + aria-invalid={!!error} type="number" /> ); @@ -90,15 +73,9 @@ export function SettingsInput({ config, register, watch, error, smtpEnabled }: C return ( ); diff --git a/apps/web/src/pages/settings/constants.ts b/apps/web/src/app/settings/constants.ts similarity index 85% rename from apps/web/src/pages/settings/constants.ts rename to apps/web/src/app/settings/constants.ts index 889650a..fedf335 100644 --- a/apps/web/src/pages/settings/constants.ts +++ b/apps/web/src/app/settings/constants.ts @@ -1,30 +1,30 @@ -import { TFunction } from "i18next"; -import { FaEnvelope, FaCog, FaShieldAlt, FaDatabase } from "react-icons/fa"; +import { IconDatabase, IconMail, IconSettings, IconShield } from "@tabler/icons-react"; +import { createTranslator } from "next-intl"; -export const createGroupMetadata = (t: TFunction) => ({ +export const createGroupMetadata = (t: ReturnType) => ({ email: { title: t("settings.groups.email.title"), description: t("settings.groups.email.description"), - icon: FaEnvelope, + icon: IconMail, }, general: { title: t("settings.groups.general.title"), description: t("settings.groups.general.description"), - icon: FaCog, + icon: IconSettings, }, security: { title: t("settings.groups.security.title"), description: t("settings.groups.security.description"), - icon: FaShieldAlt, + icon: IconShield, }, storage: { title: t("settings.groups.storage.title"), description: t("settings.groups.storage.description"), - icon: FaDatabase, + icon: IconDatabase, }, }); -export const createFieldDescriptions = (t: TFunction) => ({ +export const createFieldDescriptions = (t: ReturnType) => ({ // General settings appLogo: t("settings.fields.appLogo.description"), appName: t("settings.fields.appName.description"), @@ -51,7 +51,7 @@ export const createFieldDescriptions = (t: TFunction) => ({ maxTotalStoragePerUser: t("settings.fields.maxTotalStoragePerUser.description"), }); -export const createFieldTitles = (t: TFunction) => ({ +export const createFieldTitles = (t: ReturnType) => ({ // General settings appLogo: t("settings.fields.appLogo.title"), appName: t("settings.fields.appName.title"), diff --git a/apps/web/src/pages/settings/hooks/use-settings.ts b/apps/web/src/app/settings/hooks/use-settings.ts similarity index 86% rename from apps/web/src/pages/settings/hooks/use-settings.ts rename to apps/web/src/app/settings/hooks/use-settings.ts index 7e4078f..bd52167 100644 --- a/apps/web/src/pages/settings/hooks/use-settings.ts +++ b/apps/web/src/app/settings/hooks/use-settings.ts @@ -1,28 +1,25 @@ -import { ConfigType, GroupFormData } from "../types"; -import { Config } from "../types"; -import { useShareContext } from "@/contexts/ShareContext"; -import { useAppInfo } from "@/contexts/app-info-context"; -import { getAllConfigs, bulkUpdateConfigs } from "@/http/endpoints"; -import { zodResolver } from "@hookform/resolvers/zod"; +"use client"; + import { useEffect, useState } from "react"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useTranslations } from "next-intl"; import { useForm } from "react-hook-form"; -import { useTranslation } from "react-i18next"; import { toast } from "sonner"; import { z } from "zod"; +import { useAppInfo } from "@/contexts/app-info-context"; +import { useShareContext } from "@/contexts/share-context"; +import { bulkUpdateConfigs, getAllConfigs } from "@/http/endpoints"; +import { Config, ConfigType, GroupFormData } from "../types"; + const createSchemas = () => ({ settingsSchema: z.object({ - configs: z.record( - z - .string() - .or(z.number()) - .transform((val) => String(val)) - ), + configs: z.record(z.union([z.string(), z.number()]).transform((val) => String(val))), }), }); export function useSettings() { - const { t } = useTranslation(); + const t = useTranslations(); const { settingsSchema } = createSchemas(); const [isLoading, setIsLoading] = useState(true); const [configs, setConfigs] = useState>({}); @@ -64,21 +61,17 @@ export function useSettings() { type: (config.type as ConfigType) || "text", }); - // Sort configs by key to maintain consistent order acc[group].sort((a, b) => { - // Para o grupo general, coloca appLogo primeiro if (group === "general") { if (a.key === "appLogo") return -1; if (b.key === "appLogo") return 1; } - // Para o grupo email, coloca smtpEnabled primeiro if (group === "email") { if (a.key === "smtpEnabled") return -1; if (b.key === "smtpEnabled") return 1; } - // Ordenaรงรฃo padrรฃo alfabรฉtica para os demais casos return a.key.localeCompare(b.key); }); diff --git a/apps/web/src/app/settings/layout.tsx b/apps/web/src/app/settings/layout.tsx new file mode 100644 index 0000000..ab70efe --- /dev/null +++ b/apps/web/src/app/settings/layout.tsx @@ -0,0 +1,18 @@ +import { Metadata } from "next"; +import { getTranslations } from "next-intl/server"; + +interface LayoutProps { + children: React.ReactNode; +} + +export async function generateMetadata(): Promise { + const t = await getTranslations(); + + return { + title: `${t("settings.pageTitle")}`, + }; +} + +export default function SettingsLayout({ children }: LayoutProps) { + return <>{children}; +} diff --git a/apps/web/src/app/settings/page.tsx b/apps/web/src/app/settings/page.tsx new file mode 100644 index 0000000..b07a365 --- /dev/null +++ b/apps/web/src/app/settings/page.tsx @@ -0,0 +1,38 @@ +"use client"; + +import { ProtectedRoute } from "@/components/auth/protected-route"; +import { LoadingScreen } from "@/components/layout/loading-screen"; +import { Navbar } from "@/components/layout/navbar"; +import { DefaultFooter } from "@/components/ui/default-footer"; +import { SettingsForm } from "./components/settings-form"; +import { SettingsHeader } from "./components/settings-header"; +import { useSettings } from "./hooks/use-settings"; + +export default function SettingsPage() { + const settings = useSettings(); + + if (settings.isLoading) { + return ; + } + + return ( + +
    + +
    +
    + + +
    +
    + +
    +
    + ); +} diff --git a/apps/web/src/pages/settings/types/index.ts b/apps/web/src/app/settings/types/index.ts similarity index 95% rename from apps/web/src/pages/settings/types/index.ts rename to apps/web/src/app/settings/types/index.ts index afa808d..b3cd9c8 100644 --- a/apps/web/src/pages/settings/types/index.ts +++ b/apps/web/src/app/settings/types/index.ts @@ -29,7 +29,7 @@ export interface ConfigInputProps { } export type GroupFormData = { - configs: Record; + configs: Record; }; export type ConfigType = "text" | "number" | "boolean" | "bigint"; diff --git a/apps/web/src/app/users-management/components/user-actions-dropdown.tsx b/apps/web/src/app/users-management/components/user-actions-dropdown.tsx new file mode 100644 index 0000000..7fd42f0 --- /dev/null +++ b/apps/web/src/app/users-management/components/user-actions-dropdown.tsx @@ -0,0 +1,45 @@ +import { IconBan, IconCheck, IconDotsVertical, IconEdit, IconTrash } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; +import { UserActionsDropdownProps } from "../types"; + +export function UserActionsDropdown({ + user, + isCurrentUser, + onEdit, + onDelete, + onToggleStatus, +}: UserActionsDropdownProps) { + const t = useTranslations(); + + return ( + + + + + + onEdit(user)}> + + {t("users.actions.edit")} + + onToggleStatus(user)}> + {user.isActive ? : } + {user.isActive ? t("users.actions.deactivate") : t("users.actions.activate")} + + onDelete(user)} className="text-destructive"> + + {t("users.actions.delete")} + + + + ); +} diff --git a/apps/web/src/app/users-management/components/user-delete-modal.tsx b/apps/web/src/app/users-management/components/user-delete-modal.tsx new file mode 100644 index 0000000..794a861 --- /dev/null +++ b/apps/web/src/app/users-management/components/user-delete-modal.tsx @@ -0,0 +1,35 @@ +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { Dialog, DialogContent, DialogFooter, DialogHeader } from "@/components/ui/dialog"; +import { UserDeleteModalProps } from "../types"; + +export function UserDeleteModal({ isOpen, onClose, user, onConfirm }: UserDeleteModalProps) { + const t = useTranslations(); + + return ( + + + {t("users.delete.title")} +
    + {user && ( +

    + {t("users.delete.confirmation", { + firstName: user.firstName, + lastName: user.lastName, + })} +

    + )} +
    + + + + +
    +
    + ); +} diff --git a/apps/web/src/app/users-management/components/user-form-modal.tsx b/apps/web/src/app/users-management/components/user-form-modal.tsx new file mode 100644 index 0000000..c7cb355 --- /dev/null +++ b/apps/web/src/app/users-management/components/user-form-modal.tsx @@ -0,0 +1,109 @@ +import { IconDeviceFloppy } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { Dialog, DialogContent, DialogFooter, DialogHeader } from "@/components/ui/dialog"; +import { Form, FormField, FormItem, FormMessage } from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { UserFormModalProps } from "../types"; + +export function UserFormModal({ isOpen, onClose, modalMode, selectedUser, formMethods, onSubmit }: UserFormModalProps) { + const t = useTranslations(); + const { + register, + formState: { errors, isSubmitting }, + control, + } = formMethods; + + return ( + + +
    + + + {modalMode === "create" ? t("users.form.titleCreate") : t("users.form.titleEdit")} + +
    +
    +
    + ( + + + + {errors.firstName && {errors.firstName.message}} + + )} + /> + ( + + + + {errors.lastName && {errors.lastName.message}} + + )} + /> +
    + +
    + + + {errors.username && {errors.username.message}} +
    + +
    + + + {errors.email && {errors.email.message}} +
    + +
    + + + {errors.password && {errors.password.message}} +
    + + {modalMode === "edit" && ( +
    + + + {errors.isAdmin && {errors.isAdmin.message}} +
    + )} +
    +
    + + + + +
    + +
    +
    + ); +} diff --git a/apps/web/src/pages/users-management/components/user-management-modals.tsx b/apps/web/src/app/users-management/components/user-management-modals.tsx similarity index 100% rename from apps/web/src/pages/users-management/components/user-management-modals.tsx rename to apps/web/src/app/users-management/components/user-management-modals.tsx diff --git a/apps/web/src/pages/users-management/components/user-status-modal.tsx b/apps/web/src/app/users-management/components/user-status-modal.tsx similarity index 50% rename from apps/web/src/pages/users-management/components/user-status-modal.tsx rename to apps/web/src/app/users-management/components/user-status-modal.tsx index 81284cb..6c1ae84 100644 --- a/apps/web/src/pages/users-management/components/user-status-modal.tsx +++ b/apps/web/src/app/users-management/components/user-status-modal.tsx @@ -1,16 +1,17 @@ +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { Dialog, DialogContent, DialogFooter, DialogHeader } from "@/components/ui/dialog"; import { UserStatusModalProps } from "../types"; -import { Button } from "@heroui/button"; -import { Modal, ModalContent, ModalHeader, ModalBody, ModalFooter } from "@heroui/modal"; -import { useTranslation } from "react-i18next"; export function UserStatusModal({ isOpen, onClose, user, onConfirm }: UserStatusModalProps) { - const { t } = useTranslation(); + const t = useTranslations(); return ( - - - {t("users.status.title")} - + + + {t("users.status.title")} +
    {user && (

    {t("users.status.confirmation", { @@ -20,16 +21,16 @@ export function UserStatusModal({ isOpen, onClose, user, onConfirm }: UserStatus })}

    )} - - -
    + + - - -
    -
    + + + ); } diff --git a/apps/web/src/app/users-management/components/users-header.tsx b/apps/web/src/app/users-management/components/users-header.tsx new file mode 100644 index 0000000..8cd2131 --- /dev/null +++ b/apps/web/src/app/users-management/components/users-header.tsx @@ -0,0 +1,52 @@ +import Link from "next/link"; +import { IconLayoutDashboard, IconUserPlus, IconUsers } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbSeparator, +} from "@/components/ui/breadcrumb"; +import { Button } from "@/components/ui/button"; +import { Separator } from "@/components/ui/separator"; +import { UsersHeaderProps } from "../types"; + +export function UsersHeader({ onCreateUser }: UsersHeaderProps) { + const t = useTranslations(); + + return ( +
    +
    +
    + +

    {t("users.header.title")}

    +
    + +
    + + + + + + + + {t("common.dashboard")} + + + + + + + {t("users.header.management")} + + + + +
    + ); +} diff --git a/apps/web/src/app/users-management/components/users-table.tsx b/apps/web/src/app/users-management/components/users-table.tsx new file mode 100644 index 0000000..d240884 --- /dev/null +++ b/apps/web/src/app/users-management/components/users-table.tsx @@ -0,0 +1,78 @@ +import { useTranslations } from "next-intl"; + +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { Badge } from "@/components/ui/badge"; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; +import { UsersTableProps } from "../types"; +import { UserActionsDropdown } from "./user-actions-dropdown"; + +export function UsersTable({ users, currentUser, onEdit, onDelete, onToggleStatus }: UsersTableProps) { + const t = useTranslations(); + const isCurrentUser = (userId: string) => currentUser?.id === userId; + + return ( +
    + + + + + {t("users.table.user")} + + + {t("users.table.email")} + + + {t("users.table.status")} + + + {t("users.table.role")} + + + {t("users.table.actions")} + + + + + {users.map((user) => ( + + +
    + + + + {user.firstName[0]} + + +
    +

    {`${user.firstName} ${user.lastName}`}

    +

    {user.username}

    +
    +
    +
    + {user.email} + + + {user.isActive ? t("users.table.active") : t("users.table.inactive")} + + + + + {user.isAdmin ? t("users.table.admin") : t("users.table.userr")} + + + + + +
    + ))} +
    +
    +
    + ); +} diff --git a/apps/web/src/pages/users-management/hooks/use-user-management.ts b/apps/web/src/app/users-management/hooks/use-user-management.ts similarity index 91% rename from apps/web/src/pages/users-management/hooks/use-user-management.ts rename to apps/web/src/app/users-management/hooks/use-user-management.ts index b58cc93..2936334 100644 --- a/apps/web/src/pages/users-management/hooks/use-user-management.ts +++ b/apps/web/src/app/users-management/hooks/use-user-management.ts @@ -1,16 +1,18 @@ -import { useAuth } from "@/contexts/auth-context"; -import { listUsers, registerUser, updateUser, deleteUser, activateUser, deactivateUser } from "@/http/endpoints"; -import type { ListUsers200Item } from "@/http/models"; -import { useDisclosure } from "@heroui/modal"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { TFunction } from "i18next"; +"use client"; + import { useEffect, useState } from "react"; -import { useForm } from "react-hook-form"; -import { useTranslation } from "react-i18next"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useTranslations } from "next-intl"; +import { Resolver, useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; -const createSchemas = (t: TFunction) => ({ +import { useAuth } from "@/contexts/auth-context"; +import { useDisclosure } from "@/hooks/use-disclosure"; +import { activateUser, deactivateUser, deleteUser, listUsers, registerUser, updateUser } from "@/http/endpoints"; +import type { ListUsers200Item } from "@/http/models"; + +const createSchemas = (t: (key: string) => string) => ({ userSchema: z.object({ firstName: z.string().min(1, t("validation.firstNameRequired")), lastName: z.string().min(1, t("validation.lastNameRequired")), @@ -30,7 +32,8 @@ const createSchemas = (t: TFunction) => ({ export type UserFormData = z.infer["userSchema"]>; export function useUserManagement() { - const { t } = useTranslation(); + const t = useTranslations(); + const { userSchema } = createSchemas(t); const [users, setUsers] = useState([]); const [isLoading, setIsLoading] = useState(true); @@ -45,7 +48,7 @@ export function useUserManagement() { const { isOpen: isStatusModalOpen, onOpen: onStatusModalOpen, onClose: onStatusModalClose } = useDisclosure(); const formMethods = useForm({ - resolver: zodResolver(userSchema), + resolver: zodResolver(userSchema) as Resolver, }); const loadUsers = async () => { diff --git a/apps/web/src/app/users-management/layout.tsx b/apps/web/src/app/users-management/layout.tsx new file mode 100644 index 0000000..3589f79 --- /dev/null +++ b/apps/web/src/app/users-management/layout.tsx @@ -0,0 +1,18 @@ +import { Metadata } from "next"; +import { getTranslations } from "next-intl/server"; + +interface LayoutProps { + children: React.ReactNode; +} + +export async function generateMetadata(): Promise { + const t = await getTranslations(); + + return { + title: `${t("settings.pageTitle")} `, + }; +} + +export default function UsersManagementLayout({ children }: LayoutProps) { + return <>{children}; +} diff --git a/apps/web/src/app/users-management/page.tsx b/apps/web/src/app/users-management/page.tsx new file mode 100644 index 0000000..3346e50 --- /dev/null +++ b/apps/web/src/app/users-management/page.tsx @@ -0,0 +1,71 @@ +"use client"; + +import { ProtectedRoute } from "@/components/auth/protected-route"; +import { LoadingScreen } from "@/components/layout/loading-screen"; +import { Navbar } from "@/components/layout/navbar"; +import { DefaultFooter } from "@/components/ui/default-footer"; +import { UserManagementModals } from "./components/user-management-modals"; +import { UsersHeader } from "./components/users-header"; +import { UsersTable } from "./components/users-table"; +import { useUserManagement } from "./hooks/use-user-management"; + +export default function AdminAreaPage() { + const { + users, + isLoading, + currentUser, + modals, + selectedUser, + deleteModalUser, + statusModalUser, + handleCreateUser, + handleEditUser, + handleDeleteUser, + handleToggleUserStatus, + onSubmit, + formMethods, + } = useUserManagement(); + + if (isLoading) { + return ; + } + + return ( + +
    + +
    +
    + + + { + modals.setDeleteModalUser(user); + modals.onDeleteModalOpen(); + }} + onEdit={handleEditUser} + onToggleStatus={(user) => { + modals.setStatusModalUser(user); + modals.onStatusModalOpen(); + }} + /> +
    +
    + + + +
    +
    + ); +} diff --git a/apps/web/src/pages/users-management/types/index.ts b/apps/web/src/app/users-management/types/index.ts similarity index 99% rename from apps/web/src/pages/users-management/types/index.ts rename to apps/web/src/app/users-management/types/index.ts index 05cc83c..aff551d 100644 --- a/apps/web/src/pages/users-management/types/index.ts +++ b/apps/web/src/app/users-management/types/index.ts @@ -1,7 +1,8 @@ -import { UserFormData } from "../hooks/use-user-management"; -import type { ListUsers200Item } from "@/http/models"; import { UseFormReturn } from "react-hook-form"; +import type { ListUsers200Item } from "@/http/models"; +import { UserFormData } from "../hooks/use-user-management"; + export interface UserActionsDropdownProps { user: ListUsers200Item; isCurrentUser: boolean; diff --git a/apps/web/src/components/auth/protected-route.tsx b/apps/web/src/components/auth/protected-route.tsx new file mode 100644 index 0000000..3509344 --- /dev/null +++ b/apps/web/src/components/auth/protected-route.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { useEffect, type ReactNode } from "react"; +import { useRouter } from "next/navigation"; + +import { useAuth } from "@/contexts/auth-context"; +import { LoadingScreen } from "../layout/loading-screen"; + +type ProtectedRouteProps = { + children: ReactNode; + requireAdmin?: boolean; +}; + +export function ProtectedRoute({ children, requireAdmin = false }: ProtectedRouteProps) { + const { isAuthenticated, isAdmin } = useAuth(); + const router = useRouter(); + + useEffect(() => { + if (isAuthenticated === false) { + router.replace("/login"); + } else if (requireAdmin && isAdmin === false) { + router.replace("/dashboard"); + } + }, [isAuthenticated, isAdmin, requireAdmin, router]); + + if (isAuthenticated === null || (requireAdmin && isAdmin === null)) { + return ; + } + + if (!isAuthenticated || (requireAdmin && !isAdmin)) { + return null; + } + + return <>{children}; +} diff --git a/apps/web/src/components/general/file-selector.tsx b/apps/web/src/components/general/file-selector.tsx index ca5dff5..5ead35d 100644 --- a/apps/web/src/components/general/file-selector.tsx +++ b/apps/web/src/components/general/file-selector.tsx @@ -1,10 +1,14 @@ -import { addFiles, listFiles, removeFiles } from "@/http/endpoints"; -import { Button } from "@heroui/button"; +"use client"; + import { useEffect, useState } from "react"; -import { useTranslation } from "react-i18next"; -import { FaArrowLeft, FaArrowRight, FaFile } from "react-icons/fa"; +import { IconArrowLeft, IconArrowRight, IconFile } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; import { toast } from "sonner"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { addFiles, listFiles, removeFiles } from "@/http/endpoints"; + interface FileSelectorProps { shareId: string; selectedFiles: string[]; @@ -12,7 +16,7 @@ interface FileSelectorProps { } export function FileSelector({ shareId, selectedFiles, onSave }: FileSelectorProps) { - const { t } = useTranslation(); + const t = useTranslations(); const [availableFiles, setAvailableFiles] = useState([]); const [shareFiles, setShareFiles] = useState([]); const [isLoading, setIsLoading] = useState(false); @@ -94,8 +98,8 @@ export function FileSelector({ shareId, selectedFiles, onSave }: FileSelectorPro

    {t("fileSelector.availableFiles", { count: filteredAvailableFiles.length })}

    - moveToShare(file.id)} >
    - + {file.name}
    - +
    ))}
    @@ -132,8 +136,8 @@ export function FileSelector({ shareId, selectedFiles, onSave }: FileSelectorPro

    {t("fileSelector.shareFiles", { count: filteredShareFiles.length })}

    - removeFromShare(file.id)} >
    - + {file.name}
    - +
    ))}
    @@ -169,8 +173,15 @@ export function FileSelector({ shareId, selectedFiles, onSave }: FileSelectorPro
    -
    diff --git a/apps/web/src/components/general/language-switcher.tsx b/apps/web/src/components/general/language-switcher.tsx index d09dab9..f95443f 100644 --- a/apps/web/src/components/general/language-switcher.tsx +++ b/apps/web/src/components/general/language-switcher.tsx @@ -1,8 +1,18 @@ -import { Button } from "@heroui/button"; -import { Dropdown, DropdownTrigger, DropdownMenu, DropdownItem } from "@heroui/dropdown"; +"use client"; + +import { useRouter } from "next/navigation"; +import { IconLanguage } from "@tabler/icons-react"; +import { useLocale } from "next-intl"; +import { setCookie } from "nookies"; import ReactCountryFlag from "react-country-flag"; -import { useTranslation } from "react-i18next"; -import { FaGlobe } from "react-icons/fa"; + +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; const languages = { "en-US": "English", @@ -19,36 +29,61 @@ const languages = { "ko-KR": "ํ•œ๊ตญ์–ด (Korean)", }; -export function LanguageSwitcher() { - const { i18n } = useTranslation(); +const COOKIE_LANG_KEY = "NEXT_LOCALE"; +const COOKIE_MAX_AGE = 365 * 24 * 60 * 60; - const changeLanguage = (lng: string) => { - i18n.changeLanguage(lng); +const RTL_LANGUAGES = ["ar-SA"]; + +export function LanguageSwitcher() { + const locale = useLocale(); + const router = useRouter(); + + const changeLanguage = (fullLocale: string) => { + const isRTL = RTL_LANGUAGES.includes(fullLocale); + document.documentElement.dir = isRTL ? "rtl" : "ltr"; + + setCookie(null, COOKIE_LANG_KEY, fullLocale, { + maxAge: COOKIE_MAX_AGE, + path: "/", + sameSite: "lax", + secure: process.env.NODE_ENV === "production", + }); + + router.refresh(); }; return ( - - - - - - {Object.entries(languages).map(([code, name]) => ( - changeLanguage(code)}> - - {name} - - ))} - - + + + {Object.entries(languages).map(([code, name]) => { + const isCurrentLocale = locale === code.split("-")[0]; + + return ( + changeLanguage(code)} + className={isCurrentLocale ? "bg-accent" : ""} + > + + {name} + + ); + })} + + ); } diff --git a/apps/web/src/components/general/mode-toggle.tsx b/apps/web/src/components/general/mode-toggle.tsx new file mode 100644 index 0000000..29df760 --- /dev/null +++ b/apps/web/src/components/general/mode-toggle.tsx @@ -0,0 +1,36 @@ +"use client"; + +import * as React from "react"; +import { IconMoon, IconSun } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; +import { useTheme } from "next-themes"; + +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; + +export function ModeToggle() { + const { setTheme } = useTheme(); + const t = useTranslations(); + + return ( + + + + + + setTheme("light")}>{t("theme.light")} + setTheme("dark")}>{t("theme.dark")} + setTheme("system")}>{t("theme.system")} + + + ); +} diff --git a/apps/web/src/components/general/recipient-selector.tsx b/apps/web/src/components/general/recipient-selector.tsx index 6aacaf5..8e83029 100644 --- a/apps/web/src/components/general/recipient-selector.tsx +++ b/apps/web/src/components/general/recipient-selector.tsx @@ -1,12 +1,15 @@ -import { useShareContext } from "@/contexts/ShareContext"; -import { addRecipients, removeRecipients, notifyRecipients } from "@/http/endpoints"; -import { Button } from "@heroui/button"; -import { Input } from "@heroui/input"; -import { useState, useEffect } from "react"; -import { useTranslation } from "react-i18next"; -import { FaPlus, FaTrash, FaEnvelope, FaBell } from "react-icons/fa"; +"use client"; + +import { useEffect, useState } from "react"; +import { IconBell, IconMail, IconPlus, IconTrash } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; import { toast } from "sonner"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { useShareContext } from "@/contexts/share-context"; +import { addRecipients, notifyRecipients, removeRecipients } from "@/http/endpoints"; + interface Recipient { id: string; email: string; @@ -22,7 +25,7 @@ interface RecipientSelectorProps { } export function RecipientSelector({ shareId, selectedRecipients, shareAlias, onSuccess }: RecipientSelectorProps) { - const { t } = useTranslation(); + const t = useTranslations(); const { smtpEnabled } = useShareContext(); const [recipients, setRecipients] = useState(selectedRecipients?.map((recipient) => recipient.email) || []); const [newRecipient, setNewRecipient] = useState(""); @@ -78,14 +81,18 @@ export function RecipientSelector({ shareId, selectedRecipients, shareAlias, onS return (
    - } - value={newRecipient} - onChange={(e) => setNewRecipient(e.target.value)} - onKeyPress={(e) => e.key === "Enter" && handleAddRecipient()} - /> -
    @@ -94,7 +101,8 @@ export function RecipientSelector({ shareId, selectedRecipients, shareAlias, onS

    {t("recipientSelector.recipients", { count: recipients.length })}

    {recipients.length > 0 && shareAlias && smtpEnabled === "true" && ( - )} @@ -107,20 +115,19 @@ export function RecipientSelector({ shareId, selectedRecipients, shareAlias, onS recipients.map((email, index) => (
    - + {email}
    )) diff --git a/apps/web/src/components/general/theme-switch.tsx b/apps/web/src/components/general/theme-switch.tsx deleted file mode 100644 index a5e156b..0000000 --- a/apps/web/src/components/general/theme-switch.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { useTheme } from "@/hooks/use-theme"; -import { Button } from "@heroui/button"; -import { FC, useEffect, useState } from "react"; -import { BsMoonFill, BsSunFill } from "react-icons/bs"; - -export const ThemeSwitch: FC = () => { - const [isMounted, setIsMounted] = useState(false); - const { theme, toggleTheme } = useTheme(); - const isDark = theme === "dark"; - - useEffect(() => { - setIsMounted(true); - }, []); - - if (!isMounted) return
    ; - - return ( - - ); -}; diff --git a/apps/web/src/components/layout/favicon.tsx b/apps/web/src/components/layout/favicon.tsx new file mode 100644 index 0000000..ed38e35 --- /dev/null +++ b/apps/web/src/components/layout/favicon.tsx @@ -0,0 +1,14 @@ +"use client"; + +import { useAppInfo } from "@/contexts/app-info-context"; + +export function Favicon() { + const { appLogo } = useAppInfo(); + + return ( + <> + + + + ); +} diff --git a/apps/web/src/components/layout/file-manager-layout.tsx b/apps/web/src/components/layout/file-manager-layout.tsx index ca1d88b..7f1c964 100644 --- a/apps/web/src/components/layout/file-manager-layout.tsx +++ b/apps/web/src/components/layout/file-manager-layout.tsx @@ -1,10 +1,18 @@ -import { Navbar } from "@/components/layout/navbar"; -import { DefaultFooter } from "@/components/ui/default-footer"; -import { Breadcrumbs, BreadcrumbItem } from "@heroui/breadcrumbs"; -import { Divider } from "@heroui/divider"; import { ReactNode } from "react"; -import { useTranslation } from "react-i18next"; -import { TbLayoutDashboardFilled } from "react-icons/tb"; +import Link from "next/link"; +import { IconLayoutDashboard } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Navbar } from "@/components/layout/navbar"; +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbSeparator, +} from "@/components/ui/breadcrumb"; +import { DefaultFooter } from "@/components/ui/default-footer"; +import { Separator } from "@/components/ui/separator"; interface FileManagerLayoutProps { children: ReactNode; @@ -21,7 +29,7 @@ export function FileManagerLayout({ breadcrumbLabel, showBreadcrumb = true, }: FileManagerLayoutProps) { - const { t } = useTranslation(); + const t = useTranslations(); return (
    @@ -33,17 +41,26 @@ export function FileManagerLayout({ {icon}

    {title}

    - + {showBreadcrumb && breadcrumbLabel && ( - - - - {t("navigation.dashboard")} - - - {icon} {breadcrumbLabel} - - + + + + + + + {t("navigation.dashboard")} + + + + + + + {icon} {breadcrumbLabel} + + + + )}
    diff --git a/apps/web/src/components/layout/loading-screen.tsx b/apps/web/src/components/layout/loading-screen.tsx index 65793c4..cc8cf32 100644 --- a/apps/web/src/components/layout/loading-screen.tsx +++ b/apps/web/src/components/layout/loading-screen.tsx @@ -1,14 +1,13 @@ -import { GridPattern } from "@/components/ui/grid-pattern"; -import { BackgroundLights } from "@/pages/home/components/background-lights"; import { motion } from "framer-motion"; -import { useTranslation } from "react-i18next"; +import { useTranslations } from "next-intl"; + +import { BackgroundLights } from "@/components/ui/background-lights"; export function LoadingScreen() { - const { t } = useTranslation(); + const t = useTranslations(); return (
    -
    { try { await logoutAPI(); logout(); - navigate("/login"); + router.push("/login"); } catch (err) { console.error("Error logging out:", err); } }; return ( - - - - - {appLogo && {t("navbar.logoAlt")}} -

    {appName}

    - -
    -
    +
    +
    +
    +
    + + {appLogo && {t("navbar.logoAlt")}} +

    {appName}

    + +
    - - - - - - - - - - - -

    - {user?.firstName} {user?.lastName} -

    -

    {user?.email}

    -
    - - - - {t("navbar.profile")} - - - {isAdmin ? ( - - - - {t("navbar.settings")} +
    + + + + + + + {user?.firstName?.[0]} + + + +
    +

    + {user?.firstName} {user?.lastName} +

    +

    {user?.email}

    +
    + + + + {t("navbar.profile")} - - ) : null} - {isAdmin ? ( - - - - {t("navbar.usersManagement")} - - - ) : null} - - - + +
    - - - - +
    +
    +
    +
    ); } diff --git a/apps/web/src/components/layout/share-manager-layout.tsx b/apps/web/src/components/layout/share-manager-layout.tsx deleted file mode 100644 index c5b91b8..0000000 --- a/apps/web/src/components/layout/share-manager-layout.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Breadcrumbs, BreadcrumbItem } from "@heroui/breadcrumbs"; -import { ReactNode } from "react"; -import { useTranslation } from "react-i18next"; -import { TbLayoutDashboardFilled } from "react-icons/tb"; - -interface ShareManagerLayoutProps { - children: ReactNode; - icon: ReactNode; - title: string; - breadcrumbLabel: string; -} - -export function ShareManagerLayout({ children, icon, title, breadcrumbLabel }: ShareManagerLayoutProps) { - const { t } = useTranslation(); - - return ( -
    -
    - - - - {t("navigation.dashboard")} - - - {icon} {breadcrumbLabel} - - -
    - {icon} -

    {title}

    -
    -
    - {children} -
    - ); -} diff --git a/apps/web/src/components/modals/create-share-modal.tsx b/apps/web/src/components/modals/create-share-modal.tsx index e2c1842..47627fd 100644 --- a/apps/web/src/components/modals/create-share-modal.tsx +++ b/apps/web/src/components/modals/create-share-modal.tsx @@ -1,12 +1,17 @@ -import { createShare } from "@/http/endpoints"; -import { Button } from "@heroui/button"; -import { Input } from "@heroui/input"; -import { Modal, ModalBody, ModalContent, ModalFooter, ModalHeader } from "@heroui/modal"; -import { Switch } from "@heroui/switch"; +"use client"; + import { useState } from "react"; -import { useTranslation } from "react-i18next"; +import { IconCalendar, IconEye, IconLock, IconShare } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; import { toast } from "sonner"; +import { Button } from "@/components/ui/button"; +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Switch } from "@/components/ui/switch"; +import { createShare } from "@/http/endpoints"; + interface CreateShareModalProps { isOpen: boolean; onClose: () => void; @@ -14,7 +19,7 @@ interface CreateShareModalProps { } export function CreateShareModal({ isOpen, onClose, onSuccess }: CreateShareModalProps) { - const { t } = useTranslation(); + const t = useTranslations(); const [formData, setFormData] = useState({ name: "", password: "", @@ -53,64 +58,85 @@ export function CreateShareModal({ isOpen, onClose, onSuccess }: CreateShareModa }; return ( - - - {t("createShare.title")} - -
    + + + + + + {t("createShare.title")} + + +
    +
    + + setFormData({ ...formData, name: e.target.value })} /> +
    + +
    + setFormData({ ...formData, name: e.target.value })} - /> - setFormData({ ...formData, expiresAt: e.target.value })} /> +
    + +
    + setFormData({ ...formData, maxViews: e.target.value })} /> -
    - - setFormData({ - ...formData, - isPasswordProtected: checked, - password: "", - }) - } - > - {t("createShare.passwordProtection")} - -
    - {formData.isPasswordProtected && ( +
    + +
    + + setFormData({ + ...formData, + isPasswordProtected: checked, + password: "", + }) + } + id="password-protection" + /> + +
    + + {formData.isPasswordProtected && ( +
    + setFormData({ ...formData, password: e.target.value })} /> - )} -
    - - -
    + )} +
    + + - - -
    -
    + + + ); } diff --git a/apps/web/src/components/modals/file-actions-modals.tsx b/apps/web/src/components/modals/file-actions-modals.tsx index 5d04c9b..2889622 100644 --- a/apps/web/src/components/modals/file-actions-modals.tsx +++ b/apps/web/src/components/modals/file-actions-modals.tsx @@ -1,7 +1,16 @@ -import { Button } from "@heroui/button"; -import { Input } from "@heroui/input"; -import { Modal, ModalContent, ModalHeader, ModalBody, ModalFooter } from "@heroui/modal"; -import { useTranslation } from "react-i18next"; +import { IconEdit, IconTrash } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; + +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { Input } from "@/components/ui/input"; interface FileActionsModalsProps { fileToRename: { id: string; name: string; description?: string } | null; @@ -20,7 +29,7 @@ export function FileActionsModals({ onCloseRename, onCloseDelete, }: FileActionsModalsProps) { - const { t } = useTranslation(); + const t = useTranslations(); const splitFileName = (fullName: string) => { const lastDotIndex = fullName.lastIndexOf("."); @@ -35,44 +44,43 @@ export function FileActionsModals({ return ( <> - - - {t("fileActions.editFile")} - - {fileToRename && ( -
    -
    - { - if (e.key === "Enter" && fileToRename) { - const newName = e.currentTarget.value + splitFileName(fileToRename.name).extension; - - onRename(fileToRename.id, newName); - } - }} - /> -

    - {t("fileActions.extension")}: {splitFileName(fileToRename.name).extension} -

    -
    + onCloseRename()}> + + + + + {t("fileActions.editFile")} + + + {fileToRename && ( +
    +
    { + if (e.key === "Enter" && fileToRename) { + const newName = e.currentTarget.value + splitFileName(fileToRename.name).extension; + onRename(fileToRename.id, newName); + } + }} /> +

    + {t("fileActions.extension")}: {splitFileName(fileToRename.name).extension} +

    - )} - - -
    + )} + + - - - + +
    +
    - - - {t("fileActions.deleteFile")} - -

    {t("fileActions.deleteConfirmation", { fileName: fileToDelete?.name })}

    -

    {t("fileActions.deleteWarning")}

    -
    - - - - -
    -
    + + + ); } diff --git a/apps/web/src/components/modals/file-preview-modal.tsx b/apps/web/src/components/modals/file-preview-modal.tsx index c8d414b..56f4360 100644 --- a/apps/web/src/components/modals/file-preview-modal.tsx +++ b/apps/web/src/components/modals/file-preview-modal.tsx @@ -1,13 +1,16 @@ -/* eslint-disable jsx-a11y/media-has-caption */ +"use client"; + +import { useEffect, useState } from "react"; +import { IconDownload } from "@tabler/icons-react"; +import { useTranslations } from "next-intl"; +import { toast } from "sonner"; + +import { AspectRatio } from "@/components/ui/aspect-ratio"; +import { Button } from "@/components/ui/button"; +import { Dialog, DialogContent, DialogFooter, DialogHeader } from "@/components/ui/dialog"; +import { ScrollArea } from "@/components/ui/scroll-area"; import { getDownloadUrl } from "@/http/endpoints"; import { getFileIcon } from "@/utils/file-icons"; -import { Button } from "@heroui/button"; -import { Image } from "@heroui/image"; -import { Modal, ModalContent, ModalHeader, ModalBody, ModalFooter } from "@heroui/modal"; -import { useState, useEffect } from "react"; -import { useTranslation } from "react-i18next"; -import { FaDownload } from "react-icons/fa"; -import { toast } from "sonner"; interface FilePreviewModalProps { isOpen: boolean; @@ -20,7 +23,7 @@ interface FilePreviewModalProps { } export function FilePreviewModal({ isOpen, onClose, file }: FilePreviewModalProps) { - const { t } = useTranslation(); + const t = useTranslations(); const [previewUrl, setPreviewUrl] = useState(null); const [isLoading, setIsLoading] = useState(true); @@ -99,8 +102,8 @@ export function FilePreviewModal({ isOpen, onClose, file }: FilePreviewModalProp if (isLoading) { return (
    -
    -

    {t("filePreview.loading")}

    +
    +

    {t("filePreview.loading")}

    ); } @@ -108,9 +111,9 @@ export function FilePreviewModal({ isOpen, onClose, file }: FilePreviewModalProp if (!previewUrl) { return (
    - -

    {t("filePreview.notAvailable")}

    -

    {t("filePreview.downloadToView")}

    + +

    {t("filePreview.notAvailable")}

    +

    {t("filePreview.downloadToView")}

    ); } @@ -118,26 +121,15 @@ export function FilePreviewModal({ isOpen, onClose, file }: FilePreviewModalProp switch (fileType) { case "pdf": return ( -
    -