diff --git a/.env.example b/.env.example deleted file mode 100644 index 995c7d7..0000000 --- a/.env.example +++ /dev/null @@ -1,15 +0,0 @@ -#Refer https://github.com/itzzzme/anime-api to host your backend API -VITE_API_URL=/api - -#Refer this gist to setup proxy server https://gist.github.com/itzzzme/180813be2c7b45eedc8ce8344c8dea3b -VITE_PROXY_URL=/?url= - -#Refer https://github.com/itzzzme/m3u8proxy to host you m3u8 proxy server though it's optional but if you don't set it up you may get CORS error for some servers if you set up from the given repo then only the url structure will look like this -VITE_M3U8_PROXY_URL=/m3u8-proxy?url= - -#totaly optional / if you don't want to setup worker just change the code of getQtip.utils.js following the pattern of any other utils file -VITE_WORKER_URL=https://worker1.workers.dev,https://worker2.workers.dev,https://worker3.workers.dev,... - -VITE_BASE_IFRAME_URL=https://megaplay.buzz/stream/s-2 - -VITE_BASE_IFRAME_URL_2=https://vidwish.live/stream/s-2 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 4855fb9..0000000 --- a/.gitignore +++ /dev/null @@ -1,133 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# lock json files -package-lock.json - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 85f6de2..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 Sayan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index 1d2b28f..0000000 --- a/README.md +++ /dev/null @@ -1,119 +0,0 @@ -

-

- - AnimeHi - -
-

Zenime - Ad free anime streaming platform

-

- - Github Stars - - Github Issues - - Github Forks - -

-

-

- Zenime is an open-source anime streaming service that uses custom API, built using ReactJS with javascript and Tailwind CSS. It lets you easily find any anime with intuitive search & suggestion feature and stream without any ads. -

- -
-View more Features - -### General - -- Sub Anime support -- Dub Anime support -- User-friendly interface -- Mobile responsive -- Fast page load -- Character & Voice Actors - -### Watch Page - -- Related Animes -- Recommended Animes -- Available seasons -- Estimated schedule of upcoming episodes -- **Player** - - Autoplay - - Autoskip intro/outro - - Autonext - -
- -## Previews - -
- Home Page -
- View more screenshots -
- AnimeInfo Page - AnimeInfo Page -
- Searchbar - Searchbar -
- Character & Voice Actors - Character & Voice Actors -
- Watch Page - Watch Page -
-
-
- -## Installation and Local Development - -### 1. Make sure you have node installed on your device - -### 2. Run the following code to clone the repository and install all required dependencies - -```bash -git clone https://github.com/itzzzme/zenime.git -cd zenime -npm install # or yarn -``` - -### 3. Refer the .env.example to set your .env file up - -## Start the server - -```bash -npm start # or npm run dev (to run develepment server) -``` -## Live Deployment - -### Vercel - -Host your own instance of Zenime on vercel - -[![Deploy to Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/itzzzme/zenime) - -### Render - -Host your own instance of Zenime on Render. - -[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/itzzzme/zenime) - -### Pull Requests - -- Pull requests are welcomed that address bug fixes, improvements, or new features. -- Fork the repository and create a new branch for your changes. -- Ensure your code follows our coding standards. -- Include tests if applicable. -- Describe your changes clearly in the pull request, explaining the problem and solution. - - ### Reporting Issues - -If you discover any issues or have suggestions for improvement, please open an issue. Provide a clear and concise description of the problem, steps to reproduce it, and any relevant information about your environment. - -### Support - - If you like the project feel free to drop a star ✨. Your appreciation means a lot. - -

Made by itzzzme -🫰

diff --git a/components.json b/components.json deleted file mode 100644 index d16853e..0000000 --- a/components.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "https://ui.shadcn.com/schema.json", - "style": "new-york", - "rsc": false, - "tsx": false, - "tailwind": { - "config": "tailwind.config.js", - "css": "src/index.css", - "baseColor": "zinc", - "cssVariables": true, - "prefix": "" - }, - "aliases": { - "components": "@/components", - "utils": "@/lib/utils", - "ui": "@/components/ui", - "lib": "@/lib", - "hooks": "@/hooks" - } -} \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index 238d2e4..0000000 --- a/eslint.config.js +++ /dev/null @@ -1,38 +0,0 @@ -import js from '@eslint/js' -import globals from 'globals' -import react from 'eslint-plugin-react' -import reactHooks from 'eslint-plugin-react-hooks' -import reactRefresh from 'eslint-plugin-react-refresh' - -export default [ - { ignores: ['dist'] }, - { - files: ['**/*.{js,jsx}'], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - parserOptions: { - ecmaVersion: 'latest', - ecmaFeatures: { jsx: true }, - sourceType: 'module', - }, - }, - settings: { react: { version: '18.3' } }, - plugins: { - react, - 'react-hooks': reactHooks, - 'react-refresh': reactRefresh, - }, - rules: { - ...js.configs.recommended.rules, - ...react.configs.recommended.rules, - ...react.configs['jsx-runtime'].rules, - ...reactHooks.configs.recommended.rules, - 'react/jsx-no-target-blank': 'off', - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], - }, - }, -] diff --git a/index.html b/index.html deleted file mode 100644 index ea57811..0000000 --- a/index.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - JustAnime | Free Anime Streaming Platform - - - - - - - -
- - - diff --git a/jsconfig.json b/jsconfig.json deleted file mode 100644 index 0d81cf7..0000000 --- a/jsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@/*": ["./*"] - } - } - } - \ No newline at end of file diff --git a/lib/utils.js b/lib/utils.js deleted file mode 100644 index b20bf01..0000000 --- a/lib/utils.js +++ /dev/null @@ -1,6 +0,0 @@ -import { clsx } from "clsx"; -import { twMerge } from "tailwind-merge" - -export function cn(...inputs) { - return twMerge(clsx(inputs)); -} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 83e3160..0000000 --- a/package-lock.json +++ /dev/null @@ -1,6506 +0,0 @@ -{ - "name": "justanime", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "justanime", - "version": "0.0.0", - "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.6.0", - "@fortawesome/free-brands-svg-icons": "^6.7.2", - "@fortawesome/free-solid-svg-icons": "^6.6.0", - "@fortawesome/react-fontawesome": "^0.2.2", - "@radix-ui/react-icons": "^1.3.0", - "artplayer": "^5.2.3", - "artplayer-plugin-chapter": "^1.0.0", - "artplayer-plugin-hls-control": "^1.0.1", - "axios": "^1.7.7", - "cheerio": "^1.0.0", - "class-variance-authority": "^0.7.0", - "clsx": "^2.1.1", - "hls.js": "^1.5.17", - "lucide-react": "^0.447.0", - "react": "^18.3.1", - "react-content-loader": "^7.0.2", - "react-dom": "^18.3.1", - "react-icons": "^5.3.0", - "react-lazy-load": "^4.0.1", - "react-router-dom": "^6.26.2", - "styled-components": "^6.1.13", - "swiper": "^11.2.5", - "tailwind-merge": "^2.5.3", - "tailwindcss-animate": "^1.0.7" - }, - "devDependencies": { - "@eslint/js": "^9.9.0", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", - "@vitejs/plugin-react": "^4.3.1", - "autoprefixer": "^10.4.20", - "eslint": "^9.9.0", - "eslint-plugin-react": "^7.35.0", - "eslint-plugin-react-hooks": "^5.1.0-rc.0", - "eslint-plugin-react-refresh": "^0.4.9", - "globals": "^15.9.0", - "postcss": "^8.4.47", - "tailwindcss": "^3.4.13", - "vite": "^5.4.1" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", - "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", - "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.6", - "@babel/parser": "^7.28.0", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.0", - "@babel/types": "^7.28.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.0", - "@babel/types": "^7.28.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", - "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", - "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", - "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", - "license": "MIT", - "dependencies": { - "@emotion/memoize": "^0.8.1" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", - "license": "MIT" - }, - "node_modules/@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", - "license": "MIT" - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", - "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.15.1", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz", - "integrity": "sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz", - "integrity": "sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==", - "license": "MIT", - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.7.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-brands-svg-icons": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.7.2.tgz", - "integrity": "sha512-zu0evbcRTgjKfrr77/2XX+bU+kuGfjm0LbajJHVIgBWNIDzrhpRxiCPNT8DW5AdmSsq7Mcf9D1bH0aSeSUSM+Q==", - "license": "(CC-BY-4.0 AND MIT)", - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.7.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.2.tgz", - "integrity": "sha512-GsBrnOzU8uj0LECDfD5zomZJIjrPhIlWU82AHwa2s40FKH+kcxQaBvBo3Z4TxyZHIyX8XTDxsyA33/Vx9eFuQA==", - "license": "(CC-BY-4.0 AND MIT)", - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.7.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/react-fontawesome": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.3.tgz", - "integrity": "sha512-HlJco8RDY8NrzFVjy23b/7mNS4g9NegcrBG3n7jinwpc2x/AmSVk53IhWniLYM4szYLxRAFTAGwGn0EIlclDeQ==", - "license": "MIT", - "dependencies": { - "prop-types": "^15.8.1" - }, - "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "~1 || ~6 || ~7", - "react": "^16.3 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@radix-ui/react-icons": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.2.tgz", - "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==", - "license": "MIT", - "peerDependencies": { - "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" - } - }, - "node_modules/@remix-run/router": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.0.tgz", - "integrity": "sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", - "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", - "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", - "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", - "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", - "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", - "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", - "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", - "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", - "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", - "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", - "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", - "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", - "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", - "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", - "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", - "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", - "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", - "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", - "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", - "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", - "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", - "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", - "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^18.0.0" - } - }, - "node_modules/@types/stylis": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", - "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==", - "license": "MIT" - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", - "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.28.0", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.27", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.17.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/artplayer": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/artplayer/-/artplayer-5.2.3.tgz", - "integrity": "sha512-WaOZQrpZn/L+GgI2f0TEsoAL3Wb+v16Mu0JmWh7qKFYuvr11WNt3dWhWeIaCfoHy3NtkCWM9jTP+xwwsxdElZQ==", - "license": "MIT", - "dependencies": { - "option-validator": "^2.0.6" - } - }, - "node_modules/artplayer-plugin-chapter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/artplayer-plugin-chapter/-/artplayer-plugin-chapter-1.0.1.tgz", - "integrity": "sha512-opXKGN/AdUkzhJeOJu7Pp7ExjDI9HhFbzEXmjvhLfDwZY0zSd3PpcBA5ZWPxKMqA9qxdbInCkLtWbPEhi3ZSxA==", - "license": "MIT" - }, - "node_modules/artplayer-plugin-hls-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/artplayer-plugin-hls-control/-/artplayer-plugin-hls-control-1.0.1.tgz", - "integrity": "sha512-rbOeH/mzqgZuosOtxJ9NERil6siOLd9K7nsCRWARrSyT+zH3xdDo0WunYgDQiATniNySicxZ//ex/pPLxYECUg==", - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "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-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/camelize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001727", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", - "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cheerio": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz", - "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "encoding-sniffer": "^0.2.1", - "htmlparser2": "^10.0.0", - "parse5": "^7.3.0", - "parse5-htmlparser2-tree-adapter": "^7.1.0", - "parse5-parser-stream": "^7.1.2", - "undici": "^7.12.0", - "whatwg-mimetype": "^4.0.0" - }, - "engines": { - "node": ">=20.18.1" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/class-variance-authority": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", - "license": "Apache-2.0", - "dependencies": { - "clsx": "^2.1.1" - }, - "funding": { - "url": "https://polar.sh/cva" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-to-react-native": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", - "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", - "license": "MIT", - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "license": "Apache-2.0" - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "license": "MIT" - }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.190", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.190.tgz", - "integrity": "sha512-k4McmnB2091YIsdCgkS0fMVMPOJgxl93ltFzaryXqwip1AaxeDqKCGLxkXODDA5Ab/D+tV5EL5+aTx76RvLRxw==", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/encoding-sniffer": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", - "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", - "license": "MIT", - "dependencies": { - "iconv-lite": "^0.6.3", - "whatwg-encoding": "^3.1.1" - }, - "funding": { - "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", - "dev": true, - "license": "MIT", - "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-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.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", - "stop-iteration-iterator": "^1.1.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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "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.4", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", - "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.31.0", - "@eslint/plugin-kit": "^0.3.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", - "dev": true, - "license": "MIT", - "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", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "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" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", - "dev": true, - "license": "MIT", - "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" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", - "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "eslint": ">=8.40" - } - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hls.js": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.7.tgz", - "integrity": "sha512-QW2fnwDGKGc9DwQUGLbmMOz8G48UZK7PVNJPcOUql1b8jubKx4/eMHNP5mGqr6tYlJNDG1g10Lx2U/qPzL6zwQ==", - "license": "Apache-2.0" - }, - "node_modules/htmlparser2": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", - "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.1", - "entities": "^6.0.0" - } - }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lucide-react": { - "version": "0.447.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.447.0.tgz", - "integrity": "sha512-SZ//hQmvi+kDKrNepArVkYK7/jfeZ5uFNEnYmd45RKZcbGD78KLnrcNXmgeg6m+xNHFvTG+CblszXCy4n6DN4w==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/option-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/option-validator/-/option-validator-2.0.6.tgz", - "integrity": "sha512-tmZDan2LRIRQyhUGvkff68/O0R8UmF+Btmiiz0SmSw2ng3CfPZB9wJlIjHpe/MKUZqyIZkVIXCrwr1tIN+0Dzg==", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.3" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-parser-stream": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", - "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-import/node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-content-loader": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/react-content-loader/-/react-content-loader-7.1.1.tgz", - "integrity": "sha512-yNkqtd+15wXRLfDKZb5nTqDV2fPTG2kpUgeGRb+WBz43bU0j4DSGXETF0bnFr44fAoTPpm0Dya0WGdhpHSvtYA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": ">=16.0.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-icons": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", - "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", - "license": "MIT", - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/react-lazy-load": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/react-lazy-load/-/react-lazy-load-4.0.1.tgz", - "integrity": "sha512-TnXRr79X9rlC9UcmO6iyS28rOPHrgkHIP4+b8yZPfs1tw6k/Rp2DmFY8R20BqWR45ZWkpT+4dqV1f+yci+1ozg==", - "license": "MIT", - "peerDependencies": { - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-refresh": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-router": { - "version": "6.30.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.1.tgz", - "integrity": "sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==", - "license": "MIT", - "dependencies": { - "@remix-run/router": "1.23.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/react-router-dom": { - "version": "6.30.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.1.tgz", - "integrity": "sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==", - "license": "MIT", - "dependencies": { - "@remix-run/router": "1.23.0", - "react-router": "6.30.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "license": "MIT", - "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.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", - "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.45.1", - "@rollup/rollup-android-arm64": "4.45.1", - "@rollup/rollup-darwin-arm64": "4.45.1", - "@rollup/rollup-darwin-x64": "4.45.1", - "@rollup/rollup-freebsd-arm64": "4.45.1", - "@rollup/rollup-freebsd-x64": "4.45.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", - "@rollup/rollup-linux-arm-musleabihf": "4.45.1", - "@rollup/rollup-linux-arm64-gnu": "4.45.1", - "@rollup/rollup-linux-arm64-musl": "4.45.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-musl": "4.45.1", - "@rollup/rollup-linux-s390x-gnu": "4.45.1", - "@rollup/rollup-linux-x64-gnu": "4.45.1", - "@rollup/rollup-linux-x64-musl": "4.45.1", - "@rollup/rollup-win32-arm64-msvc": "4.45.1", - "@rollup/rollup-win32-ia32-msvc": "4.45.1", - "@rollup/rollup-win32-x64-msvc": "4.45.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-components": { - "version": "6.1.19", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.19.tgz", - "integrity": "sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==", - "license": "MIT", - "dependencies": { - "@emotion/is-prop-valid": "1.2.2", - "@emotion/unitless": "0.8.1", - "@types/stylis": "4.2.5", - "css-to-react-native": "3.2.0", - "csstype": "3.1.3", - "postcss": "8.4.49", - "shallowequal": "1.1.0", - "stylis": "4.3.2", - "tslib": "2.6.2" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0" - } - }, - "node_modules/styled-components/node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/stylis": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", - "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==", - "license": "MIT" - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swiper": { - "version": "11.2.10", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.10.tgz", - "integrity": "sha512-RMeVUUjTQH+6N3ckimK93oxz6Sn5la4aDlgPzB+rBrG/smPdCTicXyhxa+woIpopz+jewEloiEE3lKo1h9w2YQ==", - "funding": [ - { - "type": "patreon", - "url": "https://www.patreon.com/swiperjs" - }, - { - "type": "open_collective", - "url": "http://opencollective.com/swiper" - } - ], - "license": "MIT", - "engines": { - "node": ">= 4.7.0" - } - }, - "node_modules/tailwind-merge": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", - "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" - } - }, - "node_modules/tailwindcss": { - "version": "3.4.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", - "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", - "license": "MIT", - "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.2", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.6", - "lilconfig": "^3.1.3", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss-animate": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", - "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", - "license": "MIT", - "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders" - } - }, - "node_modules/tailwindcss/node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "license": "Apache-2.0" - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "license": "0BSD" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.12.0.tgz", - "integrity": "sha512-GrKEsc3ughskmGA9jevVlIOPMiiAHJ4OFUtaAH+NhfTUSiZ1wMPIQqQvAJUrJspFXJt3EBWgpAeoHEDVT1IBug==", - "license": "MIT", - "engines": { - "node": ">=20.18.1" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/vite": { - "version": "5.4.19", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", - "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", - "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 0abc694..0000000 --- a/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "justanime", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "lint": "eslint .", - "preview": "vite preview", - "host": "vite --host" - }, - "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.6.0", - "@fortawesome/free-brands-svg-icons": "^6.7.2", - "@fortawesome/free-solid-svg-icons": "^6.6.0", - "@fortawesome/react-fontawesome": "^0.2.2", - "@radix-ui/react-icons": "^1.3.0", - "artplayer": "^5.2.3", - "artplayer-plugin-chapter": "^1.0.0", - "artplayer-plugin-hls-control": "^1.0.1", - "axios": "^1.7.7", - "cheerio": "^1.0.0", - "class-variance-authority": "^0.7.0", - "clsx": "^2.1.1", - "hls.js": "^1.5.17", - "lucide-react": "^0.447.0", - "react": "^18.3.1", - "react-content-loader": "^7.0.2", - "react-dom": "^18.3.1", - "react-icons": "^5.3.0", - "react-lazy-load": "^4.0.1", - "react-router-dom": "^6.26.2", - "styled-components": "^6.1.13", - "swiper": "^11.2.5", - "tailwind-merge": "^2.5.3", - "tailwindcss-animate": "^1.0.7" - }, - "devDependencies": { - "@eslint/js": "^9.9.0", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", - "@vitejs/plugin-react": "^4.3.1", - "autoprefixer": "^10.4.20", - "eslint": "^9.9.0", - "eslint-plugin-react": "^7.35.0", - "eslint-plugin-react-hooks": "^5.1.0-rc.0", - "eslint-plugin-react-refresh": "^0.4.9", - "globals": "^15.9.0", - "postcss": "^8.4.47", - "tailwindcss": "^3.4.13", - "vite": "^5.4.1" - } -} diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 2e7af2b..0000000 --- a/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/public/Favicon.png b/public/Favicon.png deleted file mode 100644 index a7bbe4a..0000000 Binary files a/public/Favicon.png and /dev/null differ diff --git a/public/Logo.png b/public/Logo.png deleted file mode 100644 index ae75320..0000000 Binary files a/public/Logo.png and /dev/null differ diff --git a/public/robots.txt b/public/robots.txt deleted file mode 100644 index 1e85586..0000000 --- a/public/robots.txt +++ /dev/null @@ -1,4 +0,0 @@ -User-Agent: * -Allow: / - -Sitemap: https://zenime.site/sitemap.xml \ No newline at end of file diff --git a/public/sitemap.xml b/public/sitemap.xml deleted file mode 100644 index 87923c4..0000000 --- a/public/sitemap.xml +++ /dev/null @@ -1,2430 +0,0 @@ - - - - https://zenime.site/ - 2024-11-08T15:50:46+00:00 - 1.00 - - - https://zenime.site/top-upcoming - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/movie - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/tv - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/most-popular - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/top-airing - 2024-11-08T15:50:46+00:00 - 0.80 - - - - https://zenime.site/search?keyword=Dandadan - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/search?keyword=Blue%20Box - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/search?keyword=Haikyu!!%20Movie%3A%20Battle%20of%20the%20Garbage%20Dump - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/search?keyword=One%20Piece - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/search?keyword=Dragon%20Ball%20Daima - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/search?keyword=Solo%20Leveling - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/search?keyword=Re%3AZERO%20-Starting%20Life%20in%20Another%20World-%20Season%203 - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/search?keyword=Attack%20on%20Titan - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/search?keyword=Bleach%3A%20Thousand-Year%20Blood%20War%20-%20The%20Conflict - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/search?keyword=My%20Hero%20Academia%20Season%207 - 2024-11-08T15:50:46+00:00 - 0.80 - - - https://zenime.site/basilisk-1307 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/subbed-anime - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/dubbed-anime - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/ova - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/ona - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/special - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/app-download - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/action - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/adventure - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/cars - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/comedy - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/dementia - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/demons - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/drama - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/ecchi - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/fantasy - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/game - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/harem - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/historical - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/horror - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/isekai - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/josei - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/kids - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/magic - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/marial-arts - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/mecha - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/military - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/music - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/mystery - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/parody - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/police - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/psychological - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/romance - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/samurai - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/school - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/sci-fi - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/seinen - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/shoujo - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/shoujo-ai - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/shounen - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/shounen-ai - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/slice-of-life - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/space - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/sports - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/super-power - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/supernatural - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/thriller - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genre/vampire - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/filter - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/ranma-1-2-19335 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/ranma-1-2-19335 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/the-elusive-samurai-19233 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/the-elusive-samurai-19233 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/no-longer-allowed-in-another-world-19247 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/no-longer-allowed-in-another-world-19247 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/why-does-nobody-remember-me-in-this-world-19240 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/why-does-nobody-remember-me-in-this-world-19240 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/one-piece-100 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/one-piece-100 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/the-strongest-magician-in-the-demon-lords-army-was-a-human-19238 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/the-strongest-magician-in-the-demon-lords-army-was-a-human-19238 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/pseudo-harem-19246 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/pseudo-harem-19246 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/demon-slayer-kimetsu-no-yaiba-hashira-training-arc-19107 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/demon-slayer-kimetsu-no-yaiba-hashira-training-arc-19107 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/wind-breaker-19136 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/wind-breaker-19136 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/bleach-806 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/bleach-806 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/dandadan-19319 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-lock-season-2-19318 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-box-19326 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/bleach-thousand-year-blood-war-the-conflict-19322 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/rurouni-kenshin-kyoto-disturbance-19340 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/rezero-starting-life-in-another-world-season-3-19301 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/my-star-season-2-19256 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/good-bye-dragon-life-19347 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/case-closed-323 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/naruto-shippuden-355 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/jujutsu-kaisen-2nd-season-18413 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/black-clover-2404 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/chainsaw-man-17406 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/jujutsu-kaisen-tv-534 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/demon-slayer-kimetsu-no-yaiba-swordsmith-village-arc-18056 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/most-favorite - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/look-back-19083 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/i-parry-everything-19229 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/high-card-the-flowers-bloom-19410 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/jellyfish-cant-swim-in-the-night-19124 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/level-1-demon-lord-and-one-room-hero-18465 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/completed - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/recently-updated - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/hamidashi-creative-19368?w=latest - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/hamidashi-creative-19368 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/25-dimensional-seduction-19245?w=latest - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/25-dimensional-seduction-19245 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/another-journey-to-the-west-19402?w=latest - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/another-journey-to-the-west-19402 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/rurouni-kenshin-kyoto-disturbance-19340?w=latest - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/trillion-game-19362?w=latest - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/trillion-game-19362 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/good-bye-dragon-life-19347?w=latest - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/365-days-to-the-wedding-19332?w=latest - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/365-days-to-the-wedding-19332 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/mechanical-arms-19354?w=latest - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/mechanical-arms-19354 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/look-back-19083?w=latest - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/dandadan-19319?w=latest - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/loner-life-in-another-world-19337?w=latest - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/loner-life-in-another-world-19337 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/kinoko-inu-19373?w=latest - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/kinoko-inu-19373 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/recently-added - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/look-back-19083 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/i-parry-everything-19229 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/high-card-the-flowers-bloom-19410 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/jellyfish-cant-swim-in-the-night-19124 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/level-1-demon-lord-and-one-room-hero-18465 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/future-folktales-8383 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/future-folktales-8383 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/mission-yozakura-family-19133 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/mission-yozakura-family-19133 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/da-shen-xian-17405 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/da-shen-xian-17405 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/da-shen-xian-17526 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/da-shen-xian-17526 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/crayon-shin-chan-movie-31-chounouryoku-daikessen-tobe-tobe-temakizushi-18427 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/crayon-shin-chan-movie-31-chounouryoku-daikessen-tobe-tobe-temakizushi-18427 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/crayon-shin-chan-movie-30-mononoke-ninja-chinpuuden-19408 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/crayon-shin-chan-movie-30-mononoke-ninja-chinpuuden-19408 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/cardfight-vanguard-divinez-season-2-19206 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/cardfight-vanguard-divinez-season-2-19206 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/rakshasa-street-4th-season-19411 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/murder-mystery-of-the-dead-19405 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/kagaku-x-bouken-survival-19376 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/genjitsu-no-yohane-sunshine-in-the-mirror-movie-19394 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/give-it-all-19393 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/solo-leveling-reawakening-19392 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/attack-on-titan-the-last-attack-19391 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/gintama-on-theater-2d-kintama-hen-19389 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/beastars-final-season-19385 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/pinkfong-gwa-hogi-sae-chingu-ninimo-19384 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/pochaazu-19383 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/kumarba-season-2-19382 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/is-it-wrong-to-try-to-pick-up-girls-in-a-dungeon-v-19323 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/haikyu-movie-battle-of-the-garbage-dump-18922 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/my-hero-academia-season-7-19146 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/dragon-ball-daima-19328 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/other - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/0-9 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/A - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/B - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/C - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/D - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/E - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/F - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/G - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/H - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/I - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/J - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/K - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/L - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/M - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/N - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/O - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/P - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/Q - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/R - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/S - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/T - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/U - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/V - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/W - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/X - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/Y - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/az-list/Z - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/spy-x-family-code-white-19291 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/be-forever-yamato-rebel-3199-19192 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/idolish7-movie-live-4bit-beyond-the-period-19176 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-lock-episode-nagi-19085 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/my-oni-girl-19076 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/kuramerukagari-19075 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/rascal-does-not-dream-of-a-sister-venturing-out-18934 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/dead-dead-demons-dededede-destruction-18925 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/oomuro-ke-dear-sisters-18916 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/ya-boy-kongming-road-to-summer-sonia-18913 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/mobile-suit-gundam-seed-freedom-18910 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/psycho-pass-movie-providence-18715 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/white-snake-2-the-tribulation-of-the-green-snake-18682 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/detective-conan-movie-26-black-iron-submarine-18655 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/my-hero-academia-ua-heroes-battle-18629 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/digimon-adventure-02-movie-18562 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/the-imaginary-18561 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/i-am-what-i-am-18555 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/the-summer-18553 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/boonie-bears-back-to-earth-18549 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/boonie-bears-the-wild-life-18548 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/free-movie-5-the-final-stroke-kouhen-18504 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/maboroshi-18434 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/sound-euphonium-ensemble-contest-arc-18433 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/kaina-of-the-great-snow-sea-star-sage-18432 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/resident-evil-death-island-18429 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/detective-conan-movie-the-story-of-haibara-ai-black-iron-mystery-train-18412 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/tsurune-movie-hajimari-no-issha-18411 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/backflip-the-movie-18405 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/mobile-suit-gundam-cucuruz-doans-island-18400 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/movie?page=2 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/movie?page=3 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/movie?page=32 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/one-piece-log-fish-man-island-saga-19404 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/tower-of-god-season-2-workshop-battle-19400 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/punirunes-2-19381 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/okaimono-panda-19379 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/asatir-2-mirai-no-mukashi-banashi-19378 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/neko-ni-tensei-shita-ojisan-19375 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/hyakushou-kizoku-2nd-season-19374 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/puniru-is-a-kawaii-slime-19372 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/tonbo-season-2-19370 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/the-idolm-at-ster-shiny-colors-2nd-season-19369 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/a-herbivorous-dragon-of-5000-years-gets-unfairly-villainized-2nd-season-19367 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/a-story-of-a-girl-that-was-unable-to-become-a-mage-19366 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/the-prince-of-tennis-u-17-world-cup-semifinal-19365 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/kamierabi-godapp-season-2-19364 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/negative-positive-angler-19363 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/haigakura-19361 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/acro-trip-19360 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/a-terrified-teacher-at-ghoul-school-19359 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/touhai-ura-rate-mahjong-touhai-roku-19358 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/magilumiere-co-ltd-19357 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/let-this-grieving-soul-retire-19356 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/how-i-attended-an-all-guys-mixer-19355 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/the-most-notorious-talker-runs-the-worlds-greatest-clan-19353 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/love-live-superstar-3rd-season-19352 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/about-the-movement-of-the-earth-19351 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-wolves-of-mibu-19350 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/demon-lord-retry-r-19349 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/nina-the-starry-bride-19348 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/after-school-hanako-kun-part-2-19346 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/tv?page=2 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/tv?page=3 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/tv?page=113 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/boruto-naruto-next-generations-8143 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/naruto-677 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/spy-x-family-17977 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/solo-leveling-18718 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/hunter-x-hunter-2 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-lock-17889 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/demon-slayer-entertainment-district-arc-17483 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/demon-slayer-kimetsu-no-yaiba-47 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/attack-on-titan-112 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/my-hero-academia-season-6-18154 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/hells-paradise-18332 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/dragon-ball-z-325 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/the-eminence-in-shadow-17473 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/dragon-ball-super-1692 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/attack-on-titan-final-season-part-2-17753 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/death-note-60 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/mashle-magic-and-muscles-18339 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/attack-on-titan-season-3-85 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/i-got-a-cheat-skill-in-another-world-and-became-unrivaled-in-the-real-world-too-18343 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/dragon-ball-509 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/attack-on-titan-final-season-part-1-15548 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/classroom-of-the-elite-2nd-season-18076 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/fairy-tail-930 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/my-hero-academia-5th-season-15666 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/bleach-thousandyear-blood-war-the-separation-18420 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/my-star-18330 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/vinland-saga-2nd-season-18239 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/that-time-i-got-reincarnated-as-a-slime-season-3-19109 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/jujutsu-kaisen-0-movie-17763 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/most-popular?page=2 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/most-popular?page=3 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/most-popular?page=50 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/fairy-tail-100-years-quest-19253 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/super-dragon-ball-heroes-9688 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/pokemon-horizons-the-series-18397 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/seirei-gensouki-spirit-chronicles-season-2-19320 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/the-healer-who-was-banished-from-his-party-is-in-fact-the-strongest-19345 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/shangri-la-frontier-season-2-19324 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/as-a-reincarnated-aristocrat-ill-use-my-appraisal-skill-to-rise-in-the-world-season-2-19329 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/arifureta-from-commonplace-to-worlds-strongest-season-3-19321 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/super-dragon-ball-heroes-big-bang-mission-17970 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/yakuza-fiance-19336 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/battle-through-the-heavens-5th-season-18119 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/ill-become-a-villainess-who-goes-down-in-history-19334 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/demon-lord-2099-19339 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/you-are-ms-servant-19331 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/shin-chan-1058 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/the-do-over-damsel-conquers-the-dragon-emperor-19341 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/tying-the-knot-with-an-amagami-sister-19338 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/beyblade-x-18632 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/soul-land-2-peerless-tang-sect-18416 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/swallowed-star-2nd-season-18018 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/top-airing?page=2 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/top-airing?page=3 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/top-airing?page=10 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/dandadan-19319 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/dandadan-19319 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-giant-18260 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-giant-18260 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-gender-3372 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-gender-3372 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-reflection-17485 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-reflection-17485 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-box-19326 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-box-19326 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-period-17427 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-period-17427 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-lock-17889 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-lock-17889 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-dragon-6179 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-dragon-6179 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-seed-3431 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-seed-3431 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/grand-blue-dreaming-139 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/grand-blue-dreaming-139 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/perfect-blue-127 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/perfect-blue-127 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-literature-893 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-literature-893 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-wolves-of-mibu-19350 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-wolves-of-mibu-19350 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-seed-beyond-6048 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-seed-beyond-6048 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/the-blue-orchestra-18359 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/the-blue-orchestra-18359 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/bb-fish-10438 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/bb-fish-10438 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/sweet-blue-flowers-2862 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/sweet-blue-flowers-2862 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/armed-blue-gunvolt-8786 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/armed-blue-gunvolt-8786 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-seed-omake-4193 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-seed-omake-4193 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-exorcist-1198 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-exorcist-1198 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-drop-4694 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-drop-4694 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-blink-4540 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-blink-4540 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/sky-blue-3412 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/sky-blue-3412 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/ginga-no-uo-ursa-minor-blue-7064 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/ginga-no-uo-ursa-minor-blue-7064 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-dragon-the-seven-dragons-of-the-heavens-5453 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-dragon-the-seven-dragons-of-the-heavens-5453 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-lock-season-2-19318 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-lock-season-2-19318 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/aoki-honoo-10273 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/aoki-honoo-10273 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/801-tts-airbats-5741 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/801-tts-airbats-5741 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/ao-no-exorcist-kyoto-fujouou-hen-ova-2896 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/ao-no-exorcist-kyoto-fujouou-hen-ova-2896 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-archive-the-animation-19125 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-archive-the-animation-19125 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-lock-episode-nagi-19085 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-lock-episode-nagi-19085 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/world-war-blue-8602 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/world-war-blue-8602 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/her-blue-sky-1418 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/her-blue-sky-1418 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-legend-shoot-1822 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-legend-shoot-1822 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-legend-shoot-4518 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-legend-shoot-4518 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/combat-mecha-xabungle-2768 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/combat-mecha-xabungle-2768 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blue-exorcist-kyoto-saga-1628 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blue-exorcist-kyoto-saga-1628 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/search?keyword=Blue%20Box&page=2 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/search?keyword=Blue%20Box&page=3 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/haikyu-movie-battle-of-the-garbage-dump-18922 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/haikyu-movie-battle-of-the-garbage-dump-18922 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/knights-of-the-zodiac-saint-seiya-battle-for-sanctuary-18135 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/knights-of-the-zodiac-saint-seiya-battle-for-sanctuary-18135 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/persona-3-the-movie-1-spring-of-birth-1244 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/persona-3-the-movie-1-spring-of-birth-1244 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/persona-3-the-movie-4-winter-of-rebirth-500 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/persona-3-the-movie-4-winter-of-rebirth-500 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/haikyu-76 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/haikyu-76 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/ex-driver-the-movie-5019 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/ex-driver-the-movie-5019 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/dirty-pair-project-eden-3340 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/dirty-pair-project-eden-3340 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/the-last-naruto-the-movie-882 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/the-last-naruto-the-movie-882 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/boruto-naruto-the-movie-1391 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/boruto-naruto-the-movie-1391 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/love-live-the-school-idol-movie-572 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/love-live-the-school-idol-movie-572 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/banner-of-the-stars-945 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/banner-of-the-stars-945 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/recycle-of-the-penguindrum-17796 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/recycle-of-the-penguindrum-17796 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/haikyu-2nd-season-29 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/haikyu-2nd-season-29 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/haikyu-3rd-season-18 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/haikyu-3rd-season-18 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/my-hero-academia-the-movie-3-world-heroes-mission-17334 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/my-hero-academia-the-movie-3-world-heroes-mission-17334 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/naruto-shippuuden-movie-6-road-to-ninja-1066 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/naruto-shippuuden-movie-6-road-to-ninja-1066 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/persona-3-the-movie-3-falling-down-1230 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/persona-3-the-movie-3-falling-down-1230 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/love-live-sunshine-the-school-idol-movie-over-the-rainbow-1211 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/love-live-sunshine-the-school-idol-movie-over-the-rainbow-1211 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/banner-of-the-stars-ii-753 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/banner-of-the-stars-ii-753 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/black-butler-book-of-the-atlantic-224 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/black-butler-book-of-the-atlantic-224 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/magi-the-labyrinth-of-magic-425 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/magi-the-labyrinth-of-magic-425 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/magi-the-kingdom-of-magic-208 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/magi-the-kingdom-of-magic-208 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/patlabor-the-movie-1464 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/patlabor-the-movie-1464 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/persona-3-the-movie-2-midsummer-knights-dream-1088 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/persona-3-the-movie-2-midsummer-knights-dream-1088 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/my-hero-academia-the-movie-2-heroes-rising-383 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/my-hero-academia-the-movie-2-heroes-rising-383 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/battle-of-clay-10620 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/battle-of-clay-10620 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/tales-of-luminaria-the-fateful-crossroad-17962 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/tales-of-luminaria-the-fateful-crossroad-17962 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/growlanser-iv-wayfarer-of-time-8906 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/growlanser-iv-wayfarer-of-time-8906 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/blackfox-4434 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/blackfox-4434 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/mobile-police-patlabor-2-the-movie-696 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/mobile-police-patlabor-2-the-movie-696 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/garouden-the-way-of-the-lone-wolf-19165 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/garouden-the-way-of-the-lone-wolf-19165 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/saint-seiya-the-movie-evil-goddess-eris-4181 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/saint-seiya-the-movie-evil-goddess-eris-4181 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/kabaneri-of-the-iron-fortress-the-battle-of-unato-933 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/kabaneri-of-the-iron-fortress-the-battle-of-unato-933 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/saint-seiya-knights-of-the-zodiac-battle-for-sanctuary-part-2-19090 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/saint-seiya-knights-of-the-zodiac-battle-for-sanctuary-part-2-19090 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/soul-hunter-3019 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/soul-hunter-3019 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/highschool-of-the-dead-drifters-of-the-dead-5101 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/highschool-of-the-dead-drifters-of-the-dead-5101 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/search?keyword=Haikyu!!%20Movie:%20Battle%20of%20the%20Garbage%20Dump&page=2 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/search?keyword=Haikyu!!%20Movie:%20Battle%20of%20the%20Garbage%20Dump&page=3 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/search?keyword=Haikyu!!%20Movie:%20Battle%20of%20the%20Garbage%20Dump&page=76 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/one-piece-movie-1-3096 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/one-piece-movie-1-3096 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/one-piece-100 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/one-piece-fan-letter-19406 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/one-piece-fan-letter-19406 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/one-piece-film-red-18236 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/one-piece-film-red-18236 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/one-piece-the-movie-13-film-gold-550 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/one-piece-the-movie-13-film-gold-550 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/one-room-9215 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/one-room-9215 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/one-room-second-season-7392 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/one-room-second-season-7392 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/one-room-third-season-6959 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/one-room-third-season-6959 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/one-piece-episode-of-skypiea-3097 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/one-piece-episode-of-skypiea-3097 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/one-piece-log-fish-man-island-saga-19404 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/one-piece-log-fish-man-island-saga-19404 - 2024-11-08T15:50:46+00:00 - 0.64 - - - https://zenime.site/watch/one-piece-3d-gekisou-trap-coaster-3400 - 2024-11-08T15:50:46+00:00 - 0.64 - - - - \ No newline at end of file diff --git a/public/splash.jpg b/public/splash.jpg deleted file mode 100644 index 12b0bc5..0000000 Binary files a/public/splash.jpg and /dev/null differ diff --git a/src/App.css b/src/App.css deleted file mode 100644 index d608b5b..0000000 --- a/src/App.css +++ /dev/null @@ -1,27 +0,0 @@ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} -html, -body, -#root { - margin: 0; - padding: 0; -} - -.app-container { - display: flex; - flex-direction: column; - min-height: 100vh; - max-width: 2048px; - margin-inline: auto; -} -.content { - width: 100%; - flex-grow: 1; -} - -footer { - margin-top: auto; -} diff --git a/src/App.jsx b/src/App.jsx deleted file mode 100644 index 65102a4..0000000 --- a/src/App.jsx +++ /dev/null @@ -1,73 +0,0 @@ -import { useLocation } from "react-router-dom"; -import { useEffect } from "react"; -import { Routes, Route } from "react-router-dom"; -import { HomeInfoProvider } from "./context/HomeInfoContext"; -import Home from "./pages/Home/Home"; -import AnimeInfo from "./pages/animeInfo/AnimeInfo"; -import Navbar from "./components/navbar/Navbar"; -import Footer from "./components/footer/Footer"; -import Error from "./components/error/Error"; -import Category from "./pages/category/Category"; -import AtoZ from "./pages/a2z/AtoZ"; -import { azRoute, categoryRoutes } from "./utils/category.utils"; -import "./App.css"; -import Search from "./pages/search/Search"; -import Watch from "./pages/watch/Watch"; -import Producer from "./components/producer/Producer"; -import SplashScreen from "./components/splashscreen/SplashScreen"; - -function App() { - const location = useLocation(); - - // Scroll to top on location change - useEffect(() => { - window.scrollTo(0, 0); - }, [location]); - - // Check if the current route is for the splash screen - const isSplashScreen = location.pathname === "/"; - - return ( - -
-
- {!isSplashScreen && } - - } /> - } /> - } /> - } /> - } /> - } /> - } /> - {/* Render category routes */} - {categoryRoutes.map((path) => ( - - } - /> - ))} - {/* Render A to Z routes */} - {azRoute.map((path) => ( - } - /> - ))} - } /> - } /> - {/* Catch-all route for 404 */} - } /> - - {!isSplashScreen &&
} -
-
-
- ); -} - -export default App; diff --git a/src/components/Loader/AnimeInfo.loader.jsx b/src/components/Loader/AnimeInfo.loader.jsx deleted file mode 100644 index 3a20c22..0000000 --- a/src/components/Loader/AnimeInfo.loader.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import { Skeleton } from "@/src/components/ui/Skeleton/Skeleton"; -import CategoryCardLoader from "./CategoryCard.loader"; -import SidecardLoader from "./Sidecard.loader"; - -const SkeletonItems = ({ count, className }) => ( - [...Array(count)].map((_, index) => ) -); - -function AnimeInfoLoader() { - return ( - <> -
- -
- -
-
    - -
-
- -
-
- -
- -
- -
-
- -
- -
-
-
-
-
-
- -
- -
- -
-
- -
-
-
-
- - -
- - ); -} -export default AnimeInfoLoader; diff --git a/src/components/Loader/AtoZ.loader.jsx b/src/components/Loader/AtoZ.loader.jsx deleted file mode 100644 index 8c9ba62..0000000 --- a/src/components/Loader/AtoZ.loader.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Skeleton } from "../ui/Skeleton/Skeleton"; -import CategoryCardLoader from "./CategoryCard.loader"; - -const SkeletonItems = ({ count, className }) => ( - [...Array(count)].map((_, index) => ) -); - -function AtoZLoader() { - return ( -
-
    - - -
-
- -
- -
-
- -
- ); -} - -export default AtoZLoader; diff --git a/src/components/Loader/Cart.loader.jsx b/src/components/Loader/Cart.loader.jsx deleted file mode 100644 index 2467415..0000000 --- a/src/components/Loader/Cart.loader.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Skeleton } from "../ui/Skeleton/Skeleton" -const SkeletonItems = ({ count, className }) => ( - [...Array(count)].map((_, index) => ) -); -function CartLoader() { - return ( -
- -
- {[...Array(5)].map((item, index) => ( -
- -
- -
- -
-
-
- ))} -
- -
- ) -} - -export default CartLoader \ No newline at end of file diff --git a/src/components/Loader/Category.loader.jsx b/src/components/Loader/Category.loader.jsx deleted file mode 100644 index 45a6b21..0000000 --- a/src/components/Loader/Category.loader.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import { Skeleton } from "../ui/Skeleton/Skeleton" -import CategoryCardLoader from "./CategoryCard.loader" -import SidecardLoader from "./Sidecard.loader" - -function CategoryLoader() { - return ( -
-
- -
- - -
-
-
- - -
-
- ) -} - -export default CategoryLoader \ No newline at end of file diff --git a/src/components/Loader/CategoryCard.loader.jsx b/src/components/Loader/CategoryCard.loader.jsx deleted file mode 100644 index c170069..0000000 --- a/src/components/Loader/CategoryCard.loader.jsx +++ /dev/null @@ -1,35 +0,0 @@ -import { Skeleton } from "../ui/Skeleton/Skeleton"; - -function CategoryCardLoader({ className, showLabelSkeleton = true }) { - return ( -
- {showLabelSkeleton && ( - - )} -
- {[...Array(12)].map((_, index) => ( -
-
- -
- - -
-
- -
- - -
-
- ))} -
-
- ); -} - -export default CategoryCardLoader; diff --git a/src/components/Loader/Home.loader.jsx b/src/components/Loader/Home.loader.jsx deleted file mode 100644 index 21f8491..0000000 --- a/src/components/Loader/Home.loader.jsx +++ /dev/null @@ -1,32 +0,0 @@ -import CartLoader from "./Cart.loader"; -import CategoryCardLoader from "./CategoryCard.loader"; -import SidecardLoader from "./Sidecard.loader"; -import SpotlightLoader from "./Spotlight.loader"; -import Trendingloader from "./Trending.loader"; -function HomeLoader() { - return ( -
- - -
- - - - -
-
-
- - - -
-
- - -
-
-
- ); -} - -export default HomeLoader; diff --git a/src/components/Loader/Loader.jsx b/src/components/Loader/Loader.jsx deleted file mode 100644 index e6a7886..0000000 --- a/src/components/Loader/Loader.jsx +++ /dev/null @@ -1,24 +0,0 @@ -import AnimeInfoLoader from "./AnimeInfo.loader"; -import HomeLoader from "./Home.loader"; -import CategoryLoader from "./Category.loader"; -import AtoZLoader from "./AtoZ.loader"; -import ProducerLoader from "./Producer.loader"; - -const Loader = ({ type }) => { - switch (type) { - case "home": - return ; - case "animeInfo": - return ; - case "category": - return ; - case "producer": - return ; - case "AtoZ": - return ; - default: - return
; - } -}; - -export default Loader; diff --git a/src/components/Loader/Producer.loader.jsx b/src/components/Loader/Producer.loader.jsx deleted file mode 100644 index b48b908..0000000 --- a/src/components/Loader/Producer.loader.jsx +++ /dev/null @@ -1,15 +0,0 @@ -import CategoryCardLoader from "./CategoryCard.loader"; -import SidecardLoader from "./Sidecard.loader"; - -function ProducerLoader() { - return ( -
-
- - -
-
- ); -} - -export default ProducerLoader; diff --git a/src/components/Loader/Sidecard.loader.jsx b/src/components/Loader/Sidecard.loader.jsx deleted file mode 100644 index 8f9d7d5..0000000 --- a/src/components/Loader/Sidecard.loader.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Skeleton } from "../ui/Skeleton/Skeleton"; -function SidecardLoader({ className }) { - return ( -
- -
- {[...Array(10)].map((_, index) => ( -
-
- -
- -
- - -
-
-
-
- ))} -
-
- ); -} - -export default SidecardLoader; diff --git a/src/components/Loader/Spotlight.loader.jsx b/src/components/Loader/Spotlight.loader.jsx deleted file mode 100644 index 583d74c..0000000 --- a/src/components/Loader/Spotlight.loader.jsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Skeleton } from "../ui/Skeleton/Skeleton" -const SkeletonItems = ({ count, className }) => ( - [...Array(count)].map((_, index) => ) -); -function SpotlightLoader() { - return ( -
-
- - -
- -
- -
- -
-
-
-
- - - -
-
- - -
-
-
- ) -} - -export default SpotlightLoader \ No newline at end of file diff --git a/src/components/Loader/Trending.loader.jsx b/src/components/Loader/Trending.loader.jsx deleted file mode 100644 index bf777db..0000000 --- a/src/components/Loader/Trending.loader.jsx +++ /dev/null @@ -1,34 +0,0 @@ -import { useState, useEffect } from "react"; -import { Skeleton } from "../ui/Skeleton/Skeleton"; - -function TrendingLoader() { - const [count, setCount] = useState(() => window.innerWidth < 720 ? 3 : window.innerWidth < 1300 ? 4 : 6); - useEffect(() => { - const updateCount = () => { - if (window.innerWidth < 720) { - setCount(3); - } else if (window.innerWidth < 1300) { - setCount(4); - } else { - setCount(6); - } - }; - updateCount(); - window.addEventListener("resize", updateCount); - return () => window.removeEventListener("resize", updateCount); - }, []); - return ( -
- -
- {[...Array(count)].map((_, index) => ( -
- -
- ))} -
-
- ); -} - -export default TrendingLoader; diff --git a/src/components/Loader/VoiceActorlist.loader.jsx b/src/components/Loader/VoiceActorlist.loader.jsx deleted file mode 100644 index f4b975e..0000000 --- a/src/components/Loader/VoiceActorlist.loader.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import { Skeleton } from "../ui/Skeleton/Skeleton" - -function VoiceActorlistLoader() { - return ( -
- {[...Array(10)].map((_, index) => ( -
-
- -
- - -
-
-
- ))} -
- ) -} - -export default VoiceActorlistLoader \ No newline at end of file diff --git a/src/components/banner/Banner.css b/src/components/banner/Banner.css deleted file mode 100644 index 599a1b4..0000000 --- a/src/components/banner/Banner.css +++ /dev/null @@ -1,133 +0,0 @@ -.spotlight { - overflow: hidden; -} - -.spotlight-overlay { - width: 100.1%; - height: 100.1%; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom:0; - background: radial-gradient( - circle at 130% center, - rgba(32, 31, 49, 0) 50%, - rgba(32, 31, 49, 0.5) 60%, - rgba(32, 31, 49, 1) 80%, - rgba(32, 31, 49, 1) 100% - ), - linear-gradient( - to top, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 20%, - rgba(32, 31, 49, 0) 100% - ), - linear-gradient( - to left, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 20%, - rgba(32, 31, 49, 0) 100% - ), - linear-gradient( - to bottom, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 20%, - rgba(32, 31, 49, 0) 100% - ); - - z-index: 1; -} -@media only screen and (max-width: 1300px) { - .spotlight-overlay { - background: radial-gradient( - circle at 130% center, - rgba(32, 31, 49, 0) 50%, - rgba(32, 31, 49, 0.5) 60%, - rgba(32, 31, 49, 1) 80%, - rgba(32, 31, 49, 1) 100% - ), - linear-gradient( - to top, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 20%, - rgba(32, 31, 49, 0) 100% - ), - linear-gradient( - to left, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 20%, - rgba(32, 31, 49, 0) 100% - ), - linear-gradient( - to bottom, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 50%, - rgba(32, 31, 49, 0) 100% - ); - } -} -@media only screen and (max-width: 1200px) { - .spotlight-overlay { - background: radial-gradient( - circle at 100% center, - rgba(32, 31, 49, 0) 50%, - rgba(32, 31, 49, 0.5) 60%, - rgba(32, 31, 49, 1) 95%, - rgba(32, 31, 49, 1) 100% - ), - linear-gradient( - to top, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 20%, - rgba(32, 31, 49, 0) 100% - ), - linear-gradient( - to left, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 20%, - rgba(32, 31, 49, 0) 100% - ), - linear-gradient( - to bottom, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 70%, - rgba(32, 31, 49, 0) 100% - ); - } -} -@media only screen and (max-width: 900px) { - .spotlight-overlay { - background: radial-gradient( - circle at 60% center, - rgba(32, 31, 49, 0) 50%, - rgba(32, 31, 49, 0.5) 85%, - rgba(32, 31, 49, 1) 95%, - rgba(32, 31, 49, 1) 100% - ), - linear-gradient( - to top, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 70%, - rgba(32, 31, 49, 0) 100% - ), - linear-gradient( - to left, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 20%, - rgba(32, 31, 49, 0) 100% - ), - linear-gradient( - to bottom, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 70%, - rgba(32, 31, 49, 0) 100% - ), - linear-gradient( - to right, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 15%, - rgba(32, 31, 49, 0) 100% - ); - } -} diff --git a/src/components/banner/Banner.jsx b/src/components/banner/Banner.jsx deleted file mode 100644 index aa9aaf5..0000000 --- a/src/components/banner/Banner.jsx +++ /dev/null @@ -1,136 +0,0 @@ -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { - faPlay, - faClosedCaptioning, - faMicrophone, - faCalendar, - faClock, -} from "@fortawesome/free-solid-svg-icons"; -import { FaChevronRight } from "react-icons/fa"; -import { Link } from "react-router-dom"; -import { useLanguage } from "@/src/context/LanguageContext"; -import "./Banner.css"; - -function Banner({ item, index }) { - const { language } = useLanguage(); - return ( -
- {item.title} -
-
-

- #{index + 1} Spotlight -

-

- {language === "EN" ? item.title : item.japanese_title} -

-
- {item.tvInfo && ( - <> - {item.tvInfo.showType && ( -
- -

- {item.tvInfo.showType} -

-
- )} - - {item.tvInfo.duration && ( -
- -

- {item.tvInfo.duration} -

-
- )} - - {item.tvInfo.releaseDate && ( -
- -

- {item.tvInfo.releaseDate} -

-
- )} - -
- {item.tvInfo.quality && ( -
- {item.tvInfo.quality} -
- )} -
- {item.tvInfo.episodeInfo?.sub && ( -
- -

- {item.tvInfo.episodeInfo.sub} -

-
- )} - - {item.tvInfo.episodeInfo?.dub && ( -
- -

- {item.tvInfo.episodeInfo.dub} -

-
- )} -
-
- - )} -
-

- {item.description} -

-
- - -

- Detail -

- - -
-
-
- ); -} - -export default Banner; diff --git a/src/components/cart/Cart.css b/src/components/cart/Cart.css deleted file mode 100644 index ff2b750..0000000 --- a/src/components/cart/Cart.css +++ /dev/null @@ -1,10 +0,0 @@ -.dot { - width: 4px; - height: 4px; - display: flex; - justify-content: center; - align-items: center; - border-radius: 50%; - background: rgba(255, 255, 255, .3); - display: inline-block; -} diff --git a/src/components/cart/Cart.jsx b/src/components/cart/Cart.jsx deleted file mode 100644 index 0ceefe7..0000000 --- a/src/components/cart/Cart.jsx +++ /dev/null @@ -1,132 +0,0 @@ -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { - faClosedCaptioning, - faMicrophone, -} from "@fortawesome/free-solid-svg-icons"; -import { FaChevronRight } from "react-icons/fa"; -import { useLanguage } from "@/src/context/LanguageContext"; -import "./Cart.css"; -import { Link, useNavigate } from "react-router-dom"; -import { useState } from "react"; -import useToolTipPosition from "@/src/hooks/useToolTipPosition"; -import Qtip from "../qtip/Qtip"; - -function Cart({ label, data, path }) { - const { language } = useLanguage(); - const navigate = useNavigate(); - const [hoveredItem, setHoveredItem] = useState(null); - const [hoverTimeout, setHoverTimeout] = useState(null); - const { tooltipPosition, tooltipHorizontalPosition, cardRefs } = - useToolTipPosition(hoveredItem, data); - - const handleImageEnter = (item, index) => { - if (hoverTimeout) clearTimeout(hoverTimeout); - setHoveredItem(item.id + index); - }; - - const handleImageLeave = () => { - setHoverTimeout( - setTimeout(() => { - setHoveredItem(null); - }, 300) - ); - }; - - return ( -
-

- {label} -

-
- {data && - data.slice(0, 5).map((item, index) => ( -
(cardRefs.current[index] = el)} - > - {item.title} navigate(`/watch/${item.id}`)} - onMouseEnter={() => handleImageEnter(item, index)} - onMouseLeave={handleImageLeave} - /> - - {hoveredItem === item.id + index && window.innerWidth > 1024 && ( -
{ - if (hoverTimeout) clearTimeout(hoverTimeout); - }} - onMouseLeave={handleImageLeave} - > - -
- )} - -
- - {language === "EN" ? item.title : item.japanese_title} - -
- {item.tvInfo?.sub && ( -
- -

{item.tvInfo.sub}

-
- )} - - {item.tvInfo?.dub && ( -
- -

{item.tvInfo.dub}

-
- )} -
-
-

- {item.tvInfo.showType} -

-
-
-
-
- ))} - -

- View more -

- - -
-
- ); -} - -export default Cart; diff --git a/src/components/categorycard/CategoryCard.css b/src/components/categorycard/CategoryCard.css deleted file mode 100644 index 04411bc..0000000 --- a/src/components/categorycard/CategoryCard.css +++ /dev/null @@ -1,27 +0,0 @@ -.overlay { - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: linear-gradient( - to top, - rgba(32, 31, 49, 1) 0%, - rgba(32, 31, 49, 0) 20%, - rgba(32, 31, 49, 0) 100% - ); - - z-index: 50; -} -.dot { - width: 5px; - height: 5px; - display: flex; - justify-content: center; - align-items: center; - border-radius: 50%; - background: rgba(255, 255, 255, 0.3); - display: inline-block; -} diff --git a/src/components/categorycard/CategoryCard.jsx b/src/components/categorycard/CategoryCard.jsx deleted file mode 100644 index 00bd560..0000000 --- a/src/components/categorycard/CategoryCard.jsx +++ /dev/null @@ -1,340 +0,0 @@ -import React, { useCallback, useEffect, useState } from "react"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { - faClosedCaptioning, - faMicrophone, - faPlay, -} from "@fortawesome/free-solid-svg-icons"; -import { FaChevronRight } from "react-icons/fa"; -import "./CategoryCard.css"; -import { useLanguage } from "@/src/context/LanguageContext"; -import { Link, useNavigate } from "react-router-dom"; -import Qtip from "../qtip/Qtip"; -import useToolTipPosition from "@/src/hooks/useToolTipPosition"; - -const CategoryCard = React.memo( - ({ - label, - data, - showViewMore = true, - className, - categoryPage = false, - cardStyle, - path, - limit, - }) => { - const { language } = useLanguage(); - const navigate = useNavigate(); - const [showPlay, setShowPlay] = useState(false); - if (limit) { - data = data.slice(0, limit); - } - - const [itemsToRender, setItemsToRender] = useState({ - firstRow: [], - remainingItems: [], - }); - - const getItemsToRender = useCallback(() => { - if (categoryPage) { - const firstRow = - window.innerWidth > 758 && data.length > 4 ? data.slice(0, 4) : []; - const remainingItems = - window.innerWidth > 758 && data.length > 4 - ? data.slice(4) - : data.slice(0); - return { firstRow, remainingItems }; - } - return { firstRow: [], remainingItems: data.slice(0) }; - }, [categoryPage, data]); - - useEffect(() => { - const handleResize = () => { - setItemsToRender(getItemsToRender()); - }; - const newItems = getItemsToRender(); - setItemsToRender((prev) => { - if ( - JSON.stringify(prev.firstRow) !== JSON.stringify(newItems.firstRow) || - JSON.stringify(prev.remainingItems) !== - JSON.stringify(newItems.remainingItems) - ) { - return newItems; - } - return prev; - }); - - window.addEventListener("resize", handleResize); - return () => { - window.removeEventListener("resize", handleResize); - }; - }, [getItemsToRender]); - const [hoveredItem, setHoveredItem] = useState(null); - const [hoverTimeout, setHoverTimeout] = useState(null); - const { tooltipPosition, tooltipHorizontalPosition, cardRefs } = - useToolTipPosition(hoveredItem, data); - const handleMouseEnter = (item, index) => { - const timeout = setTimeout(() => { - setHoveredItem(item.id + index); - setShowPlay(true); - }, 400); - setHoverTimeout(timeout); - }; - const handleMouseLeave = () => { - clearTimeout(hoverTimeout); - setHoveredItem(null); - setShowPlay(false); - }; - return ( -
-
-

- {label} -

- {showViewMore && ( - -

- View more -

- - - )} -
- <> - {categoryPage && ( -
0 - ? "mt-8 max-[758px]:hidden" - : "" - }`} - > - {itemsToRender.firstRow.map((item, index) => ( -
(cardRefs.current[index] = el)} - > -
- navigate( - `${ - path === "top-upcoming" - ? `/${item.id}` - : `/watch/${item.id}` - }` - ) - } - onMouseEnter={() => handleMouseEnter(item, index)} - onMouseLeave={handleMouseLeave} - > - {hoveredItem === item.id + index && showPlay && ( - - )} - -
-
- {item.title} -
- {(item.tvInfo?.rating === "18+" || - item?.adultContent === true) && ( -
- 18+ -
- )} -
- {item.tvInfo?.sub && ( -
- -

- {item.tvInfo.sub} -

-
- )} - {item.tvInfo?.dub && ( -
- -

- {item.tvInfo.dub} -

-
- )} - {item.tvInfo?.eps && ( -
-

- {item.tvInfo.eps} -

-
- )} -
- {hoveredItem === item.id + index && - window.innerWidth > 1024 && ( -
- -
- )} -
- - {language === "EN" ? item.title : item.japanese_title} - - {item.description && ( -
- {item.description} -
- )} -
-
- {item.tvInfo.showType.split(" ").shift()} -
-
-
- {item.tvInfo?.duration === "m" || - item.tvInfo?.duration === "?" || - item.duration === "m" || - item.duration === "?" - ? "N/A" - : item.tvInfo?.duration || item.duration || "N/A"} -
-
-
- ))} -
- )} -
- {itemsToRender.remainingItems.map((item, index) => ( -
(cardRefs.current[index] = el)} - > -
- navigate( - `${ - path === "top-upcoming" - ? `/${item.id}` - : `/watch/${item.id}` - }` - ) - } - onMouseEnter={() => handleMouseEnter(item, index)} - onMouseLeave={handleMouseLeave} - > - {hoveredItem === item.id + index && showPlay && ( - - )} -
-
- {item.title} -
- {(item.tvInfo?.rating === "18+" || - item?.adultContent === true) && ( -
- 18+ -
- )} -
- {item.tvInfo?.sub && ( -
- -

- {item.tvInfo.sub} -

-
- )} - {item.tvInfo?.dub && ( -
- -

- {item.tvInfo.dub} -

-
- )} -
- {hoveredItem === item.id + index && - window.innerWidth > 1024 && ( -
- -
- )} -
- - {language === "EN" ? item.title : item.japanese_title} - -
-
- {item.tvInfo.showType.split(" ").shift()} -
-
-
- {item.tvInfo?.duration === "m" || - item.tvInfo?.duration === "?" || - item.duration === "m" || - item.duration === "?" - ? "N/A" - : item.tvInfo?.duration || item.duration || "N/A"} -
-
-
- ))} -
- -
- ); - } -); - -CategoryCard.displayName = "CategoryCard"; - -export default CategoryCard; diff --git a/src/components/continue/ContinueWatching.jsx b/src/components/continue/ContinueWatching.jsx deleted file mode 100644 index da8d369..0000000 --- a/src/components/continue/ContinueWatching.jsx +++ /dev/null @@ -1,132 +0,0 @@ -import { Navigation } from "swiper/modules"; -import { Swiper, SwiperSlide } from "swiper/react"; -import { Link } from "react-router-dom"; -import { useEffect, useState, useRef, useMemo } from "react"; -import "swiper/css"; -import "swiper/css/pagination"; -import "swiper/css/navigation"; -import { FaHistory, FaChevronLeft, FaChevronRight } from "react-icons/fa"; -import { useLanguage } from "@/src/context/LanguageContext"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faPlay } from "@fortawesome/free-solid-svg-icons"; - -const ContinueWatching = () => { - const [watchList, setWatchList] = useState([]); - const { language } = useLanguage(); - const swiperRef = useRef(null); - - useEffect(() => { - const data = JSON.parse(localStorage.getItem("continueWatching") || "[]"); - setWatchList(data); - }, []); - - // Memoize watchList to avoid unnecessary re-renders - const memoizedWatchList = useMemo(() => watchList, [watchList]); - - const removeFromWatchList = (episodeId) => { - setWatchList((prevList) => { - const updatedList = prevList.filter( - (item) => item.episodeId !== episodeId - ); - localStorage.setItem("continueWatching", JSON.stringify(updatedList)); - return updatedList; - }); - }; - - if (memoizedWatchList.length === 0) return null; - - return ( -
-
-
- -

- Continue Watching -

-
- -
- - -
-
- -
- - {memoizedWatchList.map((item, index) => ( - -
- - - - {item?.title} -
- -
- - {item?.adultContent === true && ( -
- 18+ -
- )} -
-

- {language === "EN" - ? item?.title - : item?.japanese_title} -

-

- Episode {item.episodeNum} -

-
-
-
- ))} -
-
-
- ); -}; - -export default ContinueWatching; diff --git a/src/components/episodelist/Episodelist.css b/src/components/episodelist/Episodelist.css deleted file mode 100644 index 8fd6b62..0000000 --- a/src/components/episodelist/Episodelist.css +++ /dev/null @@ -1,15 +0,0 @@ -@keyframes glow { - 0% { - box-shadow: 0 0 7px #ffbade; - } - 50% { - box-shadow: 0 0 20px #ffbade; - } - 100% { - box-shadow: 0 0 7px #ffbade; - } -} - -.glow-animation { - animation: glow 1.5s infinite; -} diff --git a/src/components/episodelist/Episodelist.jsx b/src/components/episodelist/Episodelist.jsx deleted file mode 100644 index cc86327..0000000 --- a/src/components/episodelist/Episodelist.jsx +++ /dev/null @@ -1,303 +0,0 @@ -import { useLanguage } from "@/src/context/LanguageContext"; -import { - faAngleDown, - faCirclePlay, - faList, - faCheck, -} from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faMagnifyingGlass } from "@fortawesome/free-solid-svg-icons"; -import { useState, useEffect, useRef } from "react"; -import "./Episodelist.css"; - -function Episodelist({ - episodes, - onEpisodeClick, - currentEpisode, - totalEpisodes, -}) { - const [activeEpisodeId, setActiveEpisodeId] = useState(currentEpisode); - const { language } = useLanguage(); - const listContainerRef = useRef(null); - const activeEpisodeRef = useRef(null); - const [showDropDown, setShowDropDown] = useState(false); - const [selectedRange, setSelectedRange] = useState([1, 100]); - const [activeRange, setActiveRange] = useState("1-100"); - const [episodeNum, setEpisodeNum] = useState(currentEpisode); - const dropDownRef = useRef(null); - const [searchedEpisode, setSearchedEpisode] = useState(null); - - const scrollToActiveEpisode = () => { - if (activeEpisodeRef.current && listContainerRef.current) { - const container = listContainerRef.current; - const activeEpisode = activeEpisodeRef.current; - const containerTop = container.getBoundingClientRect().top; - const containerHeight = container.clientHeight; - const activeEpisodeTop = activeEpisode.getBoundingClientRect().top; - const activeEpisodeHeight = activeEpisode.clientHeight; - const offset = activeEpisodeTop - containerTop; - container.scrollTop = - container.scrollTop + - offset - - containerHeight / 2 + - activeEpisodeHeight / 2; - } - }; - useEffect(() => { - setActiveEpisodeId(episodeNum); - }, [episodeNum]); - useEffect(() => { - scrollToActiveEpisode(); - }, [activeEpisodeId]); - - useEffect(() => { - const handleClickOutside = (event) => { - if (dropDownRef.current && !dropDownRef.current.contains(event.target)) { - setShowDropDown(false); - } - }; - document.addEventListener("mousedown", handleClickOutside); - return () => { - document.removeEventListener("mousedown", handleClickOutside); - }; - }, []); - - function handleChange(e) { - const value = e.target.value; - if (value.trim() === "") { - const newRange = findRangeForEpisode(1); - setSelectedRange(newRange); - setActiveRange(`${newRange[0]}-${newRange[1]}`); - setSearchedEpisode(null); - } else if (!value || isNaN(value)) { - setSearchedEpisode(null); - } else if ( - !isNaN(value) && - parseInt(value, 10) > totalEpisodes && - episodeNum !== null - ) { - const newRange = findRangeForEpisode(episodeNum); - setSelectedRange(newRange); - setActiveRange(`${newRange[0]}-${newRange[1]}`); - setSearchedEpisode(null); - } else if (!isNaN(value) && value.trim() !== "") { - const num = parseInt(value, 10); - const foundEpisode = episodes.find((item) => item?.episode_no === num); - if (foundEpisode) { - const newRange = findRangeForEpisode(num); - setSelectedRange(newRange); - setActiveRange(`${newRange[0]}-${newRange[1]}`); - setSearchedEpisode(foundEpisode?.id); - } - } else { - setSearchedEpisode(null); - } - } - - function findRangeForEpisode(episodeNumber) { - const step = 100; - const start = Math.floor((episodeNumber - 1) / step) * step + 1; - const end = Math.min(start + step - 1, totalEpisodes); - return [start, end]; - } - - function generateRangeOptions(totalEpisodes) { - const ranges = []; - const step = 100; - - for (let i = 0; i < totalEpisodes; i += step) { - const start = i + 1; - const end = Math.min(i + step, totalEpisodes); - ranges.push(`${start}-${end}`); - } - return ranges; - } - useEffect(() => { - if (currentEpisode && episodeNum) { - if (episodeNum < selectedRange[0] || episodeNum > selectedRange[1]) { - const newRange = findRangeForEpisode(episodeNum); - setSelectedRange(newRange); - setActiveRange(`${newRange[0]}-${newRange[1]}`); - } - } - }, [currentEpisode, totalEpisodes, episodeNum]); - - const handleRangeSelect = (range) => { - const [start, end] = range.split("-").map(Number); - setSelectedRange([start, end]); - }; - - useEffect(() => { - const activeEpisode = episodes.find( - (item) => item?.id.match(/ep=(\d+)/)?.[1] === activeEpisodeId - ); - if (activeEpisode) { - setEpisodeNum(activeEpisode?.episode_no); - } - }, [activeEpisodeId, episodes]); - - return ( -
-
-

List of episodes:

- {totalEpisodes > 100 && ( -
-
-
setShowDropDown((prev) => !prev)} - className="text-white w-fit mt-1 text-[13px] relative cursor-pointer bg-[#0D0D15] flex justify-center items-center" - ref={dropDownRef} - > - -
-

- EPS: {selectedRange[0]}-{selectedRange[1]} -

- -
- {showDropDown && ( -
- {generateRangeOptions(totalEpisodes).map((item, index) => ( -
{ - handleRangeSelect(item); - setActiveRange(item); - }} - className={`hover:bg-gray-200 cursor-pointer text-black ${ - item === activeRange ? "bg-[#EFF0F4]" : "" - }`} - > -

- EPS: {item} - {item === activeRange ? ( - - ) : null} -

-
- ))} -
- )} -
-
-
- - -
-
- )} -
-
-
30 - ? "p-3 grid grid-cols-5 gap-1 max-[1200px]:grid-cols-12 max-[860px]:grid-cols-10 max-[575px]:grid-cols-8 max-[478px]:grid-cols-6 max-[350px]:grid-cols-5" - : "" - }`} - > - {totalEpisodes > 30 - ? episodes - .slice(selectedRange[0] - 1, selectedRange[1]) - .map((item, index) => { - const episodeNumber = item?.id.match(/ep=(\d+)/)?.[1]; - const isActive = - activeEpisodeId === episodeNumber || - currentEpisode === episodeNumber; - const isSearched = searchedEpisode === item?.id; - - return ( -
{ - if (episodeNumber) { - onEpisodeClick(episodeNumber); - setActiveEpisodeId(episodeNumber); - setSearchedEpisode(null); - } - }} - > - - {index + selectedRange[0]} - -
- ); - }) - : episodes?.map((item, index) => { - const episodeNumber = item?.id.match(/ep=(\d+)/)?.[1]; - const isActive = - activeEpisodeId === episodeNumber || - currentEpisode === episodeNumber; - const isSearched = searchedEpisode === item?.id; - - return ( -
{ - if (episodeNumber) { - onEpisodeClick(episodeNumber); - setActiveEpisodeId(episodeNumber); - setSearchedEpisode(null); - } - }} - > -

{index + 1}

-
-

- {language === "EN" ? item?.title : item?.japanese_title} -

- {isActive && ( - - )} -
-
- ); - })} -
-
-
- ); -} - -export default Episodelist; diff --git a/src/components/error/Error.jsx b/src/components/error/Error.jsx deleted file mode 100644 index 6776274..0000000 --- a/src/components/error/Error.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import { FaChevronLeft } from "react-icons/fa" -import { useNavigate } from "react-router-dom" - -function Error({ error }) { - const navigate = useNavigate(); - return ( -
-
- -

{error === "404" ? "404 Error" : "Error"}

-

Oops! We couldn't find this page.

- -
-
- ) -} - -export default Error \ No newline at end of file diff --git a/src/components/footer/Footer.jsx b/src/components/footer/Footer.jsx deleted file mode 100644 index 43404af..0000000 --- a/src/components/footer/Footer.jsx +++ /dev/null @@ -1,62 +0,0 @@ -import logoTitle from "@/src/config/logoTitle.js"; -import website_name from "@/src/config/website.js"; -import { Link } from "react-router-dom"; - -function Footer() { - return ( -
-
- {logoTitle} -
-
-
-

A-Z LIST

-

- Searching anime order by alphabet name A to Z -

-
-
- {[ - "All", - "#", - "0-9", - ...Array.from({ length: 26 }, (_, i) => - String.fromCharCode(65 + i) - ), - ].map((item, index) => ( - - {item} - - ))} -
-
-

- {website_name} does not host any files, it merely pulls streams from - 3rd party services. Legal issues should be taken up with the file - hosts and providers. {website_name} is not responsible for any media - files shown by the video providers. -

-

- © {website_name}. All rights reserved. -

-
-
-
- ); -} - -export default Footer; diff --git a/src/components/genres/Genre.jsx b/src/components/genres/Genre.jsx deleted file mode 100644 index c74424d..0000000 --- a/src/components/genres/Genre.jsx +++ /dev/null @@ -1,54 +0,0 @@ -import React, { useState } from "react"; -import { Link } from "react-router-dom"; - -function Genre({ data }) { - const colors = [ - "#A4B389", - "#FFBADE", - "#935C5F", - "#AD92BC", - "#ABCCD8", - "#D8B2AB", - "#85E1CD", - "#B7C996", - ]; - - const [showAll, setShowAll] = useState(false); - const toggleGenres = () => { - setShowAll((prev) => !prev); - }; - - return ( -
-

Genres

-
-
- {data && - (showAll ? data : data.slice(0, 24)).map((item, index) => { - const textColor = colors[index % colors.length]; - return ( - -
- {item.charAt(0).toUpperCase() + item.slice(1)} -
- - ); - })} -
- -
-
- ); -} - -export default React.memo(Genre); diff --git a/src/components/navbar/Navbar.jsx b/src/components/navbar/Navbar.jsx deleted file mode 100644 index f6f1215..0000000 --- a/src/components/navbar/Navbar.jsx +++ /dev/null @@ -1,147 +0,0 @@ -import { useState, useEffect } from "react"; -import logoTitle from "@/src/config/logoTitle"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { - faBars, - faFilm, - faRandom, - faStar, -} from "@fortawesome/free-solid-svg-icons"; -import { useLanguage } from "@/src/context/LanguageContext"; -import { Link, useLocation } from "react-router-dom"; -import Sidebar from "../sidebar/Sidebar"; -import { SearchProvider } from "@/src/context/SearchContext"; -import WebSearch from "../searchbar/WebSearch"; -import MobileSearch from "../searchbar/MobileSearch"; -import { FaTelegramPlane } from "react-icons/fa"; - -function Navbar() { - const location = useLocation(); - const { language, toggleLanguage } = useLanguage(); - const [isNotHomePage, setIsNotHomePage] = useState( - location.pathname !== "/" && location.pathname !== "/home" - ); - const [isScrolled, setIsScrolled] = useState(false); - const [isSidebarOpen, setIsSidebarOpen] = useState(false); - - useEffect(() => { - const handleScroll = () => { - setIsScrolled(window.scrollY > 0); - }; - window.addEventListener("scroll", handleScroll); - return () => { - window.removeEventListener("scroll", handleScroll); - }; - }, []); - - const handleHamburgerClick = () => { - setIsSidebarOpen(true); - }; - - const handleCloseSidebar = () => { - setIsSidebarOpen(false); - }; - const handleRandomClick = () => { - if (location.pathname === "/random") { - window.location.reload(); - } - }; - useEffect(() => { - setIsNotHomePage( - location.pathname !== "/" && location.pathname !== "/home" - ); - }, [location.pathname]); - - return ( - - - - - ); -} - -export default Navbar; diff --git a/src/components/pageslider/PageSlider.jsx b/src/components/pageslider/PageSlider.jsx deleted file mode 100644 index c42ebe2..0000000 --- a/src/components/pageslider/PageSlider.jsx +++ /dev/null @@ -1,76 +0,0 @@ -import { faAngleDoubleLeft, faAngleDoubleRight, faChevronLeft, faChevronRight } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; - -function PageSlider({ page, totalPages, handlePageChange, start = false, style }) { - const renderPageNumbers = () => { - const pages = []; - if (totalPages === 1) return null; - if (totalPages <= 3) { - for (let i = 1; i <= totalPages; i++) { - pages.push(i); - } - } else { - if (page === 1) { - pages.push(1, 2, 3); - } else if (page === 2) { - pages.push(1, 2, 3, 4); - } else if (page === totalPages) { - pages.push(totalPages - 2, totalPages - 1, totalPages); - } else if (page === totalPages - 1) { - pages.push(totalPages - 3, totalPages - 2, totalPages - 1, totalPages); - } else { - pages.push(page - 2, page - 1, page, page + 1, page + 2); - } - } - return pages.map((p) => ( - - )); - }; - return ( -
-
- {page > 1 && totalPages > 2 && ( - - )} - {page > 1 && ( - - )} - {renderPageNumbers()} - {page < totalPages && ( - - )} - {page < totalPages && totalPages > 2 && ( - - )} -
-
- ) -} - -export default PageSlider \ No newline at end of file diff --git a/src/components/player/IframePlayer.jsx b/src/components/player/IframePlayer.jsx deleted file mode 100644 index efbaab1..0000000 --- a/src/components/player/IframePlayer.jsx +++ /dev/null @@ -1,148 +0,0 @@ -/* eslint-disable react/prop-types */ -import { useEffect, useState } from "react"; -import BouncingLoader from "../ui/bouncingloader/Bouncingloader"; -import axios from "axios"; - -export default function IframePlayer({ - animeId, - episodeId, - serverName, - servertype, - animeInfo, - episodeNum, - episodes, - playNext, - autoNext, -}) { - const api_url=import.meta.env.VITE_API_URL; - const baseURL = - serverName.toLowerCase() === "hd-1" - ? import.meta.env.VITE_BASE_IFRAME_URL - : serverName.toLowerCase() === "hd-4" - ? import.meta.env.VITE_BASE_IFRAME_URL_2 - : undefined; - - const [loading, setLoading] = useState(true); - const [iframeLoaded, setIframeLoaded] = useState(false); - const [iframeSrc, setIframeSrc] = useState(""); - const [currentEpisodeIndex, setCurrentEpisodeIndex] = useState( - episodes?.findIndex( - (episode) => episode.id.match(/ep=(\d+)/)?.[1] === episodeId - ) - ); - - useEffect(() => { - const loadIframeUrl = async () => { - setLoading(true); - setIframeLoaded(false); - setIframeSrc(""); - - const lowerName = serverName.toLowerCase(); - - if (lowerName === "hd-1" || lowerName === "hd-4") { - setIframeSrc(`${baseURL}/${episodeId}/${servertype}`); - } else if (lowerName === "hd-2" || lowerName === "hd-3") { - try { - const res = await axios.get( - `${api_url}/stream?id=${animeId}?ep=${episodeId}&server=${serverName}&type=${servertype}` - ); - - const link = res?.data?.results?.streamingLink?.link; - if (link) { - setIframeSrc(`${link}&_debug=true`); - } else { - console.error("Streaming link not found in response"); - } - } catch (err) { - console.error("Failed to fetch streaming link:", err); - } - } - }; - - loadIframeUrl(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [episodeId, servertype, serverName, animeInfo]); - - useEffect(() => { - if (episodes?.length > 0) { - const newIndex = episodes.findIndex( - (episode) => episode.id.match(/ep=(\d+)/)?.[1] === episodeId - ); - setCurrentEpisodeIndex(newIndex); - } - }, [episodeId, episodes]); - - useEffect(() => { - const handleMessage = (event) => { - const { currentTime, duration } = event.data; - if (typeof currentTime === "number" && typeof duration === "number") { - if ( - currentTime >= duration && - currentEpisodeIndex < episodes?.length - 1 && - autoNext - ) { - playNext(episodes[currentEpisodeIndex + 1].id.match(/ep=(\d+)/)?.[1]); - } - } - }; - window.addEventListener("message", handleMessage); - return () => { - window.removeEventListener("message", handleMessage); - }; - }, [autoNext, currentEpisodeIndex, episodes, playNext]); - - useEffect(() => { - setLoading(true); - setIframeLoaded(false); - return () => { - const continueWatching = JSON.parse(localStorage.getItem("continueWatching")) || []; - const newEntry = { - id: animeInfo?.id, - data_id: animeInfo?.data_id, - episodeId, - episodeNum, - adultContent: animeInfo?.adultContent, - poster: animeInfo?.poster, - title: animeInfo?.title, - japanese_title: animeInfo?.japanese_title, - }; - if (!newEntry.data_id) return; - const existingIndex = continueWatching.findIndex( - (item) => item.data_id === newEntry.data_id - ); - if (existingIndex !== -1) { - continueWatching[existingIndex] = newEntry; - } else { - continueWatching.push(newEntry); - } - localStorage.setItem("continueWatching", JSON.stringify(continueWatching)); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [episodeId, servertype]); - - return ( -
- {/* Loader Overlay */} -
- -
- - -
- ); -} diff --git a/src/components/player/Player.css b/src/components/player/Player.css deleted file mode 100644 index 87bd52b..0000000 --- a/src/components/player/Player.css +++ /dev/null @@ -1,59 +0,0 @@ -.art-subtitle { - padding-inline: 0px !important; - gap: 2px !important; -} -.art-volume-panel { - padding-bottom: 20px !important; -} -.art-settings { - margin-bottom: 20px !important; -} -.art-subtitle { - margin-bottom: 1rem !important; -} -.art-subtitle-line { - min-width: fit-content; - background-color: rgba(0, 0, 0, 0.479) !important; - padding-inline: 3px !important; -} -.art-subtitle-line, -.art-subtitle-line * { - font-size: inherit !important; - color: inherit !important; - line-height: inherit !important; - font-weight: inherit !important; - white-space: inherit !important; -} -@media screen and (max-width: 370px) { - .art-progress { - padding-bottom: 5px !important; - } - .art-controls-left .art-control { - justify-content: flex-start !important; - } - .art-controls-right .art-control { - justify-content: flex-end !important; - } - .art-controls-right .art-control svg { - width: 22px; - height: 22px; - } - .art-controls-left .art-control svg { - width: 22px; - height: 22px; - } - .art-state .art-icon svg { - width: 50px; - height: 50px; - } -} -@media screen and (max-width: 350px) { - .art-controls-right .art-control svg { - width: 20px; - height: 20px; - } - .art-controls-left .art-control svg { - width: 20px; - height: 20px; - } -} diff --git a/src/components/player/Player.jsx b/src/components/player/Player.jsx deleted file mode 100644 index bcf29bb..0000000 --- a/src/components/player/Player.jsx +++ /dev/null @@ -1,494 +0,0 @@ -/* eslint-disable react/prop-types */ -import Hls from "hls.js"; -import { useEffect, useRef, useState } from "react"; -import Artplayer from "artplayer"; -import artplayerPluginChapter from "./artPlayerPluinChaper"; -import autoSkip from "./autoSkip"; -import artplayerPluginVttThumbnail from "./artPlayerPluginVttThumbnail"; -import { - backward10Icon, - backwardIcon, - captionIcon, - forward10Icon, - forwardIcon, - fullScreenOffIcon, - fullScreenOnIcon, - loadingIcon, - logo, - muteIcon, - pauseIcon, - pipIcon, - playIcon, - playIconLg, - settingsIcon, - volumeIcon, -} from "./PlayerIcons"; -import "./Player.css"; -import website_name from "@/src/config/website"; -import getChapterStyles from "./getChapterStyle"; -import artplayerPluginHlsControl from "artplayer-plugin-hls-control"; -import artplayerPluginUploadSubtitle from "./artplayerPluginUploadSubtitle"; - -Artplayer.LOG_VERSION = false; -Artplayer.CONTEXTMENU = false; - -const KEY_CODES = { - M: "m", - I: "i", - F: "f", - V: "v", - SPACE: " ", - ARROW_UP: "arrowup", - ARROW_DOWN: "arrowdown", - ARROW_RIGHT: "arrowright", - ARROW_LEFT: "arrowleft", -}; - -export default function Player({ - streamUrl, - subtitles, - thumbnail, - intro, - outro, - serverName, - autoSkipIntro, - autoPlay, - autoNext, - episodeId, - episodes, - playNext, - animeInfo, - episodeNum, - streamInfo, -}) { - const artRef = useRef(null); - const leftAtRef = useRef(0); - const proxy = import.meta.env.VITE_PROXY_URL; - const m3u8proxy = import.meta.env.VITE_M3U8_PROXY_URL?.split(",") || []; - const [currentEpisodeIndex, setCurrentEpisodeIndex] = useState( - episodes?.findIndex( - (episode) => episode.id.match(/ep=(\d+)/)?.[1] === episodeId - ) - ); - - useEffect(() => { - if (episodes?.length > 0) { - const newIndex = episodes.findIndex( - (episode) => episode.id.match(/ep=(\d+)/)?.[1] === episodeId - ); - setCurrentEpisodeIndex(newIndex); - } - }, [episodeId, episodes]); - useEffect(() => { - const applyChapterStyles = () => { - const existingStyles = document.querySelectorAll( - "style[data-chapter-styles]" - ); - existingStyles.forEach((style) => style.remove()); - const styleElement = document.createElement("style"); - styleElement.setAttribute("data-chapter-styles", "true"); - const styles = getChapterStyles(intro, outro); - styleElement.textContent = styles; - document.head.appendChild(styleElement); - return () => { - styleElement.remove(); - }; - }; - - if (streamUrl || intro || outro) { - const cleanup = applyChapterStyles(); - return cleanup; - } - }, [streamUrl, intro, outro]); - - const playM3u8 = (video, url, art) => { - if (Hls.isSupported()) { - if (art.hls) art.hls.destroy(); - const hls = new Hls(); - hls.loadSource(url); - hls.attachMedia(video); - art.hls = hls; - - art.on("destroy", () => hls.destroy()); - - // hls.on(Hls.Events.ERROR, (event, data) => { - // console.error("HLS.js error:", data); - // }); - video.addEventListener("timeupdate", () => { - const currentTime = Math.round(video.currentTime); - const duration = Math.round(video.duration); - if (duration > 0 && currentTime >= duration) { - art.pause(); - if (currentEpisodeIndex < episodes?.length - 1 && autoNext) { - playNext( - episodes[currentEpisodeIndex + 1].id.match(/ep=(\d+)/)?.[1] - ); - } - } - }); - } else if (video.canPlayType("application/vnd.apple.mpegurl")) { - video.src = url; - video.addEventListener("timeupdate", () => { - const currentTime = Math.round(video.currentTime); - const duration = Math.round(video.duration); - if (duration > 0 && currentTime >= duration) { - art.pause(); - if (currentEpisodeIndex < episodes?.length - 1 && autoNext) { - playNext( - episodes[currentEpisodeIndex + 1].id.match(/ep=(\d+)/)?.[1] - ); - } - } - }); - } else { - console.log("Unsupported playback format: m3u8"); - } - }; - - const createChapters = () => { - const chapters = []; - if (intro?.start !== 0 || intro?.end !== 0) { - chapters.push({ start: intro.start, end: intro.end, title: "intro" }); - } - if (outro?.start !== 0 || outro?.end !== 0) { - chapters.push({ start: outro.start, end: outro.end, title: "outro" }); - } - return chapters; - }; - - const handleKeydown = (event, art) => { - const tagName = event.target.tagName.toLowerCase(); - - if (tagName === "input" || tagName === "textarea") return; - - switch (event.key.toLowerCase()) { - case KEY_CODES.M: - art.muted = !art.muted; - break; - case KEY_CODES.I: - art.pip = !art.pip; - break; - case KEY_CODES.F: - event.preventDefault(); - event.stopPropagation(); - art.fullscreen = !art.fullscreen; - break; - case KEY_CODES.V: - event.preventDefault(); - event.stopPropagation(); - art.subtitle.show = !art.subtitle.show; - break; - case KEY_CODES.SPACE: - event.preventDefault(); - event.stopPropagation(); - art.playing ? art.pause() : art.play(); - break; - case KEY_CODES.ARROW_UP: - event.preventDefault(); - event.stopPropagation(); - art.volume = Math.min(art.volume + 0.1, 1); - break; - case KEY_CODES.ARROW_DOWN: - event.preventDefault(); - event.stopPropagation(); - art.volume = Math.max(art.volume - 0.1, 0); - break; - case KEY_CODES.ARROW_RIGHT: - event.preventDefault(); - event.stopPropagation(); - art.currentTime = Math.min(art.currentTime + 10, art.duration); - break; - case KEY_CODES.ARROW_LEFT: - event.preventDefault(); - event.stopPropagation(); - art.currentTime = Math.max(art.currentTime - 10, 0); - break; - default: - break; - } - }; - - useEffect(() => { - if (!streamUrl || !artRef.current) return; - const iframeUrl = streamInfo?.streamingLink?.iframe; - const headers = {}; - headers.referer=new URL(iframeUrl).origin+"/"; - const art = new Artplayer({ - url: - m3u8proxy[Math.floor(Math.random() * m3u8proxy?.length)] + - encodeURIComponent(streamUrl) + - "&headers=" + - encodeURIComponent(JSON.stringify(headers)), - container: artRef.current, - type: "m3u8", - autoplay: autoPlay, - volume: 1, - setting: true, - playbackRate: true, - pip: true, - hotkey: false, - fullscreen: true, - mutex: true, - playsInline: true, - lock: true, - airplay: true, - autoOrientation: true, - fastForward: true, - aspectRatio: true, - plugins: [ - artplayerPluginHlsControl({ - quality: { - setting: true, - getName: (level) => level.height + "P", - title: "Quality", - auto: "Auto", - }, - }), - artplayerPluginUploadSubtitle(), - artplayerPluginChapter({ chapters: createChapters() }), - ], - subtitle: { - style: { - color: "#fff", - "font-weight": "400", - left: "50%", - transform: "translateX(-50%)", - "margin-bottom": "2rem", - }, - escape: false, - }, - layers: [ - { - name: website_name, - html: logo, - tooltip: website_name, - style: { - opacity: 1, - position: "absolute", - top: "5px", - right: "5px", - transition: "opacity 0.5s ease-out", - }, - }, - { - html: "", - style: { - position: "absolute", - left: "50%", - top: 0, - width: "20%", - height: "100%", - transform: "translateX(-50%)", - }, - disable: !Artplayer.utils.isMobile, - click: () => art.toggle(), - }, - { - name: "rewind", - html: "", - style: { position: "absolute", left: 0, top: 0, width: "40%", height: "100%" }, - disable: !Artplayer.utils.isMobile, - click: () => { - art.controls.show = !art.controls.show; - }, - }, - { - name: "forward", - html: "", - style: { position: "absolute", right: 0, top: 0, width: "40%", height: "100%" }, - disable: !Artplayer.utils.isMobile, - click: () => { - art.controls.show = !art.controls.show; - }, - }, - { - name: "backwardIcon", - html: backwardIcon, - style: { - position: "absolute", - left: "25%", - top: "50%", - transform: "translate(50%,-50%)", - opacity: 0, - transition: "opacity 0.5s ease-in-out", - }, - disable: !Artplayer.utils.isMobile, - }, - { - name: "forwardIcon", - html: forwardIcon, - style: { - position: "absolute", - right: "25%", - top: "50%", - transform: "translate(50%, -50%)", - opacity: 0, - transition: "opacity 0.5s ease-in-out", - }, - disable: !Artplayer.utils.isMobile, - }, - ], - controls: [ - { - html: backward10Icon, - position: "right", - tooltip: "Backward 10s", - click: () => { - art.currentTime = Math.max(art.currentTime - 10, 0); - }, - }, - { - html: forward10Icon, - position: "right", - tooltip: "Forward 10s", - click: () => { - art.currentTime = Math.min(art.currentTime + 10, art.duration); - }, - }, - ], - icons: { - play: playIcon, - pause: pauseIcon, - setting: settingsIcon, - volume: volumeIcon, - pip: pipIcon, - volumeClose: muteIcon, - state: playIconLg, - loading: loadingIcon, - fullscreenOn: fullScreenOnIcon, - fullscreenOff: fullScreenOffIcon, - }, - customType: { m3u8: playM3u8 }, - }); - art.on("resize", () => { - art.subtitle.style({ - fontSize: - (art.width > 500 ? art.width * 0.02 : art.width * 0.03) + "px", - }); - }); - art.on("ready", () => { - const continueWatchingList = JSON.parse(localStorage.getItem("continueWatching")) || []; - const currentEntry = continueWatchingList.find((item) => item.episodeId === episodeId); - if (currentEntry?.leftAt) art.currentTime = currentEntry.leftAt; - - art.on("video:timeupdate", () => { - leftAtRef.current = Math.floor(art.currentTime); - }); - - setTimeout(() => { - art.layers[website_name].style.opacity = 0; - }, 2000); - - const defaultSubtitle = subtitles?.find((sub) => sub.label.toLowerCase() === "english"); - if (defaultSubtitle) { - art.subtitle.switch(defaultSubtitle.file, { - name: defaultSubtitle.label, - default: true, - }); - } - - const skipRanges = [ - ...(intro.start != null && intro.end != null ? [[intro.start + 1, intro.end - 1]] : []), - ...(outro.start != null && outro.end != null ? [[outro.start + 1, outro.end]] : []), - ]; - autoSkipIntro && art.plugins.add(autoSkip(skipRanges)); - - document.addEventListener("keydown", (event) => handleKeydown(event, art)); - - art.subtitle.style({ - fontSize: (art.width > 500 ? art.width * 0.02 : art.width * 0.03) + "px", - }); - - if (thumbnail) { - art.plugins.add( - artplayerPluginVttThumbnail({ - vtt: `${proxy}${thumbnail}`, - }) - ); - } - const $rewind = art.layers["rewind"]; - const $forward = art.layers["forward"]; - Artplayer.utils.isMobile && - art.proxy($rewind, "dblclick", () => { - art.currentTime = Math.max(0, art.currentTime - 10); - art.layers["backwardIcon"].style.opacity = 1; - setTimeout(() => { - art.layers["backwardIcon"].style.opacity = 0; - }, 300); - }); - Artplayer.utils.isMobile && - art.proxy($forward, "dblclick", () => { - art.currentTime = Math.max(0, art.currentTime + 10); - art.layers["forwardIcon"].style.opacity = 1; - setTimeout(() => { - art.layers["forwardIcon"].style.opacity = 0; - }, 300); - }); - if (subtitles?.length > 0) { - const defaultEnglishSub = - subtitles.find((sub) => sub.label.toLowerCase() === "english" && sub.default) || - subtitles.find((sub) => sub.label.toLowerCase() === "english"); - - art.setting.add({ - name: "captions", - icon: captionIcon, - html: "Subtitle", - tooltip: defaultEnglishSub?.label || "default", - position: "right", - selector: [ - { - html: "Display", - switch: true, - onSwitch: (item) => { - item.tooltip = item.switch ? "Hide" : "Show"; - art.subtitle.show = !item.switch; - return !item.switch; - }, - }, - ...subtitles.map((sub) => ({ - default: sub.label.toLowerCase() === "english" && sub === defaultEnglishSub, - html: sub.label, - url: sub.file, - })), - ], - onSelect: (item) => { - art.subtitle.switch(item.url, { name: item.html }); - return item.html; - }, - }); - } - }); - - return () => { - if (art && art.destroy) { - art.destroy(false); - } - document.removeEventListener("keydown", handleKeydown); - const continueWatching = JSON.parse(localStorage.getItem("continueWatching")) || []; - const newEntry = { - id: animeInfo?.id, - data_id: animeInfo?.data_id, - episodeId, - episodeNum, - adultContent: animeInfo?.adultContent, - poster: animeInfo?.poster, - title: animeInfo?.title, - japanese_title: animeInfo?.japanese_title, - leftAt: leftAtRef.current, - }; - - if (!newEntry.data_id) return; - - const existingIndex = continueWatching.findIndex((item) => item.data_id === newEntry.data_id); - if (existingIndex !== -1) { - continueWatching[existingIndex] = newEntry; - } else { - continueWatching.push(newEntry); - } - localStorage.setItem("continueWatching", JSON.stringify(continueWatching)); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [streamUrl, subtitles, intro, outro]); - - return
; -} \ No newline at end of file diff --git a/src/components/player/PlayerIcons.jsx b/src/components/player/PlayerIcons.jsx deleted file mode 100644 index 2410fa3..0000000 --- a/src/components/player/PlayerIcons.jsx +++ /dev/null @@ -1,103 +0,0 @@ -const backward10Icon = ` - - -`; - -const forward10Icon = ` - - - -`; - -const forwardIcon = ` - -`; - -const backwardIcon = ` - -`; - -const volumeIcon = ``; - -const muteIcon = ` - - -`; - -const captionIcon = ` - - -`; -const captionOffIcon = ``; - -const pipOffIcon = ` -`; - -const loadingIcon = ``; - -const pipIcon = ` - -`; - -const playIconLg = ``; - -const playIcon = ``; - -const pauseIcon = ``; - -const uploadIcon = ` - - -`; - -const settingsIcon = ` - - -`; - -const fullScreenOnIcon = ``; - -const fullScreenOffIcon = ``; - -const logo = `

- Powered by - - Zen!me - -

-`; - -export { - backward10Icon, - forward10Icon, - backwardIcon, - forwardIcon, - playIcon, - playIconLg, - pauseIcon, - loadingIcon, - uploadIcon, - settingsIcon, - pipIcon, - pipOffIcon, - volumeIcon, - muteIcon, - captionIcon, - captionOffIcon, - fullScreenOnIcon, - fullScreenOffIcon, - logo, -}; diff --git a/src/components/player/artPlayerPluginVttThumbnail.js b/src/components/player/artPlayerPluginVttThumbnail.js deleted file mode 100644 index 4cb851c..0000000 --- a/src/components/player/artPlayerPluginVttThumbnail.js +++ /dev/null @@ -1,72 +0,0 @@ -import getVttArray from "./getVttArray"; - -export default function artplayerPluginVttThumbnail(option) { - return async (art) => { - const { - constructor: { - utils: { setStyle, isMobile, addClass }, - }, - template: { $progress }, - } = art; - - let timer = null; - const thumbnails = await getVttArray(option.vtt); - - function showThumbnails($control, find, width) { - setStyle($control, "backgroundImage", `url(${find.url})`); - setStyle($control, "height", `${find.h}px`); - setStyle($control, "width", `${find.w}px`); - setStyle($control, "backgroundPosition", `-${find.x}px -${find.y}px`); - if (width <= find.w / 2) { - setStyle($control, "left", 0); - } else if (width > $progress.clientWidth - find.w / 2) { - setStyle($control, "left", `${$progress.clientWidth - find.w}px`); - } else { - setStyle($control, "left", `${width - find.w / 2}px`); - } - } - - art.controls.add({ - name: "vtt-thumbnail", - position: "top", - index: 20, - style: option.style || {}, - mounted($control) { - addClass($control, "art-control-thumbnails"); - art.on("setBar", async (type, percentage, event) => { - const isMobileDroging = type === "played" && event && isMobile; - - if (type === "hover" || isMobileDroging) { - const width = $progress.clientWidth * percentage; - const second = percentage * art.duration; - setStyle($control, "display", "flex"); - - const find = thumbnails.find( - (item) => second >= item.start && second <= item.end - ); - if (!find) return setStyle($control, "display", "none"); - - if (width > 0 && width < $progress.clientWidth) { - showThumbnails($control, find, width); - } else { - if (!isMobile) { - setStyle($control, "display", "none"); - } - } - - if (isMobileDroging) { - clearTimeout(timer); - timer = setTimeout(() => { - setStyle($control, "display", "none"); - }, 500); - } - } - }); - }, - }); - - return { - name: "artplayerPluginVttThumbnail", - }; - }; -} diff --git a/src/components/player/artPlayerPluinChaper.js b/src/components/player/artPlayerPluinChaper.js deleted file mode 100644 index ba681d8..0000000 --- a/src/components/player/artPlayerPluinChaper.js +++ /dev/null @@ -1,211 +0,0 @@ -import style from "./pluginChapterStyle.js"; - -export default function artplayerPluginChapter(option = {}) { - return (art) => { - const { $player } = art.template; - const { setStyle, append, clamp, query, isMobile, addClass, removeClass } = - art.constructor.utils; - - const html = ` -
-
-
-
-
-
-
- `; - - let titleTimer = null; - let $chapters = []; - - const $progress = art.query(".art-control-progress"); - const $inner = art.query(".art-control-progress-inner"); - const $control = append($inner, '
'); - const $title = append($inner, '
'); - - function showTitle({ $chapter, width }) { - const title = $chapter.dataset.title.trim(); - if (title) { - setStyle($title, "display", "flex"); - $title.innerText = title; - const titleWidth = $title.clientWidth; - if (width <= titleWidth / 2) { - setStyle($title, "left", 0); - } else if (width > $inner.clientWidth - titleWidth / 2) { - setStyle($title, "left", `${$inner.clientWidth - titleWidth}px`); - } else { - setStyle($title, "left", `${width - titleWidth / 2}px`); - } - } else { - setStyle($title, "display", "none"); - } - } - - function update(chapters = []) { - $chapters = []; - $control.innerText = ""; - removeClass($player, "artplayer-plugin-chapter"); - - if (!Array.isArray(chapters)) return; - if (!chapters.length) return; - if (!art.duration) return; - - chapters = chapters.sort((a, b) => a.start - b.start); - - for (let i = 0; i < chapters.length; i++) { - const chapter = chapters[i]; - const nextChapter = chapters[i + 1]; - - if (chapter.end === Infinity) { - chapter.end = art.duration; - } - - if ( - typeof chapter.start !== "number" || - typeof chapter.end !== "number" || - typeof chapter.title !== "string" - ) { - throw new Error("Illegal chapter data type"); - } - - if ( - chapter.start < 0 || - chapter.end > Math.ceil(art.duration) || - chapter.start >= chapter.end - ) { - throw new Error("Illegal chapter time point"); - } - - if (nextChapter && chapter.end > nextChapter.start) { - throw new Error("Illegal chapter time point"); - } - } - - if (chapters[0].start > 0) { - chapters.unshift({ start: 0, end: chapters[0].start, title: "" }); - } - - if (chapters[chapters.length - 1].end < art.duration) { - chapters.push({ - start: chapters[chapters.length - 1].end, - end: art.duration, - title: "", - }); - } - - for (let i = 0; i < chapters.length - 1; i++) { - if (chapters[i].end !== chapters[i + 1].start) { - chapters.splice(i + 1, 0, { - start: chapters[i].end, - end: chapters[i + 1].start, - title: "", - }); - } - } - - $chapters = chapters.map((chapter) => { - const $chapter = append($control, html); - const start = clamp(chapter.start, 0, art.duration); - const end = clamp(chapter.end, 0, art.duration); - const duration = end - start; - const percentage = duration / art.duration; - $chapter.dataset.start = start; - $chapter.dataset.end = end; - $chapter.dataset.duration = duration; - $chapter.dataset.title = chapter.title.trim(); - $chapter.style.width = `${percentage * 100}%`; - - return { - $chapter, - $hover: query(".art-progress-hover", $chapter), - $loaded: query(".art-progress-loaded", $chapter), - $played: query(".art-progress-played", $chapter), - }; - }); - - addClass($player, "artplayer-plugin-chapter"); - art.emit("setBar", "loaded", art.loaded || 0); - } - - art.on("setBar", (type, percentage, event) => { - if (!$chapters.length) return; - - for (let i = 0; i < $chapters.length; i++) { - const { $chapter, $loaded, $played, $hover } = $chapters[i]; - - const $target = { - hover: $hover, - loaded: $loaded, - played: $played, - }[type]; - - if (!$target) return; - - const width = $control.clientWidth * percentage; - const currentTime = art.duration * percentage; - const duration = parseFloat($chapter.dataset.duration); - const start = parseFloat($chapter.dataset.start); - const end = parseFloat($chapter.dataset.end); - - if (currentTime < start) { - setStyle($target, "width", 0); - } - - if (currentTime > end) { - setStyle($target, "width", "100%"); - } - - if (currentTime >= start && currentTime <= end) { - const percentage = (currentTime - start) / duration; - setStyle($target, "width", `${percentage * 100}%`); - - if (isMobile) { - if (type === "played" && event) { - showTitle({ $chapter, width }); - clearTimeout(titleTimer); - titleTimer = setTimeout(() => { - setStyle($title, "display", "none"); - }, 500); - } - } else { - if (type === "hover") { - showTitle({ $chapter, width }); - } - } - } - } - }); - - if (!isMobile) { - art.proxy($progress, "mouseleave", () => { - if (!$chapters.length) return; - setStyle($title, "display", "none"); - }); - } - - art.once("video:loadedmetadata", () => update(option.chapters)); - - return { - name: "artplayerPluginChapter", - update: ({ chapters }) => update(chapters), - }; - }; -} - -if (typeof document !== "undefined") { - const id = "artplayer-plugin-chapter"; - const $style = document.getElementById(id); - if ($style) { - $style.textContent = style; - } else { - const $style = document.createElement("style"); - $style.id = id; - $style.textContent = style; - document.head.appendChild($style); - } -} - -if (typeof window !== "undefined") { - window["artplayerPluginChapter"] = artplayerPluginChapter; -} diff --git a/src/components/player/artplayerPluginUploadSubtitle.js b/src/components/player/artplayerPluginUploadSubtitle.js deleted file mode 100644 index 20a362d..0000000 --- a/src/components/player/artplayerPluginUploadSubtitle.js +++ /dev/null @@ -1,49 +0,0 @@ -import { uploadIcon } from "./PlayerIcons"; - -export default function artplayerPluginUploadSubtitle() { - return (art) => { - const { getExt } = art.constructor.utils; - - art.setting.add({ - html: ` -
- - -
- `, - icon: uploadIcon, - onClick(setting, $setting) { - const $input = $setting.querySelector("input[name='subtitle-upload']"); - const $label = $setting.querySelector(".subtitle-upload-label"); - - art.proxy($input, "change", (event) => { - const file = event.target?.files?.[0]; - if (!file) return; - - const url = URL.createObjectURL(file); - art.subtitle.switch(url, { - type: getExt(file.name), - }); - - event.target.value = null; - - // Update UI - $label.textContent = file.name; - art.notice.show = `Upload Subtitle :${file.name}`; - setting.tooltip = file.name; - }); - }, - }); - }; -} diff --git a/src/components/player/autoSkip.js b/src/components/player/autoSkip.js deleted file mode 100644 index 38588b9..0000000 --- a/src/components/player/autoSkip.js +++ /dev/null @@ -1,74 +0,0 @@ -export default function autoSkip(option) { - function validateRanges(ranges) { - if (!Array.isArray(ranges)) { - throw new TypeError("Option must be an array of time ranges"); - } - - ranges.forEach((range, index) => { - if (!Array.isArray(range) || range.length !== 2) { - throw new TypeError( - `Range at index ${index} must be an array of two numbers` - ); - } - - const [start, end] = range; - if ( - typeof start !== "number" || - (typeof end !== "number" && end !== Infinity) - ) { - throw new TypeError( - `Range at index ${index} must contain valid numbers or Infinity` - ); - } - - if (start > end && end !== Infinity) { - throw new RangeError( - `In range at index ${index}, start time must be less than end time` - ); - } - - if (index > 0) { - const prevEnd = ranges[index - 1][1]; - if (prevEnd !== Infinity && start <= prevEnd) { - throw new RangeError( - `Range at index ${index} overlaps with the previous range` - ); - } - } - }); - } - validateRanges(option); - return (art) => { - let skipRanges = option; - - function updateRanges() { - const duration = art.duration; - skipRanges = skipRanges.map(([start, end]) => [ - start, - end === Infinity ? duration : end, - ]); - } - - function checkAndSkip() { - const currentTime = art.currentTime; - for (const [start, end] of skipRanges) { - if (currentTime >= start && currentTime < end) { - art.seek = end; - break; - } - } - } - - art.on("video:timeupdate", checkAndSkip); - art.on("video:loadedmetadata", updateRanges); - - return { - name: "autoSkip", - update(newOption = []) { - validateRanges(newOption); - skipRanges = newOption; - updateRanges(); - }, - }; - }; -} diff --git a/src/components/player/getChapterStyle.js b/src/components/player/getChapterStyle.js deleted file mode 100644 index c558d89..0000000 --- a/src/components/player/getChapterStyle.js +++ /dev/null @@ -1,82 +0,0 @@ -export default function getChapterStyles(intro, outro) { - let styles = ` - .art-chapters { - gap: 0px !important; - } - `; - - if (intro && outro) { - if ( - intro.start === 0 && - intro.end === 0 && - outro.start === 0 && - outro.end === 0 - ) { - styles += ``; - } else if ( - intro.start === 0 && - intro.end === 0 && - outro.start !== 0 && - outro.end !== 0 - ) { - styles += ` - .art-chapter:nth-child(2) { - background-color: #fdd253; - transform: scaleY(0.6); - } - `; - } else if ( - intro.start === 0 && - intro.end !== 0 && - outro.start === 0 && - outro.end === 0 - ) { - styles += ` - .art-chapter:nth-child(1){ - background-color: #fdd253; - transform: scaleY(0.6); - } - `; - } else if ( - intro.start === 0 && - intro.end !== 0 && - outro.start !== 0 && - outro.end !== 0 - ) { - styles += ` - .art-chapter:nth-child(1), - .art-chapter:nth-child(3) { - background-color: #fdd253; - transform: scaleY(0.6); - } - `; - } else if ( - intro.start !== 0 && - intro.end !== 0 && - outro.start === 0 && - outro.end === 0 - ) { - styles += ` - .art-chapter:nth-child(2) { - background-color: #fdd253; - transform: scaleY(0.6); - } - `; - } else if ( - intro.start !== 0 && - intro.end !== 0 && - outro.start !== 0 && - outro.end !== 0 - ) { - styles += ` - .art-chapter:nth-child(2), - .art-chapter:nth-child(4) { - background-color: #fdd253; - transform: scaleY(0.6); - } - `; - } - } - - return styles; -} diff --git a/src/components/player/getVttArray.js b/src/components/player/getVttArray.js deleted file mode 100644 index 6df8d10..0000000 --- a/src/components/player/getVttArray.js +++ /dev/null @@ -1,101 +0,0 @@ -function padEnd(str, targetLength, padString) { - if (str.length > targetLength) { - return String(str); - } else { - targetLength = targetLength - str.length; - if (targetLength > padString.length) { - padString += padString.repeat(targetLength / padString.length); - } - return String(str) + padString.slice(0, targetLength); - } -} - -function t2d(time) { - var arr = time.split("."); - var left = arr[0].split(":") || []; - var right = padEnd(arr[1] || "0", 3, "0"); - var ms = Number(right) / 1000; - - var h = Number(left[left.length - 3] || 0) * 3600; - var m = Number(left[left.length - 2] || 0) * 60; - var s = Number(left[left.length - 1] || 0); - return h + m + s + ms; -} - -export default async function getVttArray(vttUrl = "") { - const vttString = await (await fetch(vttUrl)).text(); - let lines = vttString.split(/\r?\n/).filter((item) => item.trim()); - const vttArray = []; - - //checking if the WEBVTT header is present - const isWebVTTHeader = lines[0].trim().toUpperCase() === "WEBVTT"; - - let startIndex = 0; - let increment = 2; - - // Check if the first line is an index line - const indexLineReg = /^\d+$/; // Regex to match lines containing only digits - - if (!isWebVTTHeader && indexLineReg.test(lines[0].trim())) { - // console.log("WEBVTT not present but index line is present"); - increment = 3; // Set increment to 3 if an index line is present - startIndex = 1; // Start from the second line - } else if (isWebVTTHeader) { - // If WEBVTT is present, check the next line - // console.log("WEBVTT lines is present checking if index line is present..."); - const indexLine = lines[1]; - if (indexLine && indexLineReg.test(indexLine.trim())) { - // console.log("Index line is present"); - increment = 3; // Set increment to 3 if an index line is present - startIndex = 2; // Start from the line after the index - } else { - // console.log("Index line is not present"); - startIndex = 1; // If no index line, start from the line after WEBVTT - increment = 2; // Set increment to 2 - } - } - - for (let i = startIndex; i < lines.length; i += increment) { - const time = lines[i]; - const text = lines[i + 1]; - if (!text.trim()) continue; - - // console.log(`Processing time line: ${time}`); // Logging processing timestamps - - const timeReg = - /((?:[0-9]{2}:)?(?:[0-9]{2}:)?[0-9]{2}(?:.[0-9]{3})?)(?: ?--> ?)((?:[0-9]{2}:)?(?:[0-9]{2}:)?[0-9]{2}(?:.[0-9]{3})?)/; - const timeMatch = time.match(timeReg); - - if (!timeMatch) { - // console.warn(`Failed to match time: ${time}`); // Log failed matches - continue; // Skip to the next loop iteration if match fails - } - - const textReg = /(.*)#(\w{4})=(.*)/i; - const textMatch = text.match(textReg); - const start = Math.floor(t2d(timeMatch[1])); - const end = Math.floor(t2d(timeMatch[2])); - - let url = textMatch[1]; - const isAbsoluteUrl = /^\/|((https?|ftp|file):\/\/)/i.test(url); - if (!isAbsoluteUrl) { - const urlArr = vttUrl.split("/"); - urlArr.pop(); - urlArr.push(url); - url = urlArr.join("/"); - } - - const result = { start, end, url }; - - const keys = textMatch[2].split(""); - const values = textMatch[3].split(","); - - for (let j = 0; j < keys.length; j++) { - result[keys[j]] = values[j]; - } - - vttArray.push(result); - } - - return vttArray; -} diff --git a/src/components/player/pluginChapterStyle.js b/src/components/player/pluginChapterStyle.js deleted file mode 100644 index 1e945ce..0000000 --- a/src/components/player/pluginChapterStyle.js +++ /dev/null @@ -1,55 +0,0 @@ -export default ` -.artplayer-plugin-chapter .art-control-progress-inner { - height: 100% !important; - background-color: transparent !important; -} -.artplayer-plugin-chapter .art-control-progress-inner > .art-progress-hover, -.artplayer-plugin-chapter .art-control-progress-inner > .art-progress-loaded, -.artplayer-plugin-chapter .art-control-progress-inner > .art-progress-played { - display: none !important; -} -.artplayer-plugin-chapter .art-control-thumbnails { - bottom: calc(var(--art-bottom-gap) + 64px) !important; -} -.artplayer-plugin-chapter .art-chapters { - position: absolute; - z-index: 0; - inset: 0; - display: flex; - align-items: center; - gap: 4px; - height: 100%; - transform: scaleY(1.25); -} -.artplayer-plugin-chapter .art-chapters .art-chapter { - display: flex; - align-items: center; - height: 100%; -} -.artplayer-plugin-chapter .art-chapters .art-chapter .art-chapter-inner { - position: relative; - cursor: pointer; - width: 100%; - height: 50%; - border-radius: 10px; - overflow: hidden; - transition: height var(--art-transition-duration) ease; - background-color: var(--art-progress-color); -} -.artplayer-plugin-chapter .art-chapters .art-chapter:hover .art-chapter-inner { - height: 100%; -} -.artplayer-plugin-chapter .art-chapter-title { - display: none; - position: absolute; - z-index: 70; - top: -50px; - left: 0; - padding: 3px 5px; - line-height: 1; - font-size: 14px; - border-radius: var(--art-border-radius); - white-space: nowrap; - background-color: var(--art-tip-background); -} -`; diff --git a/src/components/producer/Producer.jsx b/src/components/producer/Producer.jsx deleted file mode 100644 index 90b7c10..0000000 --- a/src/components/producer/Producer.jsx +++ /dev/null @@ -1,102 +0,0 @@ -import { useNavigate, useParams, useSearchParams } from "react-router-dom"; -import Error from "../error/Error"; -import Topten from "../topten/Topten"; -import Genre from "../genres/Genre"; -import SidecardLoader from "../Loader/Sidecard.loader"; -import PageSlider from "../pageslider/PageSlider"; -import CategoryCard from "../categorycard/CategoryCard"; -import { useEffect, useState } from "react"; -import { useHomeInfo } from "@/src/context/HomeInfoContext"; -import getProducer from "@/src/utils/getProducer.utils"; -import Loader from "../Loader/Loader"; - -function Producer() { - const { id } = useParams(); - const [searchParams, setSearchParams] = useSearchParams(); - const [producerInfo, setProducerInfo] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - const [totalPages, setTotalPages] = useState(0); - const page = parseInt(searchParams.get("page")) || 1; - const { homeInfo, homeInfoLoading } = useHomeInfo(); - const navigate = useNavigate(); - useEffect(() => { - const fetchProducerInfo = async () => { - setLoading(true); - try { - const data = await getProducer(id, page); - setProducerInfo(data.data); - setTotalPages(data.totalPages); - setLoading(false); - } catch (err) { - setError(err); - console.error("Error fetching category info:", err); - } - }; - fetchProducerInfo(); - window.scrollTo(0, 0); - }, [id, page]); - if (loading) return ; - if (error) { - navigate("/error-page"); - return ; - } - if (!producerInfo) { - navigate("/404-not-found-page"); - return null; - } - const handlePageChange = (newPage) => { - setSearchParams({ page: newPage }); - }; - - return ( -
- {producerInfo ? ( -
- {page > totalPages ? ( -

- You came a long way, go back
- nothing is here -

- ) : ( -
- {producerInfo && ( - - )} - -
- )} -
- {homeInfoLoading ? ( - - ) : ( - <> - {homeInfo && homeInfo.topten && ( - - )} - {homeInfo?.genres && } - - )} -
-
- ) : ( - - )} -
- ); -} -export default Producer; diff --git a/src/components/qtip/Qtip.jsx b/src/components/qtip/Qtip.jsx deleted file mode 100644 index a3c4efe..0000000 --- a/src/components/qtip/Qtip.jsx +++ /dev/null @@ -1,159 +0,0 @@ -import BouncingLoader from "../ui/bouncingloader/Bouncingloader"; -import getQtip from "@/src/utils/getQtip.utils"; -import { useState, useEffect } from "react"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { - faPlay, - faStar, - faClosedCaptioning, - faMicrophone, -} from "@fortawesome/free-solid-svg-icons"; -import { Link } from "react-router-dom"; - -function Qtip({ id }) { - const [qtip, setQtip] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - - useEffect(() => { - const fetchQtipInfo = async () => { - setLoading(true); - try { - const data = await getQtip(id); - setQtip(data); - } catch (err) { - console.error("Error fetching anime info:", err); - setError(err); - } finally { - setLoading(false); - } - }; - fetchQtipInfo(); - }, [id]); - - return ( -
- {loading || error || !qtip ? ( - - ) : ( -
-

- {qtip.title} -

-
- {qtip?.rating && ( -
- -

{qtip.rating}

-
- )} -
- {qtip?.quality && ( -
-

{qtip.quality}

-
- )} -
- {qtip?.subCount && ( -
- -

{qtip.subCount}

-
- )} - {qtip?.dubCount && ( -
- -

{qtip.dubCount}

-
- )} - {qtip?.episodeCount && ( -
-

- {qtip.episodeCount} -

-
- )} -
- {qtip?.type && ( -
-

{qtip.type}

-
- )} -
-
- {qtip?.description && ( -

- {qtip.description} -

- )} -
- {qtip?.japaneseTitle && ( -
- - Japanese:  - - {qtip.japaneseTitle} -
- )} - {qtip?.Synonyms && ( -
- - Synonyms:  - - {qtip.Synonyms} -
- )} - {qtip?.airedDate && ( -
- Aired:  - {qtip.airedDate} -
- )} - {qtip?.status && ( -
- - Status:  - - {qtip.status} -
- )} - {qtip?.genres && ( -
- - Genres:  - - {qtip.genres.map((genre, index) => ( - - - {genre} - {index === qtip.genres.length - 1 ? "" : ","}  - - - ))} -
- )} -
- - -

Watch Now

- -
- )} -
- ); -} - -export default Qtip; diff --git a/src/components/schedule/Schedule.jsx b/src/components/schedule/Schedule.jsx deleted file mode 100644 index 200f6a6..0000000 --- a/src/components/schedule/Schedule.jsx +++ /dev/null @@ -1,241 +0,0 @@ -import { useState, useEffect, useRef } from "react"; -import getSchedInfo from "../../utils/getScheduleInfo.utils"; -import { Pagination, Navigation } from "swiper/modules"; -import { Swiper, SwiperSlide } from "swiper/react"; -import { FaChevronLeft, FaChevronRight } from "react-icons/fa"; -import BouncingLoader from "../ui/bouncingloader/Bouncingloader"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faPlay } from "@fortawesome/free-solid-svg-icons"; -import "./schedule.css"; -import { Link } from "react-router-dom"; - -const Schedule = () => { - const [dates, setDates] = useState([]); - const [loading, setLoading] = useState(false); - const [error, setError] = useState(null); - const [showAll, setShowAll] = useState(false); - const [currentActiveIndex, setCurrentActiveIndex] = useState(null); - const [scheduleData, setscheduleData] = useState([]); - const [currentTime, setCurrentTime] = useState(new Date()); - const cardRefs = useRef([]); - const swiperRef = useRef(null); - const currentDate = new Date(); - const year = currentDate.getFullYear(); - const month = currentDate.getMonth(); - const monthName = currentDate.toLocaleString("default", { month: "short" }); - const daysInMonth = new Date(year, month + 1, 0).getDate(); - const GMTOffset = `GMT ${ - new Date().getTimezoneOffset() > 0 ? "-" : "+" - }${String(Math.floor(Math.abs(new Date().getTimezoneOffset()) / 60)).padStart( - 2, - "0" - )}:${String(Math.abs(new Date().getTimezoneOffset()) % 60).padStart(2, "0")}`; - const months = []; - - useEffect(() => { - for (let day = 1; day <= daysInMonth; day++) { - const date = new Date(year, month, day); - const dayname = date.toLocaleString("default", { weekday: "short" }); - const yearr = date.getFullYear(); - const monthh = String(date.getMonth() + 1).padStart(2, "0"); - const dayy = String(date.getDate()).padStart(2, "0"); - const fulldate = `${yearr}-${monthh}-${dayy}`; - months.push({ day, monthName, dayname, fulldate }); - } - setDates(months); - const timer = setInterval(() => { - setCurrentTime(new Date()); - }, 1000); - return () => clearInterval(timer); - }, []); - - useEffect(() => { - const todayIndex = dates.findIndex( - (date) => - date.fulldate === - `${currentDate.getFullYear()}-${String( - currentDate.getMonth() + 1 - ).padStart(2, "0")}-${String(currentDate.getDate()).padStart(2, "0")}` - ); - - if (todayIndex !== -1) { - setCurrentActiveIndex(todayIndex); - toggleActive(todayIndex); - } - }, [dates]); - - const fetchSched = async (date) => { - try { - setLoading(true); - - // Check if cached data exists - const cachedData = localStorage.getItem(`schedule-${date}`); - if (cachedData) { - const parsedData = JSON.parse(cachedData); - setscheduleData(Array.isArray(parsedData) ? parsedData : []); - } else { - const data = await getSchedInfo(date); - setscheduleData(Array.isArray(data) ? data : []); - localStorage.setItem(`schedule-${date}`, JSON.stringify(data || [])); - } - } catch (err) { - console.error("Error fetching schedule info:", err); - setError(err); - } finally { - setLoading(false); - } - }; - - const toggleActive = (index) => { - cardRefs.current.forEach((card) => { - if (card) { - card.classList.remove("active"); - } - }); - if (cardRefs.current[index]) { - cardRefs.current[index].classList.add("active"); - if (dates[index] && dates[index].fulldate) { - fetchSched(dates[index].fulldate); - } - setCurrentActiveIndex(index); - } - }; - - const toggleShowAll = () => { - setShowAll(!showAll); - }; - - useEffect(() => { - setShowAll(false); - if (currentActiveIndex !== null && swiperRef.current) { - swiperRef.current.slideTo(currentActiveIndex); - } - }, [currentActiveIndex]); - - return ( - <> -
-
-
- Estimated Schedule -
-

- ({GMTOffset}) {currentTime.toLocaleDateString()}{" "} - {currentTime.toLocaleTimeString()} -

-
-
-
-
- (swiperRef.current = swiper)} - > - {dates && - dates.map((date, index) => ( - -
(cardRefs.current[index] = el)} - onClick={() => toggleActive(index)} - className={`h-[70px] flex flex-col justify-center items-center w-full text-center rounded-xl shadow-lg cursor-pointer ${ - currentActiveIndex === index - ? "bg-[#ffbade] text-black" - : "bg-white bg-opacity-5 text-[#ffffff] hover:bg-[#373646] transition-all duration-300 ease-in-out" - }`} - > -
- {date.dayname} -
-
- {date.monthName} {date.day} -
-
-
- ))} -
- - -
-
- {loading ? ( -
- -
- ) : !scheduleData || scheduleData.length === 0 ? ( -
- No data to display -
- ) : error ? ( -
- Something went wrong -
- ) : ( -
- {(showAll - ? scheduleData - : Array.isArray(scheduleData) - ? scheduleData.slice(0, 7) - : [] - ).map((item, idx) => ( - -
-
- {item.time || "N/A"} -
-

- {item.title || "N/A"} -

-
- - - ))} - {scheduleData.length > 7 && ( - - )} -
- )} - - ); -}; - -export default Schedule; diff --git a/src/components/schedule/schedule.css b/src/components/schedule/schedule.css deleted file mode 100644 index 440906f..0000000 --- a/src/components/schedule/schedule.css +++ /dev/null @@ -1,11 +0,0 @@ -.next, -.prev { - width: 30px; - height: 30px; - border-radius: 100%; - background-color: white; - color: black; - font-size: 13px; - padding: 10px; - z-index: 10; -} diff --git a/src/components/searchbar/MobileSearch.jsx b/src/components/searchbar/MobileSearch.jsx deleted file mode 100644 index 80a56d7..0000000 --- a/src/components/searchbar/MobileSearch.jsx +++ /dev/null @@ -1,73 +0,0 @@ -import Suggestion from '../suggestion/Suggestion'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faMagnifyingGlass } from '@fortawesome/free-solid-svg-icons'; -import useSearch from '@/src/hooks/useSearch'; -import { useNavigate } from 'react-router-dom'; - -function MobileSearch() { - const navigate = useNavigate(); - const { - isSearchVisible, - searchValue, - setSearchValue, - isFocused, - setIsFocused, - debouncedValue, - suggestionRefs, - addSuggestionRef, - } = useSearch(); - const handleSearchClick = () => { - if (searchValue.trim() && window.innerWidth <= 600) { - navigate(`/search?keyword=${encodeURIComponent(searchValue)}`); - } - }; - return ( - <> - {isSearchVisible && ( -
- setSearchValue(e.target.value)} - onFocus={() => setIsFocused(true)} - onBlur={() => { - setTimeout(() => { - const isInsideSuggestionBox = suggestionRefs.current.some( - (ref) => ref && ref.contains(document.activeElement), - ); - if (!isInsideSuggestionBox) { - setIsFocused(false); - } - }, 100); - }} - onKeyDown={(e) => { - if (e.key === 'Enter') { - handleSearchClick(); - } - }} - /> - - {searchValue.trim() && isFocused && ( -
- -
- )} -
- )} - - ); -} - -export default MobileSearch; diff --git a/src/components/searchbar/WebSearch.jsx b/src/components/searchbar/WebSearch.jsx deleted file mode 100644 index 8f36cd6..0000000 --- a/src/components/searchbar/WebSearch.jsx +++ /dev/null @@ -1,77 +0,0 @@ -import { faMagnifyingGlass } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import Suggestion from "../suggestion/Suggestion"; -import useSearch from "@/src/hooks/useSearch"; -import { useNavigate } from "react-router-dom"; - -function WebSearch() { - const navigate = useNavigate(); - const { - setIsSearchVisible, - searchValue, - setSearchValue, - isFocused, - setIsFocused, - debouncedValue, - suggestionRefs, - addSuggestionRef, - } = useSearch(); - - const handleSearchClick = () => { - if (window.innerWidth <= 600) { - setIsSearchVisible((prev) => !prev); - } - if (searchValue.trim() && window.innerWidth > 600) { - navigate(`/search?keyword=${encodeURIComponent(searchValue)}`); - } - }; - - return ( -
- setSearchValue(e.target.value)} - onFocus={() => setIsFocused(true)} - onBlur={() => { - setTimeout(() => { - const isInsideSuggestionBox = suggestionRefs.current.some( - (ref) => ref && ref.contains(document.activeElement), - ); - if (!isInsideSuggestionBox) { - setIsFocused(false); - } - }, 100); - }} - onKeyDown={(e) => { - if (e.key === 'Enter') { - if (searchValue.trim()) { - navigate(`/search?keyword=${encodeURIComponent(searchValue)}`); - } - } - }} - /> - - {searchValue.trim() && isFocused && ( -
- -
- )} -
- ); -} - -export default WebSearch; diff --git a/src/components/servers/Servers.css b/src/components/servers/Servers.css deleted file mode 100644 index 10bf0e4..0000000 --- a/src/components/servers/Servers.css +++ /dev/null @@ -1,9 +0,0 @@ -.servers { - border-bottom: 1px dashed #35373d; -} -.servers:only-child { - border-bottom: none; -} -.servers:last-child { - border-bottom: none; -} diff --git a/src/components/servers/Servers.jsx b/src/components/servers/Servers.jsx deleted file mode 100644 index 39f82bd..0000000 --- a/src/components/servers/Servers.jsx +++ /dev/null @@ -1,187 +0,0 @@ -/* eslint-disable react/prop-types */ -import { - faClosedCaptioning, - faFile, - faMicrophone, -} from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import BouncingLoader from "../ui/bouncingloader/Bouncingloader"; -import "./Servers.css"; -import { useEffect } from "react"; - -function Servers({ - servers, - activeEpisodeNum, - activeServerId, - setActiveServerId, - serverLoading, - setActiveServerType, - setActiveServerName, -}) { - const subServers = - servers?.filter((server) => server.type === "sub") || []; - const dubServers = - servers?.filter((server) => server.type === "dub") || []; - const rawServers = - servers?.filter((server) => server.type === "raw") || []; - - useEffect(() => { - const savedServerName = localStorage.getItem("server_name"); - if (savedServerName) { - const matchingServer = servers?.find( - (server) => server.serverName === savedServerName, - ); - - if (matchingServer) { - setActiveServerId(matchingServer.data_id); - setActiveServerType(matchingServer.type); - } else if (servers && servers.length > 0) { - setActiveServerId(servers[0].data_id); - setActiveServerType(servers[0].type); - } - } else if (servers && servers.length > 0) { - setActiveServerId(servers[0].data_id); - setActiveServerType(servers[0].type); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [servers]); - - const handleServerSelect = (server) => { - setActiveServerId(server.data_id); - setActiveServerType(server.type); - setActiveServerName(server.serverName); - localStorage.setItem("server_name", server.serverName); - localStorage.setItem("server_type", server.type); - }; - return ( -
- {serverLoading ? ( -
- -
- ) : servers ? ( -
-
-

- You are watching
- - Episode {activeEpisodeNum} - -

-

- If the current server doesn't work, please try other servers - beside. -

-
-
- {rawServers.length > 0 && ( -
-
- -

RAW:

-
-
- {rawServers.map((item, index) => ( -
handleServerSelect(item)} - > -

- {item.serverName} -

-
- ))} -
-
- )} - {subServers.length > 0 && ( -
-
- -

SUB:

-
-
- {subServers.map((item, index) => ( -
handleServerSelect(item)} - > -

- {item.serverName} -

-
- ))} -
-
- )} - {dubServers.length > 0 && ( -
-
- -

DUB:

-
-
- {dubServers.map((item, index) => ( -
handleServerSelect(item)} - > -

- {item.serverName} -

-
- ))} -
-
- )} -
-
- ) : ( -

- Could not load servers
- Either reload or try again after sometime -

- )} -
- ); -} - -export default Servers; diff --git a/src/components/sidebar/Sidebar.jsx b/src/components/sidebar/Sidebar.jsx deleted file mode 100644 index 61a61c9..0000000 --- a/src/components/sidebar/Sidebar.jsx +++ /dev/null @@ -1,141 +0,0 @@ -import { FaChevronLeft } from "react-icons/fa"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faFilm, faRandom } from "@fortawesome/free-solid-svg-icons"; -import { useLanguage } from "@/src/context/LanguageContext"; -import { useEffect } from "react"; -import { Link, useLocation } from "react-router-dom"; -import { - cleanupScrollbar, - toggleScrollbar, -} from "@/src/helper/toggleScrollbar"; - -const Sidebar = ({ isOpen, onClose }) => { - const { language, toggleLanguage } = useLanguage(); - const location = useLocation(); - - useEffect(() => { - toggleScrollbar(isOpen); - return () => { - cleanupScrollbar(); - }; - }, [isOpen]); - - useEffect(() => { - onClose(); - }, [location]); - - return ( - <> - {isOpen && ( -
- )} - -
-
-
- -
-
- {[ - { icon: faRandom, label: "Random" }, - { icon: faFilm, label: "Movie" }, - ].map((item, index) => ( - - -

- {item.label} -

- - ))} -
-
- {["EN", "JP"].map((lang, index) => ( - - ))} -
-
-

- Anime name -

-
-
-
-
    - {[ - { name: "Home", path: "/home" }, - { name: "Subbed Anime", path: "/subbed-anime" }, - { name: "Dubbed Anime", path: "/dubbed-anime" }, - { name: "Most Popular", path: "/most-popular" }, - { name: "Movies", path: "/movie" }, - { name: "TV Series", path: "/tv" }, - { name: "OVAs", path: "/ova" }, - { name: "ONAs", path: "/ona" }, - { name: "Specials", path: "/special" }, - { - name: "Join Telegram", - path: "https://t.me/zenime_discussion", - }, - ].map((item, index) => ( -
  • - - {item.name} - -
  • - ))} -
-
-
- - ); -}; - -export default Sidebar; diff --git a/src/components/sidecard/Sidecard.jsx b/src/components/sidecard/Sidecard.jsx deleted file mode 100644 index fb539da..0000000 --- a/src/components/sidecard/Sidecard.jsx +++ /dev/null @@ -1,142 +0,0 @@ -import React, { useState } from "react"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { - faClosedCaptioning, - faMicrophone, -} from "@fortawesome/free-solid-svg-icons"; -import { useLanguage } from "@/src/context/LanguageContext"; -import { Link, useNavigate } from "react-router-dom"; -import useToolTipPosition from "@/src/hooks/useToolTipPosition"; -import Qtip from "../qtip/Qtip"; - -function Sidecard({ data, label, className, limit }) { - const { language } = useLanguage(); - const navigate = useNavigate(); - const [showAll, setShowAll] = useState(false); - const [hoverTimeout, setHoverTimeout] = useState(null); - const handleMouseEnter = (item, index) => { - const timeout = setTimeout(() => { - setHoveredItem(item.id + index); - }, 400); - setHoverTimeout(timeout); - }; - const handleMouseLeave = () => { - clearTimeout(hoverTimeout); - setHoveredItem(null); - }; - const toggleShowAll = () => { - setShowAll((prev) => !prev); - }; - - const displayedData = limit - ? data.slice(0, limit) - : showAll - ? data - : data.slice(0, 6); - const [hoveredItem, setHoveredItem] = useState(null); - const { tooltipPosition, tooltipHorizontalPosition, cardRefs } = - useToolTipPosition(hoveredItem, data); - return ( -
-

{label}

-
- {data && - displayedData.map((item, index) => ( -
(cardRefs.current[index] = el)} - > -
- {hoveredItem === item.id + index && - window.innerWidth > 1024 && ( -
- -
- )} - {item.title} navigate(`/watch/${item.id}`)} - onMouseEnter={() => handleMouseEnter(item, index)} - onMouseLeave={handleMouseLeave} - /> -
- - window.scrollTo({ top: 0, behavior: "smooth" }) - } - > - {language === "EN" ? item.title : item.japanese_title} - -
- {item.tvInfo?.sub && ( -
- -

- {item.tvInfo.sub} -

-
- )} - {item.tvInfo?.dub && ( -
- -

- {item.tvInfo.dub} -

-
- )} - {item.tvInfo?.showType && ( -
-
-

- {item.tvInfo.showType} -

-
- )} -
-
-
-
- ))} - {!limit && data.length > 6 && ( - - )} -
-
- ); -} - -export default React.memo(Sidecard); diff --git a/src/components/splashscreen/SplashScreen.css b/src/components/splashscreen/SplashScreen.css deleted file mode 100644 index 7401cba..0000000 --- a/src/components/splashscreen/SplashScreen.css +++ /dev/null @@ -1,227 +0,0 @@ -/* Base styles */ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; - color: white; -} - -/* Container and background */ -.splash-container { - min-height: 100vh; - width: 100%; - position: relative; - background: url('/splash.jpg') no-repeat center center fixed; - background-size: cover; - display: flex; - justify-content: center; - align-items: flex-start; - padding: 0 30px; -} - -.splash-overlay { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.7); - z-index: 1; -} - -.content-wrapper { - position: relative; - z-index: 2; - width: 100%; - max-width: 800px; - display: flex; - flex-direction: column; - align-items: center; - padding-top: 140px; -} - -/* Logo */ -.logo-container { - margin-bottom: 30px; -} - -.logo { - height: 75px; - width: auto; -} - -/* Search */ -.search-container { - width: 100%; - max-width: 500px; - position: relative; - margin-bottom: 24px; -} - -.search-input { - width: 100%; - padding: 14px 48px 14px 20px; - background: rgba(17, 17, 17, 0.75); - border: 1px solid rgba(255, 255, 255, 0.1); - border-radius: 8px; - color: white; - font-size: 16px; - outline: none; - transition: border-color 0.2s; -} - -.search-input:focus { - border-color: rgba(255, 255, 255, 0.3); -} - -.search-input::placeholder { - color: rgba(255, 255, 255, 0.5); -} - -.search-button { - position: absolute; - right: 16px; - top: 50%; - transform: translateY(-50%); - background: none; - border: none; - color: rgba(255, 255, 255, 0.5); - cursor: pointer; - padding: 0; - font-size: 18px; - transition: color 0.2s; -} - -.search-button:hover { - color: white; -} - -/* Enter button */ -.enter-button { - background: white; - color: black; - padding: 12px 24px; - border-radius: 8px; - text-decoration: none; - font-weight: 500; - margin: 8px 0 60px; - transition: background-color 0.2s; -} - -.enter-button:hover { - background: #ffbade; -} - -/* FAQ Section */ -.faq-section { - width: 100%; - max-width: 700px; -} - -.faq-title { - font-size: 32px; - font-weight: 700; - text-align: center; - margin-bottom: 40px; - color: white; -} - -.faq-list { - display: flex; - flex-direction: column; - gap: 10px; -} - -.faq-item { - background: #141414; - border-radius: 12px; - overflow: hidden; - border: 1px solid #1a1a1a; -} - -.faq-question { - width: 100%; - padding: 18px 24px; - display: flex; - justify-content: space-between; - align-items: center; - background: none; - border: none; - color: white; - font-size: 17px; - text-align: left; - cursor: pointer; - transition: all 0.2s ease; -} - -.faq-question:hover { - background: #1a1a1a; -} - -.faq-toggle { - font-size: 16px; - color: white; - opacity: 0.8; - transition: transform 0.2s ease; -} - -.faq-toggle.rotate { - transform: rotate(180deg); -} - -.faq-answer { - padding: 0 24px 18px; - color: rgba(255, 255, 255, 0.7); - line-height: 1.6; - font-size: 15px; -} - -/* Responsive adjustments */ -@media (max-width: 768px) { - .content-wrapper { - padding-top: 100px; - } - - .logo { - height: 60px; - } - - .search-input { - padding: 12px 40px 12px 16px; - font-size: 15px; - } - - .faq-title { - font-size: 24px; - margin-bottom: 24px; - } -} - -@media (max-width: 480px) { - .content-wrapper { - padding-top: 80px; - } - - .logo { - height: 50px; - } - - .search-input { - padding: 12px 36px 12px 14px; - font-size: 14px; - } - - .enter-button { - padding: 10px 20px; - font-size: 14px; - } - - .faq-question { - padding: 16px; - font-size: 15px; - } - - .faq-answer { - padding: 0 16px 16px; - font-size: 14px; - } -} diff --git a/src/components/splashscreen/SplashScreen.jsx b/src/components/splashscreen/SplashScreen.jsx deleted file mode 100644 index b060ae0..0000000 --- a/src/components/splashscreen/SplashScreen.jsx +++ /dev/null @@ -1,107 +0,0 @@ -import { useState, useCallback } from "react"; -import { Link, useNavigate } from "react-router-dom"; -import "./SplashScreen.css"; -import logoTitle from "@/src/config/logoTitle"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faMagnifyingGlass, faChevronDown } from "@fortawesome/free-solid-svg-icons"; - -const FAQ_ITEMS = [ - { - question: "Is JustAnime safe?", - answer: "Yes, JustAnime is completely safe to use. We ensure all content is properly scanned and secured for our users." - }, - { - question: "What makes JustAnime the best site to watch anime free online?", - answer: "JustAnime offers high-quality streaming, a vast library of anime, no intrusive ads, and a user-friendly interface - all completely free." - }, - { - question: "How do I request an anime?", - answer: "You can submit anime requests through our contact form or by reaching out to our support team." - } -]; - -function SplashScreen() { - const navigate = useNavigate(); - const [search, setSearch] = useState(""); - const [expandedFaq, setExpandedFaq] = useState(null); - - const handleSearchSubmit = useCallback(() => { - const trimmedSearch = search.trim(); - if (!trimmedSearch) return; - const queryParam = encodeURIComponent(trimmedSearch); - navigate(`/search?keyword=${queryParam}`); - }, [search, navigate]); - - const handleKeyDown = useCallback( - (e) => { - if (e.key === "Enter") { - handleSearchSubmit(); - } - }, - [handleSearchSubmit] - ); - - const toggleFaq = (index) => { - setExpandedFaq(expandedFaq === index ? null : index); - }; - - return ( -
-
-
-
- {logoTitle} -
- -
- setSearch(e.target.value)} - onKeyDown={handleKeyDown} - /> - -
- - - Enter Homepage → - - -
-

Frequently Asked Questions

-
- {FAQ_ITEMS.map((item, index) => ( -
- - {expandedFaq === index && ( -
- {item.answer} -
- )} -
- ))} -
-
-
-
- ); -} - -export default SplashScreen; diff --git a/src/components/spotlight/Spotlight.css b/src/components/spotlight/Spotlight.css deleted file mode 100644 index 01d867e..0000000 --- a/src/components/spotlight/Spotlight.css +++ /dev/null @@ -1,68 +0,0 @@ -.swiper { - width: 100%; -} -.swiper-slide { - font-size: 18px; - display: -webkit-box; - display: -ms-flexbox; - display: -webkit-flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - -webkit-box-align: center; - -ms-flex-align: center; -} -.button-prev, -.button-next { - width: 40px; - height: 40px; - color: white; - background-color: #383747; - border-radius: 7px; - display: flex; - justify-content: center; - align-items: center; - cursor: pointer; - transition: all 0.3s ease-out; -} -.button-prev:hover, -.button-next:hover { - background-color: #ffbade; - color: #383747; -} - -.button-prev::after { - font-family: "Font Awesome 5 Free"; - content: "\f053"; - font-weight: 900; - font-size: 14px; -} - -.button-next::after { - font-family: "Font Awesome 5 Free"; - content: "\f054"; - font-weight: 900; - font-size: 14px; -} - -.swiper-horizontal > .swiper-pagination-bullets { - display: none; -} -.swiper-pagination-bullet-active { - background-color: rgb(239, 213, 22) !important; -} -@media only screen and (max-width: 575px) { - .swiper-horizontal > .swiper-pagination-bullets { - /* bottom: var(--swiper-pagination-bottom, 8px); */ - bottom: 0; - right: 10px !important ; - left: auto !important; - width: 20px !important; - bottom: 5px !important; - display: flex !important; - gap: 18px; - align-items: center; - justify-content: center; - height: 80%; - flex-direction: column; - } -} diff --git a/src/components/spotlight/Spotlight.jsx b/src/components/spotlight/Spotlight.jsx deleted file mode 100644 index 94e2e7a..0000000 --- a/src/components/spotlight/Spotlight.jsx +++ /dev/null @@ -1,54 +0,0 @@ -import { Swiper, SwiperSlide } from "swiper/react"; -import { Navigation, Autoplay } from "swiper/modules"; -import "swiper/css"; -import "swiper/css/autoplay"; -import "swiper/css/navigation"; -import "./Spotlight.css"; -import Banner from "../banner/Banner"; - -const Spotlight = ({ spotlights }) => { - return ( - <> -
-
-
-
-
- {spotlights && spotlights.length > 0 ? ( - <> - - {spotlights.map((item, index) => ( - - - - ))} - - - ) : ( -

No spotlights to show.

- )} -
- - ); -}; - -export default Spotlight; diff --git a/src/components/suggestion/Suggestion.jsx b/src/components/suggestion/Suggestion.jsx deleted file mode 100644 index 5cacb94..0000000 --- a/src/components/suggestion/Suggestion.jsx +++ /dev/null @@ -1,115 +0,0 @@ -import getSearchSuggestion from "@/src/utils/getSearchSuggestion.utils"; -import { useEffect, useState } from "react"; -import BouncingLoader from "../ui/bouncingloader/Bouncingloader"; -import { FaChevronRight } from "react-icons/fa"; -import { Link } from "react-router-dom"; - -function Suggestion({ keyword, className }) { - const [suggestion, setSuggestion] = useState([]); - const [loading, setLoading] = useState(false); - const [error, setError] = useState(null); - const [hasFetched, setHasFetched] = useState(false); - - useEffect(() => { - const fetchSearchSuggestion = async () => { - if (!keyword) return; - setLoading(true); - setHasFetched(false); - try { - const data = await getSearchSuggestion(keyword); - setSuggestion(data); - setHasFetched(true); - } catch (err) { - console.error("Error fetching search suggestion info:", err); - setError(err); - } finally { - setLoading(false); - } - }; - fetchSearchSuggestion(); - }, [keyword]); - - return ( -
- {loading ? ( - - ) : error && !suggestion ? ( -
Error loading suggestions
- ) : suggestion && hasFetched ? ( -
- {suggestion.map((item, index) => ( - - { - e.target.src = "https://i.postimg.cc/HnHKvHpz/no-avatar.jpg"; - }} - /> -
- {item?.title && ( -

- {item.title || "N/A"} -

- )} - {item?.japanese_title && ( -

- {item.japanese_title || "N/A"} -

- )} - {(item?.releaseDate || item?.showType || item?.duration) && ( -
-

- {item.releaseDate || "N/A"} -

- -

- {item.showType || "N/A"} -

- -

- {item.duration || "N/A"} -

-
- )} -
- - ))} - {!loading && hasFetched && ( - -
-

- View all results -

- -
- - )} -
- ) : hasFetched ? ( -

No results found!

- ) : null} -
- ); -} - -export default Suggestion; diff --git a/src/components/topten/Topten.jsx b/src/components/topten/Topten.jsx deleted file mode 100644 index c0a6758..0000000 --- a/src/components/topten/Topten.jsx +++ /dev/null @@ -1,176 +0,0 @@ -import React, { useState } from "react"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { - faClosedCaptioning, - faMicrophone, -} from "@fortawesome/free-solid-svg-icons"; -import { useLanguage } from "@/src/context/LanguageContext"; -import { Link, useNavigate } from "react-router-dom"; -import useToolTipPosition from "@/src/hooks/useToolTipPosition"; -import Qtip from "../qtip/Qtip"; - -function Topten({ data, className }) { - const { language } = useLanguage(); - const [activePeriod, setActivePeriod] = useState("today"); - const [hoveredItem, setHoveredItem] = useState(null); - const [hoverTimeout, setHoverTimeout] = useState(null); - const navigate = useNavigate(); - - const handlePeriodChange = (period) => { - setActivePeriod(period); - }; - - const handleNavigate = (id) => { - navigate(`/${id}`); - window.scrollTo({ top: 0, behavior: "smooth" }); - }; - - const currentData = - activePeriod === "today" - ? data.today - : activePeriod === "week" - ? data.week - : data.month; - - const { tooltipPosition, tooltipHorizontalPosition, cardRefs } = - useToolTipPosition(hoveredItem, currentData); - - const handleMouseEnter = (item, index) => { - if (hoverTimeout) clearTimeout(hoverTimeout); - setHoveredItem(item.id + index); - }; - - const handleMouseLeave = () => { - setHoverTimeout( - setTimeout(() => { - setHoveredItem(null); - }, 300) // Small delay to prevent flickering - ); - }; - - return ( -
-
-

Top 10

-
    - {["today", "week", "month"].map((period) => ( -
  • handlePeriodChange(period)} - > - {period.charAt(0).toUpperCase() + period.slice(1)} -
  • - ))} -
-
- -
- {currentData && - currentData.map((item, index) => ( -
(cardRefs.current[index] = el)} - > -

- {`${index + 1 < 10 ? "0" : ""}${index + 1}`} -

-
- {/* Image with tooltip behavior */} - {item.title} navigate(`/watch/${item.id}`)} - onMouseEnter={() => handleMouseEnter(item, index)} - onMouseLeave={handleMouseLeave} - /> - - {/* Tooltip positioned near image */} - {hoveredItem === item.id + index && - window.innerWidth > 1024 && ( -
{ - if (hoverTimeout) clearTimeout(hoverTimeout); - }} - onMouseLeave={handleMouseLeave} - > - -
- )} - -
- handleNavigate(item.id)} - > - {language === "EN" ? item.title : item.japanese_title} - -
- {item.tvInfo?.sub && ( -
- -

- {item.tvInfo.sub} -

-
- )} - {item.tvInfo?.dub && ( -
- -

- {item.tvInfo.dub} -

-
- )} -
-
-
-
- ))} -
-
- ); -} - -export default React.memo(Topten); diff --git a/src/components/trending/Trending.jsx b/src/components/trending/Trending.jsx deleted file mode 100644 index 002ad54..0000000 --- a/src/components/trending/Trending.jsx +++ /dev/null @@ -1,77 +0,0 @@ -import { Pagination, Navigation } from "swiper/modules"; -import { Swiper, SwiperSlide } from "swiper/react"; -import { FaChevronLeft, FaChevronRight } from "react-icons/fa"; -import { useLanguage } from "@/src/context/LanguageContext"; -import { Link, useNavigate } from "react-router-dom"; - -const Trending = ({ trending }) => { - const { language } = useLanguage(); - const navigate = useNavigate(); - return ( -
-

- Trending -

-
- - {trending && - trending.map((item, idx) => ( - navigate(`/watch/${item.id}`)} - > -
-
- - {item.number} - -
- {language === "EN" ? item.title : item.japanese_title} -
-
- - {item.title} - -
-
- ))} -
-
-
- -
-
- -
-
-
-
- ); -}; - -export default Trending; diff --git a/src/components/ui/Skeleton/Skeleton.css b/src/components/ui/Skeleton/Skeleton.css deleted file mode 100644 index d51e7a0..0000000 --- a/src/components/ui/Skeleton/Skeleton.css +++ /dev/null @@ -1,23 +0,0 @@ -@keyframes shimmer { - 0% { - background-position: 100% 0; - } - 100% { - background-position: -100% 0; - } - } - - .shimmer-effect { - background: linear-gradient( - to right, - rgba(255, 255, 255, 0.1) 0%, - rgba(255, 255, 255, 0.2) 20%, - rgba(255, 255, 255, 0.3) 40%, - rgba(255, 255, 255, 0.2) 60%, - rgba(255, 255, 255, 0.1) 80%, - rgba(0, 0, 0, 0.03) 100% - ); - background-size: 200% 100%; - animation: shimmer 1.5s infinite linear; - } - \ No newline at end of file diff --git a/src/components/ui/Skeleton/Skeleton.jsx b/src/components/ui/Skeleton/Skeleton.jsx deleted file mode 100644 index eab2eaa..0000000 --- a/src/components/ui/Skeleton/Skeleton.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import { cn } from "@/lib/utils"; -import './Skeleton.css'; - -function Skeleton({ className, animation=true, ...props }) { - return ( -
- ); -} - -export { Skeleton }; diff --git a/src/components/ui/bouncingloader/Bouncingloader.css b/src/components/ui/bouncingloader/Bouncingloader.css deleted file mode 100644 index c5b1723..0000000 --- a/src/components/ui/bouncingloader/Bouncingloader.css +++ /dev/null @@ -1,45 +0,0 @@ -.bouncing-loading > div { - width: 18px; - height: 18px; - background-color: #858490; - border-radius: 100%; - display: inline-block; - -webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both; - animation: sk-bouncedelay 1.4s infinite ease-in-out both; -} - -.bouncing-loading .span1 { - -webkit-animation-delay: -0.32s; - animation-delay: -0.32s; -} - -.bouncing-loading .span2 { - -webkit-animation-delay: -0.16s; - animation-delay: -0.16s; -} - -@-webkit-keyframes sk-bouncedelay { - 0%, - 100%, - 80% { - -webkit-transform: scale(0); - } - - 40% { - -webkit-transform: scale(1); - } -} - -@keyframes sk-bouncedelay { - 0%, - 100%, - 80% { - -webkit-transform: scale(0); - transform: scale(0); - } - - 40% { - -webkit-transform: scale(1); - transform: scale(1); - } -} diff --git a/src/components/ui/bouncingloader/Bouncingloader.jsx b/src/components/ui/bouncingloader/Bouncingloader.jsx deleted file mode 100644 index 9c81444..0000000 --- a/src/components/ui/bouncingloader/Bouncingloader.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import "./Bouncingloader.css" -const BouncingLoader = () => { - return ( -
-
-
-
-
- ); -}; - -export default BouncingLoader; \ No newline at end of file diff --git a/src/components/voiceactor/Voiceactor.jsx b/src/components/voiceactor/Voiceactor.jsx deleted file mode 100644 index bcc588e..0000000 --- a/src/components/voiceactor/Voiceactor.jsx +++ /dev/null @@ -1,100 +0,0 @@ -import { useState } from "react"; -import { FaChevronRight } from "react-icons/fa"; -import VoiceactorList from "../voiceactorlist/VoiceactorList"; - -function Voiceactor({ animeInfo, className }) { - const [showVoiceActors, setShowVoiceActors] = useState(false); - return ( -
-
-

- Characters & Voice Actors -

- -
-
- {animeInfo.charactersVoiceActors.slice(0, 6).map((character, index) => ( -
- {character.character && ( -
-
- {character.character.poster && ( - {character.character.name { - e.target.src = "https://i.postimg.cc/HnHKvHpz/no-avatar.jpg"; - }} - className="w-[45px] h-[45px] flex-shrink-0 rounded-full object-cover" - loading="lazy" - /> - )} -
- {character.character.name && ( -

- {character.character.name} -

- )} - {character.character.cast && ( -

- {character.character.cast} -

- )} -
-
-
- )} - {character.voiceActors.length > 0 && character.voiceActors[0] && ( -
-
-
- {character.voiceActors[0].name && ( - - {character.voiceActors[0].name} - - )} -
- {character.voiceActors[0].poster && ( - {character.voiceActors[0].name { - e.target.src = "https://i.postimg.cc/HnHKvHpz/no-avatar.jpg"; - }} - className="w-[45px] h-[45px] rounded-full object-cover grayscale hover:grayscale-0 hover:cursor-pointer flex-shrink-0 transition-all duration-300 ease-in-out" - /> - )} -
-
- )} -
- ))} -
- {showVoiceActors && ( - setShowVoiceActors(false)} - /> - )} -
- ); -} - -export default Voiceactor; diff --git a/src/components/voiceactorlist/VoiceactorList.jsx b/src/components/voiceactorlist/VoiceactorList.jsx deleted file mode 100644 index 43f951d..0000000 --- a/src/components/voiceactorlist/VoiceactorList.jsx +++ /dev/null @@ -1,175 +0,0 @@ -import { useState, useEffect } from "react"; -import { - faAngleDoubleLeft, - faAngleDoubleRight, - faChevronLeft, - faChevronRight, -} from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import fetchVoiceActorInfo from "@/src/utils/getVoiceActor.utils"; -import VoiceActorlistLoader from "../Loader/VoiceActorlist.loader"; -import { useNavigate } from "react-router-dom"; -import Error from "../error/Error"; -import { - cleanupScrollbar, - toggleScrollbar, -} from "@/src/helper/toggleScrollbar"; -import PageSlider from "../pageslider/PageSlider"; - -function VoiceactorList({ id, isOpen, onClose }) { - const [loading, setLoading] = useState(true); - const [page, setPage] = useState(1); - const [totalPages, setTotalPages] = useState(1); - const [error, setError] = useState(null); - const [VoiceactorList, setVoiceactorList] = useState([]); - const navigate = useNavigate(); - - useEffect(() => { - toggleScrollbar(isOpen); - return () => { - cleanupScrollbar(); - }; - }, [isOpen]); - - useEffect(() => { - const fetchCategoryInfo = async () => { - setLoading(true); - try { - const data = await fetchVoiceActorInfo(id, page); - setVoiceactorList(data.data); - setTotalPages(data.totalPages); - setLoading(false); - } catch (err) { - setError(err); - console.error("Error fetching category info:", err); - } - }; - fetchCategoryInfo(); - }, [page]); - if (error) { - navigate("/error-page"); - return ; - } - if (!VoiceactorList) { - navigate("/404-not-found-page"); - return null; - } - return ( -
-
- {!loading && ( -

- Characters & Voice Actors -

- )} - - {loading ? ( - - ) : ( -
- {VoiceactorList.map((item, index) => ( -
-
- { - e.target.src = "https://i.postimg.cc/HnHKvHpz/no-avatar.jpg"; - }} - /> -
- {item.character.name && ( -

- {item.character.name} -

- )} - {item.character.cast && ( -

- {item.character.cast} -

- )} -
-
- - {item.voiceActors && - item.voiceActors.length > 0 && - (item.voiceActors.length > 1 ? ( -
- {item.voiceActors.map((data, index) => ( - { - e.target.src = "https://i.postimg.cc/HnHKvHpz/no-avatar.jpg"; - }} - /> - ))} -
- ) : ( -
- {item?.voiceActors[0]?.name && ( -

- {item.voiceActors[0].name} -

- )} - { - e.target.src = "https://i.postimg.cc/HnHKvHpz/no-avatar.jpg"; - }} - /> -
- ))} -
- ))} -
- )} - -
- -
- - -
-
- ); -} - -export default VoiceactorList; diff --git a/src/components/watchcontrols/Watchcontrols.jsx b/src/components/watchcontrols/Watchcontrols.jsx deleted file mode 100644 index c5ca17e..0000000 --- a/src/components/watchcontrols/Watchcontrols.jsx +++ /dev/null @@ -1,97 +0,0 @@ -import { faBackward, faForward } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { useEffect, useState } from "react"; - -const ToggleButton = ({ label, isActive, onClick }) => ( - -); - -export default function WatchControls({ - autoPlay, - setAutoPlay, - autoSkipIntro, - setAutoSkipIntro, - autoNext, - setAutoNext, - episodeId, - episodes = [], - onButtonClick, -}) { - const [currentEpisodeIndex, setCurrentEpisodeIndex] = useState( - episodes?.findIndex( - (episode) => episode.id.match(/ep=(\d+)/)?.[1] === episodeId - ) - ); - - useEffect(() => { - if (episodes?.length > 0) { - const newIndex = episodes.findIndex( - (episode) => episode.id.match(/ep=(\d+)/)?.[1] === episodeId - ); - setCurrentEpisodeIndex(newIndex); - } - }, [episodeId, episodes]); - - return ( -
-
- setAutoPlay((prev) => !prev)} - /> - setAutoSkipIntro((prev) => !prev)} - /> - setAutoNext((prev) => !prev)} - /> -
-
- - -
-
- ); -} diff --git a/src/config/logoTitle.js b/src/config/logoTitle.js deleted file mode 100644 index 95b3110..0000000 --- a/src/config/logoTitle.js +++ /dev/null @@ -1,3 +0,0 @@ -const logoTitle="Zen!me" - -export default logoTitle; \ No newline at end of file diff --git a/src/config/website.js b/src/config/website.js deleted file mode 100644 index d7cdf5d..0000000 --- a/src/config/website.js +++ /dev/null @@ -1,3 +0,0 @@ -const website_name = "JustAnime"; - -export default website_name; \ No newline at end of file diff --git a/src/context/HomeInfoContext.jsx b/src/context/HomeInfoContext.jsx deleted file mode 100644 index 814e8b0..0000000 --- a/src/context/HomeInfoContext.jsx +++ /dev/null @@ -1,31 +0,0 @@ -import { createContext, useContext, useState, useEffect } from 'react'; -import getHomeInfo from '../utils/getHomeInfo.utils.js'; - -const HomeInfoContext = createContext(); - -export const HomeInfoProvider = ({ children }) => { - const [homeInfo, setHomeInfo] = useState(null); - const [homeInfoLoading, setHomeInfoLoading] = useState(true); - const [error, setError] = useState(null); - useEffect(() => { - const fetchHomeInfo = async () => { - try { - const data = await getHomeInfo(); - setHomeInfo(data); - } catch (err) { - console.error("Error fetching home info:", err); - setError(err); - } finally { - setHomeInfoLoading(false); - } - }; - fetchHomeInfo(); - }, []); - return ( - - {children} - - ); -}; - -export const useHomeInfo = () => useContext(HomeInfoContext); diff --git a/src/context/LanguageContext.jsx b/src/context/LanguageContext.jsx deleted file mode 100644 index cec8067..0000000 --- a/src/context/LanguageContext.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import { createContext, useContext, useState, useEffect } from 'react'; - -const LanguageContext = createContext(); - -export const LanguageProvider = ({ children }) => { - const [language, setLanguage] = useState(() => { - const storedLanguage = localStorage.getItem('language'); - return storedLanguage ? storedLanguage : 'EN'; - }); - useEffect(() => { - localStorage.setItem('language', language); - }, [language]); - - const toggleLanguage = (lang) => { - setLanguage(lang); - }; - - return ( - - {children} - - ); -}; - -export const useLanguage = () => { - return useContext(LanguageContext); -}; diff --git a/src/context/SearchContext.jsx b/src/context/SearchContext.jsx deleted file mode 100644 index 36e738e..0000000 --- a/src/context/SearchContext.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import { createContext, useContext, useState } from 'react'; - -const SearchContext = createContext(); -export function SearchProvider({ children }) { - const [isSearchVisible, setIsSearchVisible] = useState(false); - - return ( - - {children} - - ); -} -export const useSearchContext = () => useContext(SearchContext); \ No newline at end of file diff --git a/src/helper/toggleScrollbar.js b/src/helper/toggleScrollbar.js deleted file mode 100644 index 77e0bdd..0000000 --- a/src/helper/toggleScrollbar.js +++ /dev/null @@ -1,32 +0,0 @@ -export function toggleScrollbar(isOpen) { - const getScrollbarWidth = () => { - return window.innerWidth - document.documentElement.clientWidth; - }; - const body = document.body; - if (isOpen) { - const scrollbarWidth = getScrollbarWidth(); - body.style.paddingRight = `${scrollbarWidth}px`; - body.classList.add("overflow-y-hidden"); - - const style = document.createElement("style"); - style.id = "hide-scrollbar"; - style.innerHTML = `::-webkit-scrollbar { display: none; }`; - document.head.appendChild(style); - } else { - body.style.paddingRight = "0"; - body.classList.remove("overflow-y-hidden"); - const styleElement = document.getElementById("hide-scrollbar"); - if (styleElement) { - styleElement.remove(); - } - } -} -export function cleanupScrollbar() { - const body = document.body; - body.style.paddingRight = "0"; - body.classList.remove("overflow-y-hidden"); - const styleElement = document.getElementById("hide-scrollbar"); - if (styleElement) { - styleElement.remove(); - } -} diff --git a/src/hooks/useSearch.js b/src/hooks/useSearch.js deleted file mode 100644 index f094b86..0000000 --- a/src/hooks/useSearch.js +++ /dev/null @@ -1,64 +0,0 @@ -import { useState, useEffect, useRef, useCallback } from "react"; -import { useLocation } from "react-router-dom"; -import { useSearchContext } from "@/src/context/SearchContext"; - -const useSearch = () => { - const { isSearchVisible, setIsSearchVisible } = useSearchContext(); - const [searchValue, setSearchValue] = useState(""); - const [isFocused, setIsFocused] = useState(false); - const [debouncedValue, setDebouncedValue] = useState(""); - const suggestionRefs = useRef([]); - const location = useLocation(); - - useEffect(() => { - const timer = setTimeout(() => { - setDebouncedValue(searchValue); - }, 500); - return () => { - clearTimeout(timer); - }; - }, [searchValue]); - - useEffect(() => { - setIsSearchVisible(false); - setSearchValue(""); - setDebouncedValue(""); - // setIsFocused(false); - }, [location, setIsSearchVisible]); - - useEffect(() => { - const handleClickOutside = (event) => { - const isInsideSuggestionBox = suggestionRefs.current.some( - (ref) => ref && ref.contains(event.target) - ); - const isInsideInput = document.activeElement === event.target; - if (!isInsideSuggestionBox && !isInsideInput) { - setIsFocused(false); - } - }; - - document.addEventListener("mousedown", handleClickOutside); - return () => { - document.removeEventListener("mousedown", handleClickOutside); - }; - }, []); - const addSuggestionRef = useCallback((ref) => { - if (ref && !suggestionRefs.current.includes(ref)) { - suggestionRefs.current.push(ref); - } - }, []); - - return { - isSearchVisible, - setIsSearchVisible, - searchValue, - setSearchValue, - isFocused, - setIsFocused, - debouncedValue, - suggestionRefs, - addSuggestionRef, - }; -}; - -export default useSearch; diff --git a/src/hooks/useToolTipPosition.js b/src/hooks/useToolTipPosition.js deleted file mode 100644 index ae74331..0000000 --- a/src/hooks/useToolTipPosition.js +++ /dev/null @@ -1,49 +0,0 @@ -import { useEffect, useRef, useState } from "react"; - -const useToolTipPosition = (hoveredItem, data) => { - const cardRefs = useRef([]); - const [tooltipPosition, setTooltipPosition] = useState("top-1/2"); - const [tooltipHorizontalPosition, setTooltipHorizontalPosition] = - useState("left-1/2"); - - const updateToolTipPosition = () => { - if (hoveredItem !== null) { - const refIndex = data.findIndex( - (item, index) => item.id + index === hoveredItem - ); - const ref = cardRefs.current[refIndex]; - if (ref) { - const { top, height, left, width } = ref.getBoundingClientRect(); - const adjustedTop = top + height / 2 - 64; - const bottomY = window.innerHeight - adjustedTop; - if (adjustedTop < bottomY) { - setTooltipPosition("top-1/2"); - } else { - setTooltipPosition("bottom-1/2"); - } - const adjustedLeft = left + width / 2; - const spaceRight = window.innerWidth - adjustedLeft; - if (spaceRight > 320) { - setTooltipHorizontalPosition("left-1/2"); - } else { - setTooltipHorizontalPosition("right-1/2"); - } - } - } - }; - - useEffect(() => { - updateToolTipPosition(); - const handleScroll = () => { - updateToolTipPosition(); - }; - window.addEventListener("scroll", handleScroll); - return () => { - window.removeEventListener("scroll", handleScroll); - }; - }, [hoveredItem, data]); - - return { tooltipPosition, tooltipHorizontalPosition, cardRefs }; -}; - -export default useToolTipPosition; diff --git a/src/hooks/useWatch.js b/src/hooks/useWatch.js deleted file mode 100644 index cc416bb..0000000 --- a/src/hooks/useWatch.js +++ /dev/null @@ -1,269 +0,0 @@ -/* eslint-disable react-hooks/exhaustive-deps */ -import { useState, useEffect, useRef } from "react"; -import getAnimeInfo from "@/src/utils/getAnimeInfo.utils"; -import getEpisodes from "@/src/utils/getEpisodes.utils"; -import getNextEpisodeSchedule from "../utils/getNextEpisodeSchedule.utils"; -import getServers from "../utils/getServers.utils"; -import getStreamInfo from "../utils/getStreamInfo.utils"; - -export const useWatch = (animeId, initialEpisodeId) => { - const [error, setError] = useState(null); - const [buffering, setBuffering] = useState(true); - const [streamInfo, setStreamInfo] = useState(null); - const [animeInfo, setAnimeInfo] = useState(null); - const [episodes, setEpisodes] = useState(null); - const [animeInfoLoading, setAnimeInfoLoading] = useState(false); - const [totalEpisodes, setTotalEpisodes] = useState(null); - const [seasons, setSeasons] = useState(null); - const [servers, setServers] = useState(null); - const [streamUrl, setStreamUrl] = useState(null); - const [isFullOverview, setIsFullOverview] = useState(false); - const [subtitles, setSubtitles] = useState([]); - const [thumbnail, setThumbnail] = useState(null); - const [intro, setIntro] = useState(null); - const [outro, setOutro] = useState(null); - const [episodeId, setEpisodeId] = useState(null); - const [activeEpisodeNum, setActiveEpisodeNum] = useState(null); - const [activeServerId, setActiveServerId] = useState(null); - const [activeServerType, setActiveServerType] = useState(null); - const [activeServerName, setActiveServerName] = useState(null); - const [serverLoading, setServerLoading] = useState(true); - const [nextEpisodeSchedule, setNextEpisodeSchedule] = useState(null); - const isServerFetchInProgress = useRef(false); - const isStreamFetchInProgress = useRef(false); - - useEffect(() => { - setEpisodes(null); - setEpisodeId(null); - setActiveEpisodeNum(null); - setServers(null); - setActiveServerId(null); - setStreamInfo(null); - setStreamUrl(null); - setSubtitles([]); - setThumbnail(null); - setIntro(null); - setOutro(null); - setBuffering(true); - setServerLoading(true); - setError(null); - setAnimeInfo(null); - setSeasons(null); - setTotalEpisodes(null); - setAnimeInfoLoading(true); - isServerFetchInProgress.current = false; - isStreamFetchInProgress.current = false; - }, [animeId]); - - useEffect(() => { - const fetchInitialData = async () => { - try { - setAnimeInfoLoading(true); - const [animeData, episodesData] = await Promise.all([ - getAnimeInfo(animeId, false), - getEpisodes(animeId), - ]); - setAnimeInfo(animeData?.data); - setSeasons(animeData?.seasons); - setEpisodes(episodesData?.episodes); - setTotalEpisodes(episodesData?.totalEpisodes); - const newEpisodeId = - initialEpisodeId || - (episodesData?.episodes?.length > 0 - ? episodesData.episodes[0].id.match(/ep=(\d+)/)?.[1] - : null); - setEpisodeId(newEpisodeId); - } catch (err) { - console.error("Error fetching initial data:", err); - setError(err.message || "An error occurred."); - } finally { - setAnimeInfoLoading(false); - } - }; - fetchInitialData(); - }, [animeId]); - - useEffect(() => { - const fetchNextEpisodeSchedule = async () => { - try { - const data = await getNextEpisodeSchedule(animeId); - setNextEpisodeSchedule(data); - } catch (err) { - console.error("Error fetching next episode schedule:", err); - } - }; - fetchNextEpisodeSchedule(); - }, [animeId]); - - useEffect(() => { - if (!episodes || !episodeId) { - setActiveEpisodeNum(null); - return; - } - const activeEpisode = episodes.find((episode) => { - const match = episode.id.match(/ep=(\d+)/); - return match && match[1] === episodeId; - }); - const newActiveEpisodeNum = activeEpisode ? activeEpisode.episode_no : null; - if (activeEpisodeNum !== newActiveEpisodeNum) { - setActiveEpisodeNum(newActiveEpisodeNum); - } - }, [episodeId, episodes]); - - useEffect(() => { - if (!episodeId || !episodes || isServerFetchInProgress.current) return; - - const fetchServers = async () => { - isServerFetchInProgress.current = true; - setServerLoading(true); - try { - const data = await getServers(animeId, episodeId); - console.log(data); - - const filteredServers = data?.filter( - (server) => - server.serverName === "HD-1" || - server.serverName === "HD-2" || - server.serverName === "HD-3" - ); - if (filteredServers.some((s) => s.type === "sub")) { - filteredServers.push({ - type: "sub", - data_id: "69696969", - server_id: "41", - serverName: "HD-4", - }); - } - if (filteredServers.some((s) => s.type === "dub")) { - filteredServers.push({ - type: "dub", - data_id: "96969696", - server_id: "42", - serverName: "HD-4", - }); - } - const savedServerName = localStorage.getItem("server_name"); - const savedServerType = localStorage.getItem("server_type"); - let initialServer = - data.find( - (s) => - s.serverName === savedServerName && s.type === savedServerType - ) || - data.find((s) => s.serverName === savedServerName) || - data.find((s) => s.type === savedServerType) || - data.find( - (s) => s.serverName === "HD-1" && s.type === savedServerType - ) || - data.find( - (s) => s.serverName === "HD-2" && s.type === savedServerType - ) || - data.find( - (s) => s.serverName === "HD-3" && s.type === savedServerType - ) || - data.find( - (s) => s.serverName === "HD-4" && s.type === savedServerType - ) || - filteredServers[0]; - setServers(filteredServers); - setActiveServerType(initialServer?.type); - setActiveServerName(initialServer?.serverName); - setActiveServerId(initialServer?.data_id); - } catch (error) { - console.error("Error fetching servers:", error); - setError(error.message || "An error occurred."); - } finally { - setServerLoading(false); - isServerFetchInProgress.current = false; - } - }; - fetchServers(); - }, [episodeId, episodes]); - // Fetch stream info only when episodeId, activeServerId, and servers are ready - useEffect(() => { - if ( - !episodeId || - !activeServerId || - !servers || - isServerFetchInProgress.current || - isStreamFetchInProgress.current - ) - return; - if ( - (activeServerName?.toLowerCase() === "hd-1" - || activeServerName?.toLowerCase() === "hd-2"|| activeServerName?.toLowerCase() === "hd-3"|| activeServerName?.toLowerCase() === "hd-4") - && - !serverLoading - ) { - setBuffering(false); - return; - } - const fetchStreamInfo = async () => { - isStreamFetchInProgress.current = true; - setBuffering(true); - try { - const server = servers.find((srv) => srv.data_id === activeServerId); - if (server) { - const data = await getStreamInfo( - animeId, - episodeId, - server.serverName.toLowerCase(), - server.type.toLowerCase() - ); - setStreamInfo(data); - setStreamUrl(data?.streamingLink?.link?.file || null); - setIntro(data?.streamingLink?.intro || null); - setOutro(data?.streamingLink?.outro || null); - const subtitles = - data?.streamingLink?.tracks - ?.filter((track) => track.kind === "captions") - .map(({ file, label }) => ({ file, label })) || []; - setSubtitles(subtitles); - const thumbnailTrack = data?.streamingLink?.tracks?.find( - (track) => track.kind === "thumbnails" && track.file - ); - if (thumbnailTrack) setThumbnail(thumbnailTrack.file); - } else { - setError("No server found with the activeServerId."); - } - } catch (err) { - console.error("Error fetching stream info:", err); - setError(err.message || "An error occurred."); - } finally { - setBuffering(false); - isStreamFetchInProgress.current = false; - } - }; - fetchStreamInfo(); - }, [episodeId, activeServerId, servers]); - - return { - error, - buffering, - serverLoading, - streamInfo, - animeInfo, - episodes, - nextEpisodeSchedule, - animeInfoLoading, - totalEpisodes, - seasons, - servers, - streamUrl, - isFullOverview, - setIsFullOverview, - subtitles, - thumbnail, - intro, - outro, - episodeId, - setEpisodeId, - activeEpisodeNum, - setActiveEpisodeNum, - activeServerId, - setActiveServerId, - activeServerType, - setActiveServerType, - activeServerName, - setActiveServerName, - }; -}; diff --git a/src/hooks/useWatchControl.js b/src/hooks/useWatchControl.js deleted file mode 100644 index 6ae19f9..0000000 --- a/src/hooks/useWatchControl.js +++ /dev/null @@ -1,34 +0,0 @@ -import { useState, useEffect } from "react"; - -export default function useWatchControl() { - const [autoPlay, setAutoPlay] = useState( - () => JSON.parse(localStorage.getItem("autoPlay")) || false - ); - const [autoSkipIntro, setAutoSkipIntro] = useState( - () => JSON.parse(localStorage.getItem("autoSkipIntro")) || false - ); - const [autoNext, setAutoNext] = useState( - () => JSON.parse(localStorage.getItem("autoNext")) || false - ); - - useEffect(() => { - localStorage.setItem("autoPlay", JSON.stringify(autoPlay)); - }, [autoPlay]); - - useEffect(() => { - localStorage.setItem("autoSkipIntro", JSON.stringify(autoSkipIntro)); - }, [autoSkipIntro]); - - useEffect(() => { - localStorage.setItem("autoNext", JSON.stringify(autoNext)); - }, [autoNext]); - - return { - autoPlay, - setAutoPlay, - autoSkipIntro, - setAutoSkipIntro, - autoNext, - setAutoNext, - }; -} diff --git a/src/index.css b/src/index.css deleted file mode 100644 index 765f332..0000000 --- a/src/index.css +++ /dev/null @@ -1,126 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #201f31; - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} -body { - overflow-y: scroll; -} -.scrollbar-visible { - scrollbar-width: auto; - scrollbar-color: #888 #333; -} -.scrollbar-visible::-webkit-scrollbar { - width: 20px; -} - -.scrollbar-visible::-webkit-scrollbar-thumb { - background-color: #888; -} - -.scrollbar-visible::-webkit-scrollbar-track { - background: black; -} -.scrollbar-hide { - -ms-overflow-style: none; - scrollbar-width: none; -} -::-webkit-scrollbar { - width: 16px; -} - -::-webkit-scrollbar-track { - background: #23222c; -} - -::-webkit-scrollbar-thumb { - background: #65646a; -} -.scrollbar-hide::-webkit-scrollbar { - display: none; -} - -.is-visible { - opacity: 1; -} -@layer base { - :root { - --background: 0 0% 100%; - --foreground: 240 10% 3.9%; - --card: 0 0% 100%; - --card-foreground: 240 10% 3.9%; - --popover: 0 0% 100%; - --popover-foreground: 240 10% 3.9%; - --primary: 240 5.9% 10%; - --primary-foreground: 0 0% 98%; - --secondary: 240 4.8% 95.9%; - --secondary-foreground: 240 5.9% 10%; - --muted: 240 4.8% 95.9%; - --muted-foreground: 240 3.8% 46.1%; - --accent: 240 4.8% 95.9%; - --accent-foreground: 240 5.9% 10%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 0 0% 98%; - --border: 240 5.9% 90%; - --input: 240 5.9% 90%; - --ring: 240 10% 3.9%; - --chart-1: 12 76% 61%; - --chart-2: 173 58% 39%; - --chart-3: 197 37% 24%; - --chart-4: 43 74% 66%; - --chart-5: 27 87% 67%; - --radius: 0.5rem; - } - .dark { - --background: 240 10% 3.9%; - --foreground: 0 0% 98%; - --card: 240 10% 3.9%; - --card-foreground: 0 0% 98%; - --popover: 240 10% 3.9%; - --popover-foreground: 0 0% 98%; - --primary: 0 0% 98%; - --primary-foreground: 240 5.9% 10%; - --secondary: 240 3.7% 15.9%; - --secondary-foreground: 0 0% 98%; - --muted: 240 3.7% 15.9%; - --muted-foreground: 240 5% 64.9%; - --accent: 240 3.7% 15.9%; - --accent-foreground: 0 0% 98%; - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 0 0% 98%; - --border: 240 3.7% 15.9%; - --input: 240 3.7% 15.9%; - --ring: 240 4.9% 83.9%; - --chart-1: 220 70% 50%; - --chart-2: 160 60% 45%; - --chart-3: 30 80% 55%; - --chart-4: 280 65% 60%; - --chart-5: 340 75% 55%; - } -} -.dot { - width: 4px; - height: 4px; - display: flex; - justify-content: center; - align-items: center; - border-radius: 50%; - background: rgba(255, 255, 255, 0.3); - display: inline-block; -} diff --git a/src/main.jsx b/src/main.jsx deleted file mode 100644 index e5bd98c..0000000 --- a/src/main.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import { LanguageProvider } from './context/LanguageContext'; -import { createRoot } from 'react-dom/client'; -import { BrowserRouter } from 'react-router-dom'; -import App from './App.jsx'; -import './index.css'; - -createRoot(document.getElementById('root')).render( - - - - - -); diff --git a/src/pages/Home/Home.jsx b/src/pages/Home/Home.jsx deleted file mode 100644 index 789fb6a..0000000 --- a/src/pages/Home/Home.jsx +++ /dev/null @@ -1,82 +0,0 @@ -import website_name from "@/src/config/website.js"; -import Spotlight from "@/src/components/spotlight/Spotlight.jsx"; -import Trending from "@/src/components/trending/Trending.jsx"; -import Cart from "@/src/components/cart/Cart.jsx"; -import CategoryCard from "@/src/components/categorycard/CategoryCard.jsx"; -import Genre from "@/src/components/genres/Genre.jsx"; -import Topten from "@/src/components/topten/Topten.jsx"; -import Loader from "@/src/components/Loader/Loader.jsx"; -import Error from "@/src/components/error/Error.jsx"; -import { useHomeInfo } from "@/src/context/HomeInfoContext.jsx"; -import Schedule from "@/src/components/schedule/Schedule"; -import ContinueWatching from "@/src/components/continue/ContinueWatching"; - -function Home() { - const { homeInfo, homeInfoLoading, error } = useHomeInfo(); - if (homeInfoLoading) return ; - if (error) return ; - if (!homeInfo) return ; - return ( - <> -
- - - -
- - - - -
-
-
- - - - -
-
- - -
-
-
- - ); -} - -export default Home; diff --git a/src/pages/a2z/AtoZ.jsx b/src/pages/a2z/AtoZ.jsx deleted file mode 100644 index f2717e6..0000000 --- a/src/pages/a2z/AtoZ.jsx +++ /dev/null @@ -1,118 +0,0 @@ -import { useEffect, useState } from "react"; -import { useSearchParams, Link } from "react-router-dom"; -import getCategoryInfo from "@/src/utils/getCategoryInfo.utils"; -import CategoryCard from "@/src/components/categorycard/CategoryCard"; -import Loader from "@/src/components/Loader/Loader"; -import Error from "@/src/components/error/Error"; -import PageSlider from "@/src/components/pageslider/PageSlider"; - -function AtoZ({ path }) { - const [searchParams, setSearchParams] = useSearchParams(); - const [categoryInfo, setCategoryInfo] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - const [totalPages, setTotalPages] = useState(0); - const page = parseInt(searchParams.get("page")) || 1; - const currentLetter = path.split("/").pop() || ""; - - useEffect(() => { - const fetchAtoZInfo = async () => { - setLoading(true); - try { - const data = await getCategoryInfo(path, page); - setCategoryInfo(data.data); - setTotalPages(data.totalPages); - setLoading(false); - } catch (err) { - setError(err); - setLoading(false); - console.error("Error fetching category info:", err); - } - }; - fetchAtoZInfo(); - window.scrollTo(0, 0); - }, [path, page]); - - if (loading) return ; - if (error) { - return ; - } - if (!categoryInfo) { - return null; - } - const handlePageChange = (newPage) => { - setSearchParams({ page: newPage }); - }; - - return ( -
-
    -
  • - - Home - -
    -
  • -
  • A-Z List
  • -
-
-

- Sort By Letters -

-
- {[ - "All", - "#", - "0-9", - ...Array.from({ length: 26 }, (_, i) => - String.fromCharCode(65 + i) - ), - ].map((item, index) => { - const linkPath = - item.toLowerCase() === "all" - ? "" - : item === "#" - ? "other" - : item; - const isActive = - (currentLetter === "az-list" && item.toLowerCase() === "all") || - (currentLetter === "other" && item === "#") || - currentLetter === item.toLowerCase(); - - return ( - - {item} - - ); - })} -
-
-
-
- {categoryInfo && categoryInfo.length > 0 && ( - - )} - -
-
-
- ); -} - -export default AtoZ; diff --git a/src/pages/animeInfo/AnimeInfo.jsx b/src/pages/animeInfo/AnimeInfo.jsx deleted file mode 100644 index 60b1e4f..0000000 --- a/src/pages/animeInfo/AnimeInfo.jsx +++ /dev/null @@ -1,416 +0,0 @@ -import getAnimeInfo from "@/src/utils/getAnimeInfo.utils"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { - faPlay, - faClosedCaptioning, - faMicrophone, -} from "@fortawesome/free-solid-svg-icons"; -import { useEffect, useState } from "react"; -import { Link, useNavigate, useParams } from "react-router-dom"; -import website_name from "@/src/config/website"; -import CategoryCard from "@/src/components/categorycard/CategoryCard"; -import Sidecard from "@/src/components/sidecard/Sidecard"; -import Loader from "@/src/components/Loader/Loader"; -import Error from "@/src/components/error/Error"; -import { useLanguage } from "@/src/context/LanguageContext"; -import { useHomeInfo } from "@/src/context/HomeInfoContext"; -import Voiceactor from "@/src/components/voiceactor/Voiceactor"; - -function InfoItem({ label, value, isProducer = true }) { - return ( - value && ( -
- {`${label}: `} - - {Array.isArray(value) ? ( - value.map((item, index) => - isProducer ? ( - :;,.?/\\|{}[\]`~*_]/g, "") - .split(" ") - .join("-") - .replace(/-+/g, "-")}`} - key={index} - className="cursor-pointer hover:text-[#ffbade]" - > - {item} - {index < value.length - 1 && ", "} - - ) : ( - - {item} - - ) - ) - ) : isProducer ? ( - :;,.?/\\|{}[\]`~*_]/g, "") - .split(" ") - .join("-") - .replace(/-+/g, "-")}`} - className="cursor-pointer hover:text-[#ffbade]" - > - {value} - - ) : ( - {value} - )} - -
- ) - ); -} - -function Tag({ bgColor, index, icon, text }) { - return ( -
- {icon && } -

{text}

-
- ); -} - -function AnimeInfo({ random = false }) { - const { language } = useLanguage(); - const { id: paramId } = useParams(); - const id = random ? null : paramId; - const [isFull, setIsFull] = useState(false); - const [animeInfo, setAnimeInfo] = useState(null); - const [seasons, setSeasons] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - const { homeInfo } = useHomeInfo(); - const { id: currentId } = useParams(); - const navigate = useNavigate(); - useEffect(() => { - if (id === "404-not-found-page") { - console.log("404 got!"); - return null; - } else { - const fetchAnimeInfo = async () => { - setLoading(true); - try { - const data = await getAnimeInfo(id, random); - setSeasons(data?.seasons); - setAnimeInfo(data.data); - } catch (err) { - console.error("Error fetching anime info:", err); - setError(err); - } finally { - setLoading(false); - } - }; - fetchAnimeInfo(); - window.scrollTo({ top: 0, behavior: "smooth" }); - } - }, [id, random]); - useEffect(() => { - if (animeInfo && location.pathname === `/${animeInfo.id}`) { - document.title = `Watch ${animeInfo.title} English Sub/Dub online Free on ${website_name}`; - } - return () => { - document.title = `${website_name} | Free anime streaming platform`; - }; - }, [animeInfo]); - if (loading) return ; - if (error) { - return ; - } - if (!animeInfo) { - navigate("/404-not-found-page"); - return undefined; - } - const { title, japanese_title, poster, animeInfo: info } = animeInfo; - const tags = [ - { - condition: info.tvInfo?.rating, - bgColor: "#ffffff", - text: info.tvInfo.rating, - }, - { - condition: info.tvInfo?.quality, - bgColor: "#FFBADE", - text: info.tvInfo.quality, - }, - { - condition: info.tvInfo?.sub, - icon: faClosedCaptioning, - bgColor: "#B0E3AF", - text: info.tvInfo.sub, - }, - { - condition: info.tvInfo?.dub, - icon: faMicrophone, - bgColor: "#B9E7FF", - text: info.tvInfo.dub, - }, - ]; - - return ( - <> -
- {`${title} -
-
- {`${title} - {animeInfo.adultContent && ( -
- 18+ -
- )} -
-
-
    - {[ - ["Home", "home"], - [info.tvInfo?.showType, info.tvInfo?.showType], - ].map(([text, link], index) => ( -
  • - - {text} - -
    -
  • - ))} -

    - {language === "EN" ? title : japanese_title} -

    -
-

- {language === "EN" ? title : japanese_title} -

-
- {tags.map( - ({ condition, icon, bgColor, text }, index) => - condition && ( - - ) - )} -
- {[info.tvInfo?.showType, info.tvInfo?.duration].map( - (item, index) => - item && ( -
-
-

{item}

-
- ) - )} -
-
- {animeInfo?.animeInfo?.Status?.toLowerCase() !== "not-yet-aired" ? ( - - -

Watch Now

- - ) : ( -
-

Not released

-
- )} - {info?.Overview && ( -
- {info.Overview.length > 270 ? ( - <> - {isFull - ? info.Overview - : `${info.Overview.slice(0, 270)}...`} - setIsFull(!isFull)} - > - {isFull ? "- Less" : "+ More"} - - - ) : ( - info.Overview - )} -
- )} -

- {`${website_name} is the best site to watch `} - {title} - {` SUB online, or you can even watch `} - {title} - {` DUB in HD quality.`} -

-
- Share Anime -
-

- Share Anime -

-

to your friends

-
-
-
-
-
-
- {info?.Overview && ( -
-

Overview:

-
-

{info.Overview}

-
-
- )} - {[ - { label: "Japanese", value: info?.Japanese }, - { label: "Synonyms", value: info?.Synonyms }, - { label: "Aired", value: info?.Aired }, - { label: "Premiered", value: info?.Premiered }, - { label: "Duration", value: info?.Duration }, - { label: "Status", value: info?.Status }, - { label: "MAL Score", value: info?.["MAL Score"] }, - ].map(({ label, value }, index) => ( - - ))} - {info?.Genres && ( -
-

Genres:

-
- {info.Genres.map((genre, index) => ( - - {genre} - - ))} -
-
- )} - {[ - { label: "Studios", value: info?.Studios }, - { label: "Producers", value: info?.Producers }, - ].map(({ label, value }, index) => ( - - ))} -

- {`${website_name} is the best site to watch `} - {title} - {` SUB online, or you can even watch `} - {title} - {` DUB in HD quality.`} -

-
-
-
-
-
- {seasons?.length > 0 && ( -
-

- More Seasons -

-
- {seasons.map((season, index) => ( - -

- {season.season} -

-
- - - ))} -
-
- )} - {animeInfo?.charactersVoiceActors.length > 0 && ( - - )} - {animeInfo.recommended_data.length > 0 && ( - - )} -
-
- {animeInfo.related_data.length > 0 && ( - - )} - {homeInfo && homeInfo.most_popular && ( - - )} -
-
- - ); -} - -export default AnimeInfo; diff --git a/src/pages/category/Category.jsx b/src/pages/category/Category.jsx deleted file mode 100644 index 326c61e..0000000 --- a/src/pages/category/Category.jsx +++ /dev/null @@ -1,111 +0,0 @@ -import { useEffect, useState } from "react"; -import { useSearchParams } from "react-router-dom"; -import getCategoryInfo from "@/src/utils/getCategoryInfo.utils"; -import CategoryCard from "@/src/components/categorycard/CategoryCard"; -import Genre from "@/src/components/genres/Genre"; -import Topten from "@/src/components/topten/Topten"; -import Loader from "@/src/components/Loader/Loader"; -import Error from "@/src/components/error/Error"; -import { useNavigate } from "react-router-dom"; -import { useHomeInfo } from "@/src/context/HomeInfoContext"; -import PageSlider from "@/src/components/pageslider/PageSlider"; -import SidecardLoader from "@/src/components/Loader/Sidecard.loader"; - -function Category({ path, label }) { - const [searchParams, setSearchParams] = useSearchParams(); - const [categoryInfo, setCategoryInfo] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - const [totalPages, setTotalPages] = useState(0); - const page = parseInt(searchParams.get("page")) || 1; - const { homeInfo, homeInfoLoading } = useHomeInfo(); - const navigate = useNavigate(); - useEffect(() => { - const fetchCategoryInfo = async () => { - setLoading(true); - try { - const data = await getCategoryInfo(path, page); - setCategoryInfo(data.data); - setTotalPages(data.totalPages); - setLoading(false); - } catch (err) { - setError(err); - console.error("Error fetching category info:", err); - } - }; - fetchCategoryInfo(); - window.scrollTo(0, 0); - }, [path, page]); - if (loading) return ; - if (error) { - navigate("/error-page"); - return ; - } - if (!categoryInfo) { - navigate("/404-not-found-page"); - return null; - } - const handlePageChange = (newPage) => { - setSearchParams({ page: newPage }); - }; - - return ( -
-
- Share Anime -
-

Share Anime

-

to your friends

-
-
- {categoryInfo ? ( -
- {page > totalPages ? ( -

- You came a long way, go back
- nothing is here -

- ) : ( -
- {categoryInfo && categoryInfo.length > 0 && ( - - )} - -
- )} -
- {homeInfoLoading ? ( - - ) : ( - <> - {homeInfo && homeInfo.topten && ( - - )} - {homeInfo?.genres && } - - )} -
-
- ) : ( - - )} -
- ); -} - -export default Category; diff --git a/src/pages/search/Search.jsx b/src/pages/search/Search.jsx deleted file mode 100644 index f52033c..0000000 --- a/src/pages/search/Search.jsx +++ /dev/null @@ -1,74 +0,0 @@ -import CategoryCard from '@/src/components/categorycard/CategoryCard'; -import Genre from '@/src/components/genres/Genre'; -import CategoryCardLoader from '@/src/components/Loader/CategoryCard.loader'; -import SidecardLoader from '@/src/components/Loader/Sidecard.loader'; -import PageSlider from '@/src/components/pageslider/PageSlider'; -import Sidecard from '@/src/components/sidecard/Sidecard'; -import { useHomeInfo } from '@/src/context/HomeInfoContext'; -import getSearch from '@/src/utils/getSearch.utils'; -import { useEffect, useState } from 'react'; -import { useSearchParams } from 'react-router-dom'; - -function Search() { - const { homeInfo, homeInfoLoading } = useHomeInfo(); - const [searchParams, setSearchParams] = useSearchParams(); - const keyword = searchParams.get("keyword"); - const page = parseInt(searchParams.get("page"), 10) || 1; - const [searchData, setSearchData] = useState(null); - const [totalPages, setTotalPages] = useState(0); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - - useEffect(() => { - const fetchSearch = async () => { - setLoading(true); - try { - const data = await getSearch(keyword,page); - setSearchData(data.data); - setTotalPages(data.totalPage); - setLoading(false); - } catch (err) { - console.error("Error fetching anime info:", err); - setError(err); - setLoading(false); - } - }; - fetchSearch(); - window.scrollTo({ top: 0, behavior: 'smooth' }); - }, [keyword, page]); - - const handlePageChange = (newPage) => { - setSearchParams({ keyword, page: newPage }); - }; - return ( -
- {loading ? ( - - ) : page > totalPages ?

You came a long way, go back
nothing is here

: searchData && searchData.length > 0 ? ( -
- - -
- ) : error ?

Couldn't get search result please try again

: ( -

{`Search results for: ${keyword}`}

- )} -
- {homeInfoLoading ? ( - - ) : ( - <> - {homeInfo?.most_popular && } - {homeInfo?.genres && } - - )} -
-
- ); -} - -export default Search; diff --git a/src/pages/watch/Watch.jsx b/src/pages/watch/Watch.jsx deleted file mode 100644 index e9ee8c0..0000000 --- a/src/pages/watch/Watch.jsx +++ /dev/null @@ -1,541 +0,0 @@ -/* eslint-disable react/prop-types */ -import { useEffect, useRef, useState } from "react"; -import { useLocation, useParams, Link, useNavigate } from "react-router-dom"; -import { useLanguage } from "@/src/context/LanguageContext"; -import { useHomeInfo } from "@/src/context/HomeInfoContext"; -import { useWatch } from "@/src/hooks/useWatch"; -import BouncingLoader from "@/src/components/ui/bouncingloader/Bouncingloader"; -import IframePlayer from "@/src/components/player/IframePlayer"; -import Episodelist from "@/src/components/episodelist/Episodelist"; -import website_name from "@/src/config/website"; -import Sidecard from "@/src/components/sidecard/Sidecard"; -import CategoryCard from "@/src/components/categorycard/CategoryCard"; -import { - faClosedCaptioning, - faMicrophone, -} from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import Servers from "@/src/components/servers/Servers"; -import CategoryCardLoader from "@/src/components/Loader/CategoryCard.loader"; -import { Skeleton } from "@/src/components/ui/Skeleton/Skeleton"; -import SidecardLoader from "@/src/components/Loader/Sidecard.loader"; -import Voiceactor from "@/src/components/voiceactor/Voiceactor"; -import Watchcontrols from "@/src/components/watchcontrols/Watchcontrols"; -import useWatchControl from "@/src/hooks/useWatchControl"; -import Player from "@/src/components/player/Player"; - -export default function Watch() { - const location = useLocation(); - const navigate = useNavigate(); - const { id: animeId } = useParams(); - const queryParams = new URLSearchParams(location.search); - let initialEpisodeId = queryParams.get("ep"); - const [tags, setTags] = useState([]); - const { language } = useLanguage(); - const { homeInfo } = useHomeInfo(); - const isFirstSet = useRef(true); - const [showNextEpisodeSchedule, setShowNextEpisodeSchedule] = useState(true); - const { - // error, - buffering, - streamInfo, - streamUrl, - animeInfo, - episodes, - nextEpisodeSchedule, - animeInfoLoading, - totalEpisodes, - isFullOverview, - intro, - outro, - subtitles, - thumbnail, - setIsFullOverview, - activeEpisodeNum, - seasons, - episodeId, - setEpisodeId, - activeServerId, - setActiveServerId, - servers, - serverLoading, - activeServerType, - setActiveServerType, - activeServerName, - setActiveServerName - } = useWatch(animeId, initialEpisodeId); - const { - autoPlay, - setAutoPlay, - autoSkipIntro, - setAutoSkipIntro, - autoNext, - setAutoNext, - } = useWatchControl(); - - useEffect(() => { - if (!episodes || episodes.length === 0) return; - - const isValidEpisode = episodes.some(ep => { - const epNumber = ep.id.split('ep=')[1]; - return epNumber === episodeId; - }); - - // If missing or invalid episodeId, fallback to first - if (!episodeId || !isValidEpisode) { - const fallbackId = episodes[0].id.match(/ep=(\d+)/)?.[1]; - if (fallbackId && fallbackId !== episodeId) { - setEpisodeId(fallbackId); - } - return; - } - - const newUrl = `/watch/${animeId}?ep=${episodeId}`; - if (isFirstSet.current) { - navigate(newUrl, { replace: true }); - isFirstSet.current = false; - } else { - navigate(newUrl); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [episodeId, animeId, navigate, episodes]); - - // Update document title - useEffect(() => { - if (animeInfo) { - document.title = `Watch ${animeInfo.title} English Sub/Dub online Free on ${website_name}`; - } - return () => { - document.title = `${website_name} | Free anime streaming platform`; - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [animeId]); - - // Redirect if no episodes - useEffect(() => { - if (totalEpisodes !== null && totalEpisodes === 0) { - navigate(`/${animeId}`); - } - }, [streamInfo, episodeId, animeId, totalEpisodes, navigate]); - - useEffect(() => { - const adjustHeight = () => { - if (window.innerWidth > 1200) { - const player = document.querySelector(".player"); - const episodes = document.querySelector(".episodes"); - if (player && episodes) { - episodes.style.height = `${player.clientHeight}px`; - } - } else { - const episodes = document.querySelector(".episodes"); - if (episodes) { - episodes.style.height = "auto"; - } - } - }; - adjustHeight(); - window.addEventListener("resize", adjustHeight); - return () => { - window.removeEventListener("resize", adjustHeight); - }; - }); - - function Tag({ bgColor, index, icon, text }) { - return ( -
- {icon && } -

{text}

-
- ); - } - - useEffect(() => { - setTags([ - { - condition: animeInfo?.animeInfo?.tvInfo?.rating, - bgColor: "#ffffff", - text: animeInfo?.animeInfo?.tvInfo?.rating, - }, - { - condition: animeInfo?.animeInfo?.tvInfo?.quality, - bgColor: "#FFBADE", - text: animeInfo?.animeInfo?.tvInfo?.quality, - }, - { - condition: animeInfo?.animeInfo?.tvInfo?.sub, - icon: faClosedCaptioning, - bgColor: "#B0E3AF", - text: animeInfo?.animeInfo?.tvInfo?.sub, - }, - { - condition: animeInfo?.animeInfo?.tvInfo?.dub, - icon: faMicrophone, - bgColor: "#B9E7FF", - text: animeInfo?.animeInfo?.tvInfo?.dub, - }, - ]); - }, [animeId, animeInfo]); - return ( -
-
- {`${animeInfo?.title} -
-
- {animeInfo && ( -
    - {[ - ["Home", "home"], - [animeInfo?.showType, animeInfo?.showType], - ].map(([text, link], index) => ( -
  • - - {text} - -
    -
  • - ))} -

    - Watching{" "} - {language === "EN" - ? animeInfo?.title - : animeInfo?.japanese_title} -

    -
- )} -
-
- {!episodes ? ( - - ) : ( - setEpisodeId(id)} - totalEpisodes={totalEpisodes} - /> - )} -
-
-
- {!buffering ? (( activeServerName.toLowerCase()==="hd-1" || activeServerName.toLowerCase()==="hd-2" || activeServerName.toLowerCase()==="hd-3" || activeServerName.toLowerCase()==="hd-4") ? - setEpisodeId(id)} - autoNext={autoNext} - />: setEpisodeId(id)} - animeInfo={animeInfo} - episodeNum={activeEpisodeNum} - streamInfo={streamInfo} - /> - ) : ( -
- -
- )} -

- {!buffering && !activeServerType ? ( - servers ? ( - <> - Probably this server is down, try other servers -
- Either reload or try again after sometime - - ) : ( - <> - Probably streaming server is down -
- Either reload or try again after sometime - - ) - ) : null} -

-
- - {!buffering && ( - setEpisodeId(id)} - /> - )} - - {seasons?.length > 0 && ( -
-

- Watch more seasons of this anime -

-
- {seasons.map((season, index) => ( - -

- {season.season} -

-
- - - ))} -
-
- )} - {nextEpisodeSchedule?.nextEpisodeSchedule && - showNextEpisodeSchedule && ( -
-
-
- 🚀 - {" Estimated the next episode will come at "} - - {new Date( - new Date( - nextEpisodeSchedule.nextEpisodeSchedule - ).getTime() - - new Date().getTimezoneOffset() * 60000 - ).toLocaleDateString("en-GB", { - day: "2-digit", - month: "2-digit", - year: "numeric", - hour: "2-digit", - minute: "2-digit", - second: "2-digit", - hour12: true, - })} - -
- setShowNextEpisodeSchedule(false)} - > - × - -
-
- )} -
-
-
- {animeInfo && animeInfo?.poster ? ( - - ) : ( - - )} -
- {animeInfo && animeInfo?.title ? ( -

- {language ? animeInfo?.title : animeInfo?.japanese_title} -

- ) : ( - - )} -
- {animeInfo ? ( - tags.map( - ({ condition, icon, bgColor, text }, index) => - condition && ( - - ) - ) - ) : ( - - )} -
- {[ - animeInfo?.animeInfo?.tvInfo?.showType, - animeInfo?.animeInfo?.tvInfo?.duration, - ].map( - (item, index) => - item && ( -
-
-

{item}

-
- ) - )} -
-
- {animeInfo ? ( - animeInfo?.animeInfo?.Overview && ( -
-
-

- {animeInfo?.animeInfo?.Overview.length > 270 ? ( - <> - {isFullOverview - ? animeInfo?.animeInfo?.Overview - : `${animeInfo?.animeInfo?.Overview.slice( - 0, - 270 - )}...`} - setIsFullOverview(!isFullOverview)} - > - {isFullOverview ? "- Less" : "+ More"} - - - ) : ( - animeInfo?.animeInfo?.Overview - )} -

-
-
- ) - ) : ( -
- - - - -
- )} -

- {`${website_name} is the best site to watch `} - - {language ? animeInfo?.title : animeInfo?.japanese_title} - - {` SUB online, or you can even watch `} - - {language ? animeInfo?.title : animeInfo?.japanese_title} - - {` DUB in HD quality.`} -

- - View detail - -
-
-
-
-
- Share Anime -
-

Share Anime

-

to your friends

-
-
-
-
- {animeInfo?.charactersVoiceActors.length > 0 && ( - - )} - {animeInfo?.recommended_data.length > 0 ? ( - - ) : ( - - )} -
-
- {animeInfo && animeInfo.related_data ? ( - - ) : ( - - )} - {homeInfo && homeInfo.most_popular && ( - - )} -
-
-
- ); -} diff --git a/src/utils/category.utils.js b/src/utils/category.utils.js deleted file mode 100644 index dfc5d69..0000000 --- a/src/utils/category.utils.js +++ /dev/null @@ -1,89 +0,0 @@ -export const categoryRoutes = [ - "genre/action", - "genre/adventure", - "genre/cars", - "genre/comedy", - "genre/dementia", - "genre/demons", - "genre/drama", - "genre/ecchi", - "genre/fantasy", - "genre/game", - "genre/harem", - "genre/historical", - "genre/horror", - "genre/isekai", - "genre/josei", - "genre/kids", - "genre/magic", - "genre/martial-arts", - "genre/mecha", - "genre/military", - "genre/music", - "genre/mystery", - "genre/parody", - "genre/police", - "genre/psychological", - "genre/romance", - "genre/samurai", - "genre/school", - "genre/sci-fi", - "genre/seinen", - "genre/shoujo", - "genre/shoujo-ai", - "genre/shounen", - "genre/shounen-ai", - "genre/slice-of-life", - "genre/space", - "genre/sports", - "genre/super-power", - "genre/supernatural", - "genre/thriller", - "genre/vampire", - "top-airing", - "most-popular", - "most-favorite", - "completed", - "recently-updated", - "recently-added", - "top-upcoming", - "subbed-anime", - "dubbed-anime", - "movie", - "special", - "ova", - "ona", - "tv", -]; - -export const azRoute = [ - "az-list", - "az-list/other", - "az-list/0-9", - "az-list/a", - "az-list/b", - "az-list/c", - "az-list/d", - "az-list/e", - "az-list/f", - "az-list/g", - "az-list/h", - "az-list/i", - "az-list/j", - "az-list/k", - "az-list/l", - "az-list/m", - "az-list/n", - "az-list/o", - "az-list/p", - "az-list/q", - "az-list/r", - "az-list/s", - "az-list/t", - "az-list/u", - "az-list/v", - "az-list/w", - "az-list/x", - "az-list/y", - "az-list/z", -]; diff --git a/src/utils/getAnimeInfo.utils.js b/src/utils/getAnimeInfo.utils.js deleted file mode 100644 index 8736365..0000000 --- a/src/utils/getAnimeInfo.utils.js +++ /dev/null @@ -1,18 +0,0 @@ -import axios from "axios"; - -export default async function fetchAnimeInfo(id, random = false) { - const api_url = import.meta.env.VITE_API_URL; - try { - if (random) { - const id = await axios.get(`${api_url}/random/id`); - const response = await axios.get(`${api_url}/info?id=${id.data.results}`); - return response.data.results; - } else { - const response = await axios.get(`${api_url}/info?id=${id}`); - return response.data.results; - } - } catch (error) { - console.error("Error fetching anime info:", error); - return error; - } -} diff --git a/src/utils/getCategoryInfo.utils.js b/src/utils/getCategoryInfo.utils.js deleted file mode 100644 index 409631e..0000000 --- a/src/utils/getCategoryInfo.utils.js +++ /dev/null @@ -1,14 +0,0 @@ -import axios from "axios"; - -const getCategoryInfo = async (path,page) => { - const api_url = import.meta.env.VITE_API_URL; - try { - const response = await axios.get(`${api_url}/${path}?page=${page}`); - return response.data.results; - } catch (err) { - console.error("Error fetching genre info:", err); - return err; - } -}; - -export default getCategoryInfo; diff --git a/src/utils/getEpisodes.utils.js b/src/utils/getEpisodes.utils.js deleted file mode 100644 index d98c5f6..0000000 --- a/src/utils/getEpisodes.utils.js +++ /dev/null @@ -1,12 +0,0 @@ -import axios from "axios"; - -export default async function getEpisodes(id) { - const api_url = import.meta.env.VITE_API_URL; - try { - const response = await axios.get(`${api_url}/episodes/${id}`); - return response.data.results; - } catch (error) { - console.error("Error fetching anime info:", error); - return error; - } -} diff --git a/src/utils/getHomeInfo.utils.js b/src/utils/getHomeInfo.utils.js deleted file mode 100644 index 655182b..0000000 --- a/src/utils/getHomeInfo.utils.js +++ /dev/null @@ -1,58 +0,0 @@ -import axios from "axios"; - -const CACHE_KEY = "homeInfoCache"; -const CACHE_DURATION = 24 * 60 * 60 * 1000; - -export default async function getHomeInfo() { - const api_url = import.meta.env.VITE_API_URL; - - const currentTime = Date.now(); - const cachedData = JSON.parse(localStorage.getItem(CACHE_KEY)); - - if (cachedData && currentTime - cachedData.timestamp < CACHE_DURATION) { - return cachedData.data; - } - const response = await axios.get(`${api_url}`); - if ( - !response.data.results || - Object.keys(response.data.results).length === 0 - ) { - return null; - } - const { - spotlights, - trending, - topTen: topten, - today: todaySchedule, - topAiring: top_airing, - mostPopular: most_popular, - mostFavorite: most_favorite, - latestCompleted: latest_completed, - latestEpisode: latest_episode, - topUpcoming: top_upcoming, - recentlyAdded: recently_added, - genres, - } = response.data.results; - - const dataToCache = { - data: { - spotlights, - trending, - topten, - todaySchedule, - top_airing, - most_popular, - most_favorite, - latest_completed, - latest_episode, - top_upcoming, - recently_added, - genres, - }, - timestamp: currentTime, - }; - - localStorage.setItem(CACHE_KEY, JSON.stringify(dataToCache)); - - return dataToCache.data; -} diff --git a/src/utils/getNextEpisodeSchedule.utils.js b/src/utils/getNextEpisodeSchedule.utils.js deleted file mode 100644 index e01cb5b..0000000 --- a/src/utils/getNextEpisodeSchedule.utils.js +++ /dev/null @@ -1,14 +0,0 @@ -import axios from "axios"; - -const getNextEpisodeSchedule = async (id) => { - const api_url = import.meta.env.VITE_API_URL; - try { - const response = await axios.get(`${api_url}/schedule/${id}`); - return response.data.results; - } catch (err) { - console.error("Error fetching next episode schedule:", err); - return err; - } -}; - -export default getNextEpisodeSchedule; diff --git a/src/utils/getProducer.utils.js b/src/utils/getProducer.utils.js deleted file mode 100644 index 8f4e5bc..0000000 --- a/src/utils/getProducer.utils.js +++ /dev/null @@ -1,14 +0,0 @@ -import axios from "axios"; - -const getProducer = async (producer, page) => { - const api_url = import.meta.env.VITE_API_URL; - try { - const response = await axios.get(`${api_url}/producer/${producer}?page=${page}`); - return response.data.results; - } catch (err) { - console.error("Error fetching genre info:", err); - return err; - } -}; - -export default getProducer; diff --git a/src/utils/getQtip.utils.js b/src/utils/getQtip.utils.js deleted file mode 100644 index 19c8026..0000000 --- a/src/utils/getQtip.utils.js +++ /dev/null @@ -1,18 +0,0 @@ -import axios from "axios"; - -const getQtip = async (id) => { - try { - let workerUrls = import.meta.env.VITE_WORKER_URL?.split(","); - let baseUrl = workerUrls?.length - ? workerUrls[Math.floor(Math.random() * workerUrls.length)] - : import.meta.env.VITE_API_URL; - if (!baseUrl) throw new Error("No API endpoint defined."); - const response = await axios.get(`${baseUrl}/qtip/${id.split("-").pop()}`); - return response.data.results; - } catch (err) { - console.error("Error fetching genre info:", err); - return null; - } -}; - -export default getQtip; diff --git a/src/utils/getScheduleInfo.utils.js b/src/utils/getScheduleInfo.utils.js deleted file mode 100644 index 1095c23..0000000 --- a/src/utils/getScheduleInfo.utils.js +++ /dev/null @@ -1,12 +0,0 @@ -import axios from "axios"; - -export default async function getSchedInfo(date) { - try { - const api_url = import.meta.env.VITE_API_URL; - const response = await axios.get(`${api_url}/schedule?date=${date}`); - return response.data.results; - } catch (error) { - console.error(error); - return error; - } -} diff --git a/src/utils/getSearch.utils.js b/src/utils/getSearch.utils.js deleted file mode 100644 index 48aafb9..0000000 --- a/src/utils/getSearch.utils.js +++ /dev/null @@ -1,17 +0,0 @@ -import axios from "axios"; - -const getSearch = async (keyword, page) => { - const api_url = import.meta.env.VITE_API_URL; - if (!page) page = 1; - try { - const response = await axios.get( - `${api_url}/search?keyword=${keyword}&page=${page}` - ); - return response.data.results; - } catch (err) { - console.error("Error fetching genre info:", err); - return err; - } -}; - -export default getSearch; diff --git a/src/utils/getSearchSuggestion.utils.js b/src/utils/getSearchSuggestion.utils.js deleted file mode 100644 index 0d1173d..0000000 --- a/src/utils/getSearchSuggestion.utils.js +++ /dev/null @@ -1,16 +0,0 @@ -import axios from "axios"; - -const getSearchSuggestion = async (keyword) => { - const api_url = import.meta.env.VITE_API_URL; - try { - const response = await axios.get( - `${api_url}/search/suggest?keyword=${keyword}` - ); - return response.data.results; - } catch (err) { - console.error("Error fetching genre info:", err); - return err; - } -}; - -export default getSearchSuggestion; diff --git a/src/utils/getServers.utils.js b/src/utils/getServers.utils.js deleted file mode 100644 index 0ed3e14..0000000 --- a/src/utils/getServers.utils.js +++ /dev/null @@ -1,14 +0,0 @@ -import axios from "axios"; - -export default async function getServers(animeId, episodeId) { - try { - const api_url = import.meta.env.VITE_API_URL; - const response = await axios.get( - `${api_url}/servers/${animeId}?ep=${episodeId}` - ); - return response.data.results; - } catch (error) { - console.error(error); - return error; - } -} diff --git a/src/utils/getStreamInfo.utils.js b/src/utils/getStreamInfo.utils.js deleted file mode 100644 index d044e5c..0000000 --- a/src/utils/getStreamInfo.utils.js +++ /dev/null @@ -1,12 +0,0 @@ -import axios from "axios"; - -export default async function getStreamInfo(animeId,episodeId,serverName,type) { - const api_url = import.meta.env.VITE_API_URL; - try { - const response = await axios.get(`${api_url}/stream?id=${animeId}?ep=${episodeId}&server=${serverName}&type=${type}`); - return response.data.results; - } catch (error) { - console.error("Error fetching stream info:", error); - return error; - } -} diff --git a/src/utils/getTopSearch.utils.js b/src/utils/getTopSearch.utils.js deleted file mode 100644 index a1d1282..0000000 --- a/src/utils/getTopSearch.utils.js +++ /dev/null @@ -1,32 +0,0 @@ -import axios from "axios"; - -const getTopSearch = async () => { - try { - let workerUrls = import.meta.env.VITE_WORKER_URL?.split(","); - let baseUrl = workerUrls?.length - ? workerUrls[Math.floor(Math.random() * workerUrls.length)] - : import.meta.env.VITE_API_URL; - const storedData = localStorage.getItem("topSearch"); - if (storedData) { - const { data, timestamp } = JSON.parse(storedData); - if (Date.now() - timestamp <= 7 * 24 * 60 * 60 * 1000) { - return data; - } - } - const { data } = await axios.get(`${baseUrl}/top-search`); - const results = data?.results || []; - if (results.length) { - localStorage.setItem( - "topSearch", - JSON.stringify({ data: results, timestamp: Date.now() }) - ); - return results; - } - return []; - } catch (error) { - console.error("Error fetching top search data:", error); - return null; - } -}; - -export default getTopSearch; diff --git a/src/utils/getVoiceActor.utils.js b/src/utils/getVoiceActor.utils.js deleted file mode 100644 index 57afecf..0000000 --- a/src/utils/getVoiceActor.utils.js +++ /dev/null @@ -1,14 +0,0 @@ -import axios from "axios"; - -export default async function fetchVoiceActorInfo(id, page) { - const api_url = import.meta.env.VITE_API_URL; - try { - const response = await axios.get( - `${api_url}/character/list/${id}?page=${page}` - ); - return response.data.results; - } catch (error) { - console.error("Error fetching anime info:", error); - return error; - } -} diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index 2725950..0000000 --- a/tailwind.config.js +++ /dev/null @@ -1,62 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -export default { - darkMode: ["class"], - content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], - theme: { - extend: { - borderRadius: { - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)", - }, - screens: { - "custom-md": "600px", - "custom-xl": "1200px", - "ultra-wide":"1660px", - }, - colors: { - background: "hsl(var(--background))", - foreground: "hsl(var(--foreground))", - card: { - DEFAULT: "hsl(var(--card))", - foreground: "hsl(var(--card-foreground))", - }, - popover: { - DEFAULT: "hsl(var(--popover))", - foreground: "hsl(var(--popover-foreground))", - }, - primary: { - DEFAULT: "hsl(var(--primary))", - foreground: "hsl(var(--primary-foreground))", - }, - secondary: { - DEFAULT: "hsl(var(--secondary))", - foreground: "hsl(var(--secondary-foreground))", - }, - muted: { - DEFAULT: "hsl(var(--muted))", - foreground: "hsl(var(--muted-foreground))", - }, - accent: { - DEFAULT: "hsl(var(--accent))", - foreground: "hsl(var(--accent-foreground))", - }, - destructive: { - DEFAULT: "hsl(var(--destructive))", - foreground: "hsl(var(--destructive-foreground))", - }, - border: "hsl(var(--border))", - input: "hsl(var(--input))", - ring: "hsl(var(--ring))", - chart: { - 1: "hsl(var(--chart-1))", - 2: "hsl(var(--chart-2))", - 3: "hsl(var(--chart-3))", - 4: "hsl(var(--chart-4))", - 5: "hsl(var(--chart-5))", - }, - }, - }, - }, - plugins: [require("tailwindcss-animate")], -}; diff --git a/vercel.json b/vercel.json deleted file mode 100644 index 2e3d156..0000000 --- a/vercel.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "routes": [{ "src": "/[^.]+", "dest": "/", "status": 200 }] -} \ No newline at end of file diff --git a/vite.config.js b/vite.config.js deleted file mode 100644 index 454ab3e..0000000 --- a/vite.config.js +++ /dev/null @@ -1,12 +0,0 @@ -import path from "path" -import react from "@vitejs/plugin-react" -import { defineConfig } from "vite" - -export default defineConfig({ - plugins: [react()], - resolve: { - alias: { - "@": path.resolve(__dirname, "./"), - }, - }, -})