├── .gitignore
├── backend
├── api
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── admin.py
│ ├── apps.py
│ ├── urls.py
│ ├── serializer.py
│ └── views.py
├── backend
│ ├── __init__.py
│ ├── urls.py
│ ├── asgi.py
│ ├── wsgi.py
│ └── settings.py
├── requirements.txt
├── manage.py
└── .gitignore
├── frontend
├── src
│ ├── utils
│ │ ├── constants.js
│ │ ├── axios.js
│ │ ├── useAxios.js
│ │ └── auth.js
│ ├── main.jsx
│ ├── views
│ │ ├── logout.jsx
│ │ ├── home.jsx
│ │ ├── private.jsx
│ │ ├── login.jsx
│ │ └── register.jsx
│ ├── layouts
│ │ ├── PrivateRoute.jsx
│ │ └── MainWrapper.jsx
│ ├── store
│ │ └── auth.js
│ ├── App.css
│ ├── App.jsx
│ ├── index.css
│ └── assets
│ │ └── react.svg
├── .prettierrc.json
├── vite.config.js
├── .gitignore
├── index.html
├── .editorconfig
├── package.json
├── public
│ └── vite.svg
├── eslint.config.js
└── pnpm-lock.yaml
├── README.md
└── UPGRADE_PLAN.md
/.gitignore:
--------------------------------------------------------------------------------
1 | .vscode
--------------------------------------------------------------------------------
/backend/api/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/backend/backend/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/backend/api/migrations/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/backend/api/models.py:
--------------------------------------------------------------------------------
1 | from django.db import models
2 |
3 | # Create your models here.
4 |
--------------------------------------------------------------------------------
/backend/api/tests.py:
--------------------------------------------------------------------------------
1 | from django.test import TestCase
2 |
3 | # Create your tests here.
4 |
--------------------------------------------------------------------------------
/frontend/src/utils/constants.js:
--------------------------------------------------------------------------------
1 | export const API_BASE_URL = 'http://localhost:8000/api/';
2 |
--------------------------------------------------------------------------------
/backend/api/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | # Register your models here.
4 |
--------------------------------------------------------------------------------
/frontend/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "es5",
3 | "tabWidth": 4,
4 | "semi": true,
5 | "singleQuote": true
6 | }
7 |
--------------------------------------------------------------------------------
/backend/api/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class ApiConfig(AppConfig):
5 | default_auto_field = 'django.db.models.BigAutoField'
6 | name = 'api'
7 |
--------------------------------------------------------------------------------
/frontend/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/backend/backend/urls.py:
--------------------------------------------------------------------------------
1 | # backend/urls.py
2 |
3 | from django.contrib import admin
4 | from django.urls import path
5 | from django.urls import path, include
6 |
7 | urlpatterns = [
8 | path('admin/', admin.site.urls),
9 | path('api/', include("api.urls"))
10 | ]
11 |
--------------------------------------------------------------------------------
/frontend/src/main.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App.jsx';
4 | import './index.css';
5 |
6 | ReactDOM.createRoot(document.getElementById('root')).render(
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/backend/requirements.txt:
--------------------------------------------------------------------------------
1 | asgiref==3.8.1
2 | autopep8==2.3.1
3 | Django==5.1.4
4 | django-cors-headers==4.5.0
5 | djangorestframework==3.15.2
6 | djangorestframework-simplejwt==5.3.0
7 | setuptools>=75.0.0
8 | pycodestyle==2.12.1
9 | PyJWT==2.10.1
10 | pytz==2024.2
11 | sqlparse==0.5.2
12 | toml==0.10.2
13 | tomli==2.1.0
14 | tzdata==2024.2
15 |
--------------------------------------------------------------------------------
/frontend/src/views/logout.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react';
2 | import { LoggedOutView } from './home';
3 | import { logout } from '../utils/auth';
4 |
5 | const Logout = () => {
6 | useEffect(() => {
7 | logout();
8 | }, []);
9 | return ;
10 | };
11 |
12 | export default Logout;
13 |
--------------------------------------------------------------------------------
/frontend/src/utils/axios.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 |
3 | const apiInstance = axios.create({
4 | baseURL: 'http://localhost:8000/api/',
5 | timeout: 5000, // timeout after 5 seconds
6 | headers: {
7 | 'Content-Type': 'application/json',
8 | Accept: 'application/json',
9 | },
10 | });
11 |
12 | export default apiInstance;
13 |
--------------------------------------------------------------------------------
/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/frontend/src/layouts/PrivateRoute.jsx:
--------------------------------------------------------------------------------
1 | import { Navigate } from 'react-router-dom';
2 | import { useAuthStore } from '../store/auth';
3 |
4 | const PrivateRoute = ({ children }) => {
5 | const allUserData = useAuthStore((state) => state.allUserData);
6 | const loggedIn = allUserData !== null;
7 | return loggedIn ? <>{children}> : ;
8 | };
9 |
10 | export default PrivateRoute;
11 |
--------------------------------------------------------------------------------
/frontend/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + React
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/backend/backend/asgi.py:
--------------------------------------------------------------------------------
1 | """
2 | ASGI config for backend project.
3 |
4 | It exposes the ASGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/4.0/howto/deployment/asgi/
8 | """
9 |
10 | import os
11 |
12 | from django.core.asgi import get_asgi_application
13 |
14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
15 |
16 | application = get_asgi_application()
17 |
--------------------------------------------------------------------------------
/backend/backend/wsgi.py:
--------------------------------------------------------------------------------
1 | """
2 | WSGI config for backend project.
3 |
4 | It exposes the WSGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/
8 | """
9 |
10 | import os
11 |
12 | from django.core.wsgi import get_wsgi_application
13 |
14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
15 |
16 | application = get_wsgi_application()
17 |
--------------------------------------------------------------------------------
/frontend/src/store/auth.js:
--------------------------------------------------------------------------------
1 | import { create } from 'zustand';
2 | import { mountStoreDevtool } from 'simple-zustand-devtools';
3 |
4 | const useAuthStore = create((set) => ({
5 | allUserData: null, // Use this to store all user data
6 | loading: false,
7 | setUser: (user) => set({ allUserData: user }),
8 | setLoading: (loading) => set({ loading }),
9 | }));
10 |
11 | if (import.meta.env.DEV) {
12 | mountStoreDevtool('Store', useAuthStore);
13 | }
14 |
15 | export { useAuthStore };
16 |
--------------------------------------------------------------------------------
/backend/api/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 | from . import views
3 |
4 | from rest_framework_simplejwt.views import (
5 | TokenRefreshView,
6 | )
7 |
8 | urlpatterns = [
9 | path('token/', views.MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
10 | path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
11 | path('register/', views.RegisterView.as_view(), name='auth_register'),
12 | path('test/', views.testEndPoint, name='test'),
13 | path('', views.getRoutes)
14 | ]
15 |
--------------------------------------------------------------------------------
/frontend/src/layouts/MainWrapper.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from 'react';
2 | import { setUser } from '../utils/auth';
3 |
4 | const MainWrapper = ({ children }) => {
5 | const [loading, setLoading] = useState(true);
6 | useEffect(() => {
7 | const handler = async () => {
8 | setLoading(true);
9 | await setUser();
10 | setLoading(false);
11 | };
12 | handler();
13 | }, []);
14 |
15 | return <>{loading ? null : children}>;
16 | };
17 |
18 | export default MainWrapper;
19 |
--------------------------------------------------------------------------------
/backend/manage.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | """Django's command-line utility for administrative tasks."""
3 | import os
4 | import sys
5 |
6 |
7 | def main():
8 | """Run administrative tasks."""
9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
10 | try:
11 | from django.core.management import execute_from_command_line
12 | except ImportError as exc:
13 | raise ImportError(
14 | "Couldn't import Django. Are you sure it's installed and "
15 | "available on your PYTHONPATH environment variable? Did you "
16 | "forget to activate a virtual environment?"
17 | ) from exc
18 | execute_from_command_line(sys.argv)
19 |
20 |
21 | if __name__ == '__main__':
22 | main()
23 |
--------------------------------------------------------------------------------
/frontend/src/App.css:
--------------------------------------------------------------------------------
1 | #root {
2 | max-width: 1280px;
3 | margin: 0 auto;
4 | padding: 2rem;
5 | text-align: center;
6 | }
7 |
8 | .logo {
9 | height: 6em;
10 | padding: 1.5em;
11 | will-change: filter;
12 | transition: filter 300ms;
13 | }
14 | .logo:hover {
15 | filter: drop-shadow(0 0 2em #646cffaa);
16 | }
17 | .logo.react:hover {
18 | filter: drop-shadow(0 0 2em #61dafbaa);
19 | }
20 |
21 | @keyframes logo-spin {
22 | from {
23 | transform: rotate(0deg);
24 | }
25 | to {
26 | transform: rotate(360deg);
27 | }
28 | }
29 |
30 | @media (prefers-reduced-motion: no-preference) {
31 | a:nth-of-type(2) .logo {
32 | animation: logo-spin infinite 20s linear;
33 | }
34 | }
35 |
36 | .card {
37 | padding: 2em;
38 | }
39 |
40 | .read-the-docs {
41 | color: #888;
42 | }
43 |
--------------------------------------------------------------------------------
/frontend/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: https://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | # Unix-style newlines with a newline ending every file
7 | [*]
8 | end_of_line = lf
9 | insert_final_newline = true
10 |
11 | # Matches multiple files with brace expansion notation
12 | # Set default charset
13 | [*.{js,py}]
14 | charset = utf-8
15 | indent_size = 4
16 |
17 | # 4 space indentation
18 | [*.py]
19 | indent_style = space
20 | indent_size = 4
21 |
22 | # Tab indentation (no size specified)
23 | [Makefile]
24 | indent_style = tab
25 |
26 | # Indentation override for all JS under lib directory
27 | [lib/**.js]
28 | indent_style = space
29 | indent_size = 2
30 |
31 | # Matches the exact files either package.json or .travis.yml
32 | [{package.json,.travis.yml}]
33 | indent_style = space
34 | indent_size = 2
--------------------------------------------------------------------------------
/frontend/src/utils/useAxios.js:
--------------------------------------------------------------------------------
1 | import axios from 'axios';
2 | import { getRefreshToken, isAccessTokenExpired, setAuthUser } from './auth';
3 | import { API_BASE_URL } from './constants';
4 | import Cookies from 'js-cookie';
5 |
6 | const useAxios = () => {
7 | const accessToken = Cookies.get('access_token');
8 | const refreshToken = Cookies.get('refresh_token');
9 |
10 | const axiosInstance = axios.create({
11 | baseURL: API_BASE_URL,
12 | headers: { Authorization: `Bearer ${accessToken}` },
13 | });
14 |
15 | axiosInstance.interceptors.request.use(async (req) => {
16 | if (!isAccessTokenExpired(accessToken)) return req;
17 |
18 | const response = await getRefreshToken(refreshToken);
19 |
20 | setAuthUser(response.access, response.refresh);
21 |
22 | req.headers.Authorization = `Bearer ${response.data.access}`;
23 | return req;
24 | });
25 |
26 | return axiosInstance;
27 | };
28 |
29 | export default useAxios;
30 |
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "fast-frontend",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "lint": "eslint src --report-unused-disable-directives --max-warnings 0",
10 | "preview": "vite preview"
11 | },
12 | "dependencies": {
13 | "axios": "^1.7.8",
14 | "dayjs": "^1.11.13",
15 | "js-cookie": "^3.0.5",
16 | "jwt-decode": "^4.0.0",
17 | "react": "^18.3.1",
18 | "react-dom": "^18.3.1",
19 | "react-router-dom": "^6.28.0",
20 | "zustand": "^5.0.1"
21 | },
22 | "devDependencies": {
23 | "@babel/core": "^7.27.1",
24 | "@babel/eslint-parser": "^7.27.1",
25 | "@babel/preset-react": "^7.27.1",
26 | "@types/react": "^18.3.12",
27 | "@types/react-dom": "^18.3.1",
28 | "@vitejs/plugin-react": "^4.3.4",
29 | "eslint": "^9.15.0",
30 | "eslint-plugin-react": "^7.37.2",
31 | "eslint-plugin-react-hooks": "^5.0.0",
32 | "eslint-plugin-react-refresh": "^0.4.14",
33 | "globals": "^16.1.0",
34 | "prettier": "^3.3.3",
35 | "simple-zustand-devtools": "^1.1.0",
36 | "vite": "^6.0.1"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/frontend/src/views/home.jsx:
--------------------------------------------------------------------------------
1 | import { Link } from 'react-router-dom';
2 | import { useAuthStore } from '../store/auth';
3 |
4 | const Home = () => {
5 | const allUserData = useAuthStore((state) => state.allUserData);
6 |
7 | const isLoggedIn = allUserData !== null;
8 | const user = allUserData ? {
9 | user_id: allUserData.user_id,
10 | username: allUserData.username,
11 | } : null;
12 |
13 | return (
14 |
15 | {isLoggedIn ? : }
16 |
17 | );
18 | };
19 |
20 | const LoggedInView = ({ user }) => {
21 | return (
22 |
23 |
Welcome {user.username}
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | );
32 | };
33 |
34 | export const LoggedOutView = ({ title = 'Home' }) => {
35 | return (
36 |
37 |
{title}
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | );
46 | };
47 |
48 | export default Home;
49 |
--------------------------------------------------------------------------------
/frontend/src/App.jsx:
--------------------------------------------------------------------------------
1 | import './App.css';
2 | import { Route, Routes, BrowserRouter } from 'react-router-dom';
3 | import Home from './views/home';
4 | import MainWrapper from './layouts/MainWrapper';
5 | import Login from './views/login';
6 | import PrivateRoute from './layouts/PrivateRoute';
7 | import Logout from './views/logout';
8 | import Private from './views/private';
9 | import Register from './views/register';
10 |
11 | function App() {
12 | return (
13 |
19 |
20 |
21 |
25 |
26 |
27 | }
28 | />
29 | } />
30 | } />
31 | } />
32 | } />
33 |
34 |
35 |
36 | );
37 | }
38 |
39 | export default App;
40 |
--------------------------------------------------------------------------------
/frontend/src/views/private.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from 'react';
2 | import useAxios from '../utils/useAxios';
3 |
4 | const Private = () => {
5 | const [res, setRes] = useState('');
6 | const [posRes, setPostRes] = useState('');
7 | const api = useAxios();
8 | useEffect(() => {
9 | const fetchData = async () => {
10 | try {
11 | const response = await api.get('/test/');
12 | setRes(response.data.response);
13 | } catch (error) {
14 | setPostRes(error.response.data);
15 | }
16 | };
17 | fetchData();
18 | }, [api]);
19 | const handleSubmit = async (e) => {
20 | e.preventDefault();
21 | try {
22 | const response = await api.post('/test/', {
23 | text: e.target[0].value,
24 | });
25 | setPostRes(response.data.response);
26 | } catch (error) {
27 | setPostRes(error.response.data);
28 | }
29 | };
30 | return (
31 |
32 | Private
33 | {res}
34 |
38 | {posRes && {posRes}
}
39 |
40 | );
41 | };
42 |
43 | export default Private;
44 |
--------------------------------------------------------------------------------
/frontend/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/src/index.css:
--------------------------------------------------------------------------------
1 | :root {
2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
3 | line-height: 1.5;
4 | font-weight: 400;
5 |
6 | color-scheme: light dark;
7 | color: rgba(255, 255, 255, 0.87);
8 | background-color: #242424;
9 |
10 | font-synthesis: none;
11 | text-rendering: optimizeLegibility;
12 | -webkit-font-smoothing: antialiased;
13 | -moz-osx-font-smoothing: grayscale;
14 | -webkit-text-size-adjust: 100%;
15 | }
16 |
17 | a {
18 | font-weight: 500;
19 | color: #646cff;
20 | text-decoration: inherit;
21 | }
22 | a:hover {
23 | color: #535bf2;
24 | }
25 |
26 | body {
27 | margin: 0;
28 | display: flex;
29 | place-items: center;
30 | min-width: 320px;
31 | min-height: 100vh;
32 | }
33 |
34 | h1 {
35 | font-size: 3.2em;
36 | line-height: 1.1;
37 | }
38 |
39 | button {
40 | border-radius: 8px;
41 | border: 1px solid transparent;
42 | padding: 0.6em 1.2em;
43 | font-size: 1em;
44 | font-weight: 500;
45 | font-family: inherit;
46 | background-color: #1a1a1a;
47 | cursor: pointer;
48 | transition: border-color 0.25s;
49 | }
50 | button:hover {
51 | border-color: #646cff;
52 | }
53 | button:focus,
54 | button:focus-visible {
55 | outline: 4px auto -webkit-focus-ring-color;
56 | }
57 |
58 | @media (prefers-color-scheme: light) {
59 | :root {
60 | color: #213547;
61 | background-color: #ffffff;
62 | }
63 | a:hover {
64 | color: #747bff;
65 | }
66 | button {
67 | background-color: #f9f9f9;
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/frontend/eslint.config.js:
--------------------------------------------------------------------------------
1 | import js from '@eslint/js';
2 | import react from 'eslint-plugin-react';
3 | import reactHooks from 'eslint-plugin-react-hooks';
4 | import reactRefresh from 'eslint-plugin-react-refresh';
5 | import globals from 'globals';
6 | import babelParser from '@babel/eslint-parser';
7 |
8 | export default [
9 | js.configs.recommended,
10 | {
11 | files: ['**/*.{js,jsx}'],
12 | languageOptions: {
13 | parser: babelParser,
14 | ecmaVersion: 'latest',
15 | sourceType: 'module',
16 | globals: {
17 | ...globals.browser,
18 | },
19 | parserOptions: {
20 | requireConfigFile: false,
21 | babelOptions: {
22 | presets: ['@babel/preset-react'],
23 | },
24 | ecmaFeatures: {
25 | jsx: true,
26 | },
27 | },
28 | },
29 | plugins: {
30 | react,
31 | 'react-hooks': reactHooks,
32 | 'react-refresh': reactRefresh,
33 | },
34 | rules: {
35 | ...react.configs.recommended.rules,
36 | ...react.configs['jsx-runtime'].rules,
37 | ...reactHooks.configs.recommended.rules,
38 | 'react-refresh/only-export-components': 'warn',
39 | 'react/prop-types': 'off',
40 | },
41 | settings: {
42 | react: {
43 | version: '18.3',
44 | },
45 | },
46 | },
47 | ];
48 |
--------------------------------------------------------------------------------
/backend/api/serializer.py:
--------------------------------------------------------------------------------
1 | from django.contrib.auth.models import User
2 | from django.contrib.auth.password_validation import validate_password
3 | from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
4 | from rest_framework import serializers
5 | from rest_framework.validators import UniqueValidator
6 | from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
7 |
8 |
9 | class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
10 | @classmethod
11 | def get_token(cls, user):
12 | token = super().get_token(user)
13 |
14 | # Add custom claims
15 | token['username'] = user.username
16 | token['email'] = user.email
17 | # ...
18 |
19 | return token
20 |
21 |
22 | class RegisterSerializer(serializers.ModelSerializer):
23 | password = serializers.CharField(
24 | write_only=True, required=True, validators=[validate_password])
25 | password2 = serializers.CharField(write_only=True, required=True)
26 |
27 | class Meta:
28 | model = User
29 | fields = ('username', 'password', 'password2')
30 |
31 | def validate(self, attrs):
32 | if attrs['password'] != attrs['password2']:
33 | raise serializers.ValidationError(
34 | {"password": "Password fields didn't match."})
35 |
36 | return attrs
37 |
38 | def create(self, validated_data):
39 | user = User.objects.create(
40 | username=validated_data['username']
41 | )
42 |
43 | user.set_password(validated_data['password'])
44 | user.save()
45 |
46 | return user
47 |
--------------------------------------------------------------------------------
/frontend/src/views/login.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from 'react';
2 | import { login } from '../utils/auth';
3 | import { useNavigate } from 'react-router-dom';
4 | import { useAuthStore } from '../store/auth';
5 |
6 | const Login = () => {
7 | const navigate = useNavigate();
8 | const [username, setUsername] = useState('');
9 | const [password, setPassword] = useState('');
10 | const allUserData = useAuthStore((state) => state.allUserData);
11 |
12 | useEffect(() => {
13 | if (allUserData !== null) {
14 | navigate('/');
15 | }
16 | }, [allUserData, navigate]);
17 |
18 | const resetForm = () => {
19 | setUsername('');
20 | setPassword('');
21 | };
22 |
23 | const handleLogin = async (e) => {
24 | e.preventDefault();
25 | const { error } = await login(username, password);
26 | if (error) {
27 | alert(error);
28 | } else {
29 | navigate('/');
30 | resetForm();
31 | }
32 | };
33 | return (
34 |
60 | );
61 | };
62 |
63 | export default Login;
64 |
--------------------------------------------------------------------------------
/backend/api/views.py:
--------------------------------------------------------------------------------
1 | from django.shortcuts import render
2 | from rest_framework import status
3 | from rest_framework.decorators import api_view
4 | from rest_framework.response import Response
5 | from django.http import JsonResponse
6 | from api.serializer import MyTokenObtainPairSerializer, RegisterSerializer
7 | from rest_framework_simplejwt.views import TokenObtainPairView
8 | from rest_framework import generics
9 | from django.contrib.auth.models import User
10 | from rest_framework.permissions import AllowAny, IsAuthenticated
11 | from rest_framework.decorators import api_view, permission_classes
12 | import json
13 |
14 | # Create your views here.
15 |
16 |
17 | class MyTokenObtainPairView(TokenObtainPairView):
18 | serializer_class = MyTokenObtainPairSerializer
19 |
20 |
21 | class RegisterView(generics.CreateAPIView):
22 | queryset = User.objects.all()
23 | permission_classes = (AllowAny,)
24 | serializer_class = RegisterSerializer
25 |
26 |
27 | @api_view(['GET'])
28 | def getRoutes(request):
29 | routes = [
30 | '/api/token/',
31 | '/api/register/',
32 | '/api/token/refresh/',
33 | '/api/test/'
34 | ]
35 | return Response(routes)
36 |
37 |
38 | @api_view(['GET', 'POST'])
39 | @permission_classes([IsAuthenticated])
40 | def testEndPoint(request):
41 | if request.method == 'GET':
42 | data = f"Congratulation {request.user}, your API just responded to GET request"
43 | return Response({'response': data}, status=status.HTTP_200_OK)
44 | elif request.method == 'POST':
45 | try:
46 | body = request.body.decode('utf-8')
47 | data = json.loads(body)
48 | if 'text' not in data:
49 | return Response("Invalid JSON data", status.HTTP_400_BAD_REQUEST)
50 | text = data.get('text')
51 | data = f'Congratulation your API just responded to POST request with text: {text}'
52 | return Response({'response': data}, status=status.HTTP_200_OK)
53 | except json.JSONDecodeError:
54 | return Response("Invalid JSON data", status.HTTP_400_BAD_REQUEST)
55 | return Response("Invalid JSON data", status.HTTP_400_BAD_REQUEST)
56 |
--------------------------------------------------------------------------------
/frontend/src/views/register.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from 'react';
2 | import { register } from '../utils/auth';
3 | import { useNavigate } from 'react-router-dom';
4 | import { useAuthStore } from '../store/auth';
5 |
6 | function Register() {
7 | const [username, setUsername] = useState('');
8 | const [password, setPassword] = useState('');
9 | const [password2, setPassword2] = useState('');
10 | const allUserData = useAuthStore((state) => state.allUserData);
11 | const navigate = useNavigate();
12 |
13 | useEffect(() => {
14 | if (allUserData !== null) {
15 | navigate('/');
16 | }
17 | }, [allUserData, navigate]);
18 |
19 | const resetForm = () => {
20 | setUsername('');
21 | setPassword('');
22 | setPassword2('');
23 | };
24 |
25 | const handleSubmit = async (e) => {
26 | e.preventDefault();
27 | const { error } = await register(username, password, password2);
28 | if (error) {
29 | alert(JSON.stringify(error));
30 | } else {
31 | navigate('/');
32 | resetForm();
33 | }
34 | };
35 |
36 | return (
37 |
77 | );
78 | }
79 |
80 | export default Register;
81 |
--------------------------------------------------------------------------------
/frontend/src/utils/auth.js:
--------------------------------------------------------------------------------
1 | import { useAuthStore } from '../store/auth';
2 | import axios from './axios';
3 | import { jwtDecode } from 'jwt-decode';
4 | import Cookies from 'js-cookie';
5 |
6 | export const login = async (username, password) => {
7 | try {
8 | const { data, status } = await axios.post('token/', {
9 | username,
10 | password,
11 | });
12 | if (status === 200) {
13 | setAuthUser(data.access, data.refresh);
14 | }
15 | return { data, error: null };
16 | } catch (error) {
17 | return {
18 | data: null,
19 | error: error.response.data?.detail || 'Something went wrong',
20 | };
21 | }
22 | };
23 |
24 | export const register = async (username, password, password2) => {
25 | try {
26 | const { data } = await axios.post('register/', {
27 | username,
28 | password,
29 | password2,
30 | });
31 | await login(username, password);
32 | return { data, error: null };
33 | } catch (error) {
34 | return {
35 | data: null,
36 | error: error.response.data || 'Something went wrong',
37 | };
38 | }
39 | };
40 |
41 | export const logout = () => {
42 | Cookies.remove('access_token');
43 | Cookies.remove('refresh_token');
44 | useAuthStore.getState().setUser(null);
45 | };
46 |
47 | export const setUser = async () => {
48 | // ON PAGE LOAD
49 | const accessToken = Cookies.get('access_token');
50 | const refreshToken = Cookies.get('refresh_token');
51 | if (!accessToken || !refreshToken) {
52 | return;
53 | }
54 | if (isAccessTokenExpired(accessToken)) {
55 | const response = await getRefreshToken(refreshToken);
56 | setAuthUser(response.access, response.refresh);
57 | } else {
58 | setAuthUser(accessToken, refreshToken);
59 | }
60 | };
61 |
62 | export const setAuthUser = (access_token, refresh_token) => {
63 | Cookies.set('access_token', access_token, {
64 | expires: 1,
65 | secure: true,
66 | });
67 |
68 | Cookies.set('refresh_token', refresh_token, {
69 | expires: 7,
70 | secure: true,
71 | });
72 |
73 | const user = jwtDecode(access_token) ?? null;
74 |
75 | if (user) {
76 | useAuthStore.getState().setUser(user);
77 | }
78 | useAuthStore.getState().setLoading(false);
79 | };
80 |
81 | export const getRefreshToken = async () => {
82 | const refresh_token = Cookies.get('refresh_token');
83 | const response = await axios.post('token/refresh/', {
84 | refresh: refresh_token,
85 | });
86 | return response.data;
87 | };
88 |
89 | export const isAccessTokenExpired = (accessToken) => {
90 | try {
91 | const decodedToken = jwtDecode(accessToken);
92 | return decodedToken.exp < Date.now() / 1000;
93 | } catch {
94 | return true; // Token is invalid or expired
95 | }
96 | };
97 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Django Rest Auth with React Vite - 2025
2 |
3 | ## Steps for Running Project
4 |
5 | ### Requirements
6 |
7 | - **Python 3.9+**
8 | - **Node.js 18+**
9 | - **pnpm** (install with: `npm install -g pnpm`)
10 | - **git**
11 |
12 | ### Clone the repository:
13 |
14 | - Create a empty folder and `cd` into that folder.
15 | - Type the following command to clone project in same directory.
16 |
17 | ```bash
18 | git clone https://github.com/sushil-kamble/django-react-auth.git .
19 | ```
20 |
21 | ## Backend
22 |
23 | ### 1. Go to the root folder and perform the following commands:
24 |
25 | `cd backend/`
26 |
27 | ### 2. Create and activate the virtual environment
28 |
29 | ```bash
30 | python -m venv venv
31 | venv\Scripts\activate
32 | ```
33 |
34 | > If their is any error activating virtual env, please google search it for your system or try `venv\bin\activate` or `source venv/bin/activate`
35 |
36 | ### 3. Install required packages
37 |
38 | ```bash
39 | pip install -r requirements.txt
40 | ```
41 |
42 | ### 4. Run the server
43 |
44 | ```bash
45 | python manage.py migrate
46 | python manage.py runserver
47 | ```
48 |
49 | ## Frontend
50 |
51 | - Head back to the root folder
52 | - Enter in `cd frontend/`
53 |
54 | ### 1. Installing packages
55 |
56 | ```bash
57 | pnpm install
58 | ```
59 |
60 | ### 2. Run the application
61 |
62 | ```bash
63 | pnpm run dev
64 | ```
65 |
66 | > Make sure both frontend and backend are running.
67 |
68 | > Make sure both frontend and backend are running.
69 |
70 | ## Styling (Recommended)
71 |
72 | For enhanced styling with Tailwind CSS and shadcn/ui components, it is recommended to switch to the `feature/tailwind-shadcn-ui` branch:
73 |
74 | ```bash
75 | git checkout feature/tailwind-shadcn-ui
76 | ```
77 |
78 | This branch includes modern UI components and better styling architecture for the frontend.
79 |
80 | ## Recent Major Upgrades (2025)
81 |
82 | This project has been upgraded to use the latest stable versions of all dependencies:
83 |
84 | ### Backend Updates
85 | - **Django**: 4.2 → 5.1.4 (latest stable)
86 | - **djangorestframework**: 3.14.0 → 3.15.2
87 | - **django-cors-headers**: 3.14.0 → 4.5.0
88 | - **PyJWT**: 2.6.0 → 2.10.1
89 | - All other Python packages updated to latest compatible versions
90 |
91 | ### Frontend Updates
92 | - **React**: 18.2.0 → 18.3.1
93 | - **Vite**: 4.3.2 → 6.3.5 (major upgrade)
94 | - **ESLint**: 8.x → 9.x (flat config migration)
95 | - **React Router**: 6.10.0 → 6.30.1
96 | - **Zustand**: 4.x → 5.x
97 | - **jwt-decode**: 3.x → 4.x (breaking change handled)
98 | - **Prettier**: 2.x → 3.x
99 | - Package manager standardized to **pnpm**
100 |
101 | ### Key Improvements
102 | - Enhanced build performance with Vite 6
103 | - Modern ESLint flat configuration
104 | - Updated security patches across all dependencies
105 | - Better development experience with latest tooling
106 | - Improved TypeScript support
107 |
108 | ## Reinitailize git repository
109 |
110 | - Delete `.git` folder in project root
111 | > Make sure you turn on the "Show hidden files, folders and disks" option.
112 | - `git init`
113 |
--------------------------------------------------------------------------------
/backend/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | share/python-wheels/
24 | *.egg-info/
25 | .installed.cfg
26 | *.egg
27 | MANIFEST
28 |
29 | # PyInstaller
30 | # Usually these files are written by a python script from a template
31 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
32 | *.manifest
33 | *.spec
34 |
35 | # Installer logs
36 | pip-log.txt
37 | pip-delete-this-directory.txt
38 |
39 | # Unit test / coverage reports
40 | htmlcov/
41 | .tox/
42 | .nox/
43 | .coverage
44 | .coverage.*
45 | .cache
46 | nosetests.xml
47 | coverage.xml
48 | *.cover
49 | *.py,cover
50 | .hypothesis/
51 | .pytest_cache/
52 | cover/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | .pybuilder/
76 | target/
77 |
78 | # Jupyter Notebook
79 | .ipynb_checkpoints
80 |
81 | # IPython
82 | profile_default/
83 | ipython_config.py
84 |
85 | # pyenv
86 | # For a library or package, you might want to ignore these files since the code is
87 | # intended to run in multiple environments; otherwise, check them in:
88 | # .python-version
89 |
90 | # pipenv
91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
94 | # install all needed dependencies.
95 | #Pipfile.lock
96 |
97 | # poetry
98 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99 | # This is especially recommended for binary packages to ensure reproducibility, and is more
100 | # commonly ignored for libraries.
101 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102 | #poetry.lock
103 |
104 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
105 | __pypackages__/
106 |
107 | # Celery stuff
108 | celerybeat-schedule
109 | celerybeat.pid
110 |
111 | # SageMath parsed files
112 | *.sage.py
113 |
114 | # Environments
115 | .env
116 | .venv
117 | env/
118 | venv/
119 | ENV/
120 | env.bak/
121 | venv.bak/
122 |
123 | # Spyder project settings
124 | .spyderproject
125 | .spyproject
126 |
127 | # Rope project settings
128 | .ropeproject
129 |
130 | # mkdocs documentation
131 | /site
132 |
133 | # mypy
134 | .mypy_cache/
135 | .dmypy.json
136 | dmypy.json
137 |
138 | # Pyre type checker
139 | .pyre/
140 |
141 | # pytype static type analyzer
142 | .pytype/
143 |
144 | # Cython debug symbols
145 | cython_debug/
146 |
147 | # PyCharm
148 | # JetBrains specific template is maintainted in a separate JetBrains.gitignore that can
149 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
150 | # and can be added to the global gitignore or merged into this file. For a more nuclear
151 | # option (not recommended) you can uncomment the following to ignore the entire idea folder.
152 | .idea/
--------------------------------------------------------------------------------
/frontend/src/assets/react.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/backend/backend/settings.py:
--------------------------------------------------------------------------------
1 | """
2 | Django settings for backend project.
3 |
4 | Generated by 'django-admin startproject' using Django 4.0.1.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/4.0/topics/settings/
8 |
9 | For the full list of settings and their values, see
10 | https://docs.djangoproject.com/en/4.0/ref/settings/
11 | """
12 |
13 | from pathlib import Path
14 | from datetime import timedelta
15 |
16 | # Build paths inside the project like this: BASE_DIR / 'subdir'.
17 | BASE_DIR = Path(__file__).resolve().parent.parent
18 |
19 |
20 | # Quick-start development settings - unsuitable for production
21 | # See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/
22 |
23 | # SECURITY WARNING: keep the secret key used in production secret!
24 | SECRET_KEY = 'django-insecure-xmyy56c+#c$!7u^#8#&(egh&2_+or##y4+t)xps)i#zbhlw(5o'
25 |
26 | # SECURITY WARNING: don't run with debug turned on in production!
27 | DEBUG = True
28 |
29 | ALLOWED_HOSTS = []
30 |
31 |
32 | # Application definition
33 |
34 | INSTALLED_APPS = [
35 | 'django.contrib.admin',
36 | 'django.contrib.auth',
37 | 'django.contrib.contenttypes',
38 | 'django.contrib.sessions',
39 | 'django.contrib.messages',
40 | 'django.contrib.staticfiles',
41 | 'rest_framework',
42 | 'rest_framework_simplejwt.token_blacklist',
43 | 'corsheaders',
44 | 'api',
45 | ]
46 |
47 | MIDDLEWARE = [
48 | 'django.middleware.security.SecurityMiddleware',
49 | 'corsheaders.middleware.CorsMiddleware',
50 | 'django.contrib.sessions.middleware.SessionMiddleware',
51 | 'django.middleware.common.CommonMiddleware',
52 | 'django.middleware.csrf.CsrfViewMiddleware',
53 | 'django.contrib.auth.middleware.AuthenticationMiddleware',
54 | 'django.contrib.messages.middleware.MessageMiddleware',
55 | 'django.middleware.clickjacking.XFrameOptionsMiddleware',
56 | ]
57 |
58 | ROOT_URLCONF = 'backend.urls'
59 |
60 | TEMPLATES = [
61 | {
62 | 'BACKEND': 'django.template.backends.django.DjangoTemplates',
63 | 'DIRS': [BASE_DIR / 'templates'],
64 | 'APP_DIRS': True,
65 | 'OPTIONS': {
66 | 'context_processors': [
67 | 'django.template.context_processors.debug',
68 | 'django.template.context_processors.request',
69 | 'django.contrib.auth.context_processors.auth',
70 | 'django.contrib.messages.context_processors.messages',
71 | ],
72 | },
73 | },
74 | ]
75 |
76 | WSGI_APPLICATION = 'backend.wsgi.application'
77 |
78 |
79 | # Database
80 | # https://docs.djangoproject.com/en/4.0/ref/settings/#databases
81 |
82 | DATABASES = {
83 | 'default': {
84 | 'ENGINE': 'django.db.backends.sqlite3',
85 | 'NAME': BASE_DIR / 'db.sqlite3',
86 | }
87 | }
88 |
89 |
90 | # Password validation
91 | # https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators
92 |
93 | AUTH_PASSWORD_VALIDATORS = [
94 | {
95 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
96 | },
97 | {
98 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
99 | },
100 | {
101 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
102 | },
103 | {
104 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
105 | },
106 | ]
107 |
108 | REST_FRAMEWORK = {
109 | 'DEFAULT_AUTHENTICATION_CLASSES': (
110 | 'rest_framework_simplejwt.authentication.JWTAuthentication',
111 | )
112 | }
113 |
114 | SIMPLE_JWT = {
115 | 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
116 | 'REFRESH_TOKEN_LIFETIME': timedelta(days=50),
117 | 'ROTATE_REFRESH_TOKENS': True,
118 | 'BLACKLIST_AFTER_ROTATION': True,
119 | 'UPDATE_LAST_LOGIN': False,
120 |
121 | 'ALGORITHM': 'HS256',
122 |
123 | 'VERIFYING_KEY': None,
124 | 'AUDIENCE': None,
125 | 'ISSUER': None,
126 | 'JWK_URL': None,
127 | 'LEEWAY': 0,
128 |
129 | 'AUTH_HEADER_TYPES': ('Bearer',),
130 | 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
131 | 'USER_ID_FIELD': 'id',
132 | 'USER_ID_CLAIM': 'user_id',
133 | 'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',
134 |
135 | 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
136 | 'TOKEN_TYPE_CLAIM': 'token_type',
137 | 'TOKEN_USER_CLASS': 'rest_framework_simplejwt.models.TokenUser',
138 |
139 | 'JTI_CLAIM': 'jti',
140 |
141 | 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
142 | 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
143 | 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
144 | }
145 |
146 | CORS_ALLOW_ALL_ORIGINS = True
147 |
148 | # Internationalization
149 | # https://docs.djangoproject.com/en/4.0/topics/i18n/
150 |
151 | LANGUAGE_CODE = 'en-us'
152 |
153 | TIME_ZONE = 'UTC'
154 |
155 | USE_I18N = True
156 |
157 | USE_TZ = True
158 |
159 |
160 | # Static files (CSS, JavaScript, Images)
161 | # https://docs.djangoproject.com/en/4.0/howto/static-files/
162 |
163 | STATIC_URL = 'static/'
164 |
165 | # Default primary key field type
166 | # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
167 |
168 | DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
169 |
--------------------------------------------------------------------------------
/UPGRADE_PLAN.md:
--------------------------------------------------------------------------------
1 | # Django-React Authentication Project - Dependency Upgrade Plan
2 |
3 | ## Project Overview
4 |
5 | This document outlines a comprehensive strategy for upgrading all dependencies in the Django-React authentication project to their latest stable versions, including major version updates where appropriate.
6 |
7 | ## Current State Analysis
8 |
9 | ### Backend (Django)
10 | - **Django**: 4.2 (current LTS)
11 | - **djangorestframework**: 3.14.0
12 | - **django-cors-headers**: 3.14.0
13 | - **djangorestframework-simplejwt**: 5.3.0+
14 | - **PyJWT**: 2.6.0
15 | - **Database**: SQLite (development)
16 |
17 | ### Frontend (React + Vite)
18 | - **React**: 18.2.0
19 | - **Vite**: 4.3.2
20 | - **React Router**: 6.10.0
21 | - **Axios**: 1.4.0
22 | - **Package Manager**: Mixed (yarn.lock + pnpm-lock.yaml) → **Target: pnpm only**
23 |
24 | ## Upgrade Strategy
25 |
26 | ### Phase 1: Backend Dependency Upgrades
27 |
28 | #### 1.1 Python Package Updates
29 | ```bash
30 | # Target versions for requirements.txt
31 | Django==5.1.* # 4.2 → 5.1 (major upgrade)
32 | djangorestframework==3.15.* # 3.14.0 → 3.15.x
33 | django-cors-headers==4.5.* # 3.14.0 → 4.5.x
34 | djangorestframework-simplejwt==5.3.* # Latest stable
35 | PyJWT==2.10.* # 2.6.0 → 2.10.x
36 | asgiref==3.8.* # 3.6.0 → 3.8.x
37 | pytz==2024.* # 2023.3 → 2024.x
38 | sqlparse==0.5.* # 0.4.3 → 0.5.x
39 | ```
40 |
41 | #### 1.2 Django 5.1 Breaking Changes to Address
42 | 1. **URL patterns**: Update deprecated `url()` usage to `path()`
43 | 2. **Middleware**: Verify middleware order and compatibility
44 | 3. **Settings**: Review deprecated settings and update
45 | 4. **Database**: Check for migration compatibility
46 | 5. **Security**: Update CORS and security settings
47 |
48 | #### 1.3 Implementation Steps
49 | ```bash
50 | # 1. Create backup
51 | cp requirements.txt requirements.txt.backup
52 |
53 | # 2. Update requirements.txt with new versions
54 | # 3. Create new virtual environment
55 | python -m venv venv_new
56 | source venv_new/bin/activate # or venv_new\Scripts\activate on Windows
57 |
58 | # 4. Install updated dependencies
59 | pip install -r requirements.txt
60 |
61 | # 5. Run Django checks
62 | python manage.py check
63 | python manage.py makemigrations
64 | python manage.py migrate
65 |
66 | # 6. Test API endpoints
67 | python manage.py test
68 | python manage.py runserver
69 | ```
70 |
71 | ### Phase 2: Frontend Dependency Upgrades
72 |
73 | #### 2.1 Package Manager Cleanup
74 | ```bash
75 | # Remove yarn.lock to standardize on pnpm
76 | rm frontend/yarn.lock
77 |
78 | # Update package.json scripts for pnpm
79 | # Update README.md installation instructions
80 | ```
81 |
82 | #### 2.2 Major Framework Updates
83 | ```json
84 | {
85 | "dependencies": {
86 | "react": "^18.3.1", // 18.2.0 → 18.3.1
87 | "react-dom": "^18.3.1", // 18.2.0 → 18.3.1
88 | "react-router-dom": "^6.28.0", // 6.10.0 → 6.28.0
89 | "axios": "^1.7.8", // 1.4.0 → 1.7.8
90 | "zustand": "^5.0.1", // 4.3.8 → 5.0.1
91 | "jwt-decode": "^4.0.0", // 3.1.2 → 4.0.0
92 | "dayjs": "^1.11.13", // 1.11.7 → 1.11.13
93 | "js-cookie": "^3.0.5" // Already latest
94 | },
95 | "devDependencies": {
96 | "vite": "^6.0.1", // 4.3.2 → 6.0.1 (major)
97 | "@vitejs/plugin-react": "^4.3.4", // 4.0.0 → 4.3.4
98 | "eslint": "^9.15.0", // 8.38.0 → 9.15.0 (major)
99 | "prettier": "^3.3.3", // 2.8.8 → 3.3.3 (major)
100 | "@types/react": "^18.3.12", // 18.0.28 → 18.3.12
101 | "@types/react-dom": "^18.3.1" // 18.0.11 → 18.3.1
102 | }
103 | }
104 | ```
105 |
106 | #### 2.3 Breaking Changes to Handle
107 |
108 | **Vite 6 Changes:**
109 | - Update `vite.config.js` for new plugin format
110 | - Check for deprecated configuration options
111 | - Verify HMR functionality
112 |
113 | **ESLint 9 Changes:**
114 | - Migrate to flat config format (`eslint.config.js`)
115 | - Update plugin configurations
116 | - Remove deprecated rules
117 |
118 | **React 18.3 Changes:**
119 | - Verify concurrent features compatibility
120 | - Check for deprecated lifecycle methods
121 | - Update development tools
122 |
123 | #### 2.4 Implementation Steps
124 | ```bash
125 | # 1. Backup current state
126 | cp package.json package.json.backup
127 | cp pnpm-lock.yaml pnpm-lock.yaml.backup
128 |
129 | # 2. Remove yarn.lock
130 | rm yarn.lock
131 |
132 | # 3. Update package.json with new versions
133 | # 4. Clear node_modules and reinstall
134 | rm -rf node_modules
135 | pnpm install
136 |
137 | # 5. Update configuration files
138 | # - Migrate ESLint to flat config
139 | # - Update Vite config for v6
140 | # - Verify Prettier config
141 |
142 | # 6. Test build and development
143 | pnpm run dev
144 | pnpm run build
145 | pnpm run lint
146 | ```
147 |
148 | ### Phase 3: Configuration File Updates
149 |
150 | #### 3.1 ESLint Migration (v8 → v9)
151 | Create new `eslint.config.js`:
152 | ```javascript
153 | import js from '@eslint/js'
154 | import react from 'eslint-plugin-react'
155 | import reactHooks from 'eslint-plugin-react-hooks'
156 | import reactRefresh from 'eslint-plugin-react-refresh'
157 |
158 | export default [
159 | js.configs.recommended,
160 | {
161 | files: ['**/*.{js,jsx}'],
162 | plugins: {
163 | react,
164 | 'react-hooks': reactHooks,
165 | 'react-refresh': reactRefresh,
166 | },
167 | rules: {
168 | // Migrate existing rules from .eslintrc.cjs
169 | 'react-refresh/only-export-components': 'warn',
170 | },
171 | },
172 | ]
173 | ```
174 |
175 | #### 3.2 Vite Configuration Update
176 | Update `vite.config.js` for Vite 6:
177 | ```javascript
178 | import { defineConfig } from 'vite'
179 | import react from '@vitejs/plugin-react'
180 |
181 | export default defineConfig({
182 | plugins: [react()],
183 | // Add any new Vite 6 specific configurations
184 | optimizeDeps: {
185 | // Update if needed for new dependencies
186 | },
187 | })
188 | ```
189 |
190 | #### 3.3 Django Settings Updates
191 | Review `backend/settings.py` for Django 5.1:
192 | ```python
193 | # Update deprecated settings
194 | # Verify CORS configuration
195 | # Check middleware order
196 | # Update security settings if needed
197 | ```
198 |
199 | ### Phase 4: Testing and Validation
200 |
201 | #### 4.1 Backend Testing
202 | ```bash
203 | # 1. Django system checks
204 | python manage.py check --deploy
205 |
206 | # 2. Database migrations
207 | python manage.py showmigrations
208 | python manage.py migrate
209 |
210 | # 3. Run tests
211 | python manage.py test
212 |
213 | # 4. Manual API testing
214 | # - User registration
215 | # - User login
216 | # - Protected routes
217 | # - Token refresh
218 | ```
219 |
220 | #### 4.2 Frontend Testing
221 | ```bash
222 | # 1. Development server
223 | pnpm run dev
224 |
225 | # 2. Production build
226 | pnpm run build
227 | pnpm run preview
228 |
229 | # 3. Linting
230 | pnpm run lint
231 |
232 | # 4. Manual testing
233 | # - Login/logout flow
234 | # - Protected routes
235 | # - API integration
236 | # - Component rendering
237 | ```
238 |
239 | #### 4.3 Integration Testing
240 | - Test full authentication flow
241 | - Verify CORS functionality
242 | - Check API endpoint responses
243 | - Validate JWT token handling
244 |
245 | ### Phase 5: Documentation Updates
246 |
247 | #### 5.1 README.md Updates
248 | ```markdown
249 | ## Frontend Installation (Updated)
250 |
251 | ### Prerequisites
252 | - Node.js 18+
253 | - pnpm (install with: npm install -g pnpm)
254 |
255 | ### Installation
256 | ```bash
257 | cd frontend/
258 | pnpm install
259 | pnpm run dev
260 | ```
261 |
262 | #### 5.2 Version Documentation
263 | Create or update version compatibility notes:
264 | - Python 3.9+ required
265 | - Node.js 18+ required
266 | - Django 5.1 features and changes
267 | - React 18.3 concurrent features
268 |
269 | ## Risk Assessment and Mitigation
270 |
271 | ### High Risk Areas
272 | 1. **Vite 4 → 6**: Major version jump with potential breaking changes
273 | 2. **ESLint 8 → 9**: Complete configuration format change
274 | 3. **Django 4.2 → 5.1**: Multiple versions with accumulated changes
275 | 4. **jwt-decode 3 → 4**: API changes in JWT handling
276 |
277 | ### Mitigation Strategies
278 | 1. **Backup Strategy**: Keep backups of all configuration files
279 | 2. **Rollback Plan**: Document rollback steps for each phase
280 | 3. **Incremental Testing**: Test after each major upgrade
281 | 4. **Environment Isolation**: Use new virtual environments
282 |
283 | ### Rollback Procedures
284 | ```bash
285 | # Backend rollback
286 | cp requirements.txt.backup requirements.txt
287 | pip install -r requirements.txt
288 |
289 | # Frontend rollback
290 | cp package.json.backup package.json
291 | cp pnpm-lock.yaml.backup pnpm-lock.yaml
292 | pnpm install
293 | ```
294 |
295 | ## Expected Benefits
296 |
297 | ### Performance Improvements
298 | - **Vite 6**: Enhanced build performance and HMR
299 | - **React 18.3**: Better concurrent rendering
300 | - **Django 5.1**: Improved ORM and async support
301 |
302 | ### Security Enhancements
303 | - Latest security patches across all dependencies
304 | - Updated authentication libraries
305 | - Modern security best practices
306 |
307 | ### Developer Experience
308 | - Better TypeScript support
309 | - Improved debugging tools
310 | - Enhanced development server features
311 | - Modern tooling configurations
312 |
313 | ## Implementation Timeline
314 |
315 | ### Phase 1-2: Core Upgrades (2-3 hours)
316 | - Backend dependency updates
317 | - Frontend framework upgrades
318 |
319 | ### Phase 3: Configuration (1-2 hours)
320 | - ESLint migration
321 | - Vite configuration
322 | - Django settings review
323 |
324 | ### Phase 4: Testing (2-3 hours)
325 | - Comprehensive testing
326 | - Integration verification
327 | - Performance validation
328 |
329 | ### Phase 5: Documentation (1 hour)
330 | - README updates
331 | - Migration notes
332 | - Version documentation
333 |
334 | **Total Estimated Time: 6-9 hours**
335 |
336 | ## Success Criteria
337 |
338 | ✅ All dependencies updated to latest stable versions
339 | ✅ No breaking functionality in authentication flow
340 | ✅ Build processes working correctly
341 | ✅ All tests passing
342 | ✅ Documentation updated
343 | ✅ Development and production environments functional
344 |
345 | ## Next Steps
346 |
347 | 1. Review and approve this upgrade plan
348 | 2. Switch to Code mode for implementation
349 | 3. Execute upgrades phase by phase
350 | 4. Validate each phase before proceeding
351 | 5. Update documentation and commit changes
352 |
353 | ---
354 |
355 | *This upgrade plan ensures a systematic approach to modernizing the Django-React authentication project while minimizing risks and maintaining functionality.*
--------------------------------------------------------------------------------
/frontend/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | axios:
12 | specifier: ^1.7.8
13 | version: 1.9.0
14 | dayjs:
15 | specifier: ^1.11.13
16 | version: 1.11.13
17 | js-cookie:
18 | specifier: ^3.0.5
19 | version: 3.0.5
20 | jwt-decode:
21 | specifier: ^4.0.0
22 | version: 4.0.0
23 | react:
24 | specifier: ^18.3.1
25 | version: 18.3.1
26 | react-dom:
27 | specifier: ^18.3.1
28 | version: 18.3.1(react@18.3.1)
29 | react-router-dom:
30 | specifier: ^6.28.0
31 | version: 6.30.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
32 | zustand:
33 | specifier: ^5.0.1
34 | version: 5.0.5(@types/react@18.3.22)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1))
35 | devDependencies:
36 | '@babel/core':
37 | specifier: ^7.27.1
38 | version: 7.27.1
39 | '@babel/eslint-parser':
40 | specifier: ^7.27.1
41 | version: 7.27.1(@babel/core@7.27.1)(eslint@9.27.0)
42 | '@babel/preset-react':
43 | specifier: ^7.27.1
44 | version: 7.27.1(@babel/core@7.27.1)
45 | '@types/react':
46 | specifier: ^18.3.12
47 | version: 18.3.22
48 | '@types/react-dom':
49 | specifier: ^18.3.1
50 | version: 18.3.7(@types/react@18.3.22)
51 | '@vitejs/plugin-react':
52 | specifier: ^4.3.4
53 | version: 4.5.0(vite@6.3.5)
54 | eslint:
55 | specifier: ^9.15.0
56 | version: 9.27.0
57 | eslint-plugin-react:
58 | specifier: ^7.37.2
59 | version: 7.37.5(eslint@9.27.0)
60 | eslint-plugin-react-hooks:
61 | specifier: ^5.0.0
62 | version: 5.2.0(eslint@9.27.0)
63 | eslint-plugin-react-refresh:
64 | specifier: ^0.4.14
65 | version: 0.4.20(eslint@9.27.0)
66 | globals:
67 | specifier: ^16.1.0
68 | version: 16.1.0
69 | prettier:
70 | specifier: ^3.3.3
71 | version: 3.5.3
72 | simple-zustand-devtools:
73 | specifier: ^1.1.0
74 | version: 1.1.0(@types/react-dom@18.3.7(@types/react@18.3.22))(@types/react@18.3.22)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zustand@5.0.5(@types/react@18.3.22)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)))
75 | vite:
76 | specifier: ^6.0.1
77 | version: 6.3.5
78 |
79 | packages:
80 |
81 | '@ampproject/remapping@2.3.0':
82 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
83 | engines: {node: '>=6.0.0'}
84 |
85 | '@babel/code-frame@7.27.1':
86 | resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
87 | engines: {node: '>=6.9.0'}
88 |
89 | '@babel/compat-data@7.27.2':
90 | resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==}
91 | engines: {node: '>=6.9.0'}
92 |
93 | '@babel/core@7.27.1':
94 | resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==}
95 | engines: {node: '>=6.9.0'}
96 |
97 | '@babel/eslint-parser@7.27.1':
98 | resolution: {integrity: sha512-q8rjOuadH0V6Zo4XLMkJ3RMQ9MSBqwaDByyYB0izsYdaIWGNLmEblbCOf1vyFHICcg16CD7Fsi51vcQnYxmt6Q==}
99 | engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
100 | peerDependencies:
101 | '@babel/core': ^7.11.0
102 | eslint: ^7.5.0 || ^8.0.0 || ^9.0.0
103 |
104 | '@babel/generator@7.27.1':
105 | resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==}
106 | engines: {node: '>=6.9.0'}
107 |
108 | '@babel/helper-annotate-as-pure@7.27.1':
109 | resolution: {integrity: sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==}
110 | engines: {node: '>=6.9.0'}
111 |
112 | '@babel/helper-compilation-targets@7.27.2':
113 | resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
114 | engines: {node: '>=6.9.0'}
115 |
116 | '@babel/helper-module-imports@7.27.1':
117 | resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
118 | engines: {node: '>=6.9.0'}
119 |
120 | '@babel/helper-module-transforms@7.27.1':
121 | resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==}
122 | engines: {node: '>=6.9.0'}
123 | peerDependencies:
124 | '@babel/core': ^7.0.0
125 |
126 | '@babel/helper-plugin-utils@7.27.1':
127 | resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
128 | engines: {node: '>=6.9.0'}
129 |
130 | '@babel/helper-string-parser@7.27.1':
131 | resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
132 | engines: {node: '>=6.9.0'}
133 |
134 | '@babel/helper-validator-identifier@7.27.1':
135 | resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
136 | engines: {node: '>=6.9.0'}
137 |
138 | '@babel/helper-validator-option@7.27.1':
139 | resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
140 | engines: {node: '>=6.9.0'}
141 |
142 | '@babel/helpers@7.27.1':
143 | resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==}
144 | engines: {node: '>=6.9.0'}
145 |
146 | '@babel/parser@7.27.2':
147 | resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==}
148 | engines: {node: '>=6.0.0'}
149 | hasBin: true
150 |
151 | '@babel/plugin-syntax-jsx@7.27.1':
152 | resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
153 | engines: {node: '>=6.9.0'}
154 | peerDependencies:
155 | '@babel/core': ^7.0.0-0
156 |
157 | '@babel/plugin-transform-react-display-name@7.27.1':
158 | resolution: {integrity: sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==}
159 | engines: {node: '>=6.9.0'}
160 | peerDependencies:
161 | '@babel/core': ^7.0.0-0
162 |
163 | '@babel/plugin-transform-react-jsx-development@7.27.1':
164 | resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==}
165 | engines: {node: '>=6.9.0'}
166 | peerDependencies:
167 | '@babel/core': ^7.0.0-0
168 |
169 | '@babel/plugin-transform-react-jsx-self@7.27.1':
170 | resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
171 | engines: {node: '>=6.9.0'}
172 | peerDependencies:
173 | '@babel/core': ^7.0.0-0
174 |
175 | '@babel/plugin-transform-react-jsx-source@7.27.1':
176 | resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
177 | engines: {node: '>=6.9.0'}
178 | peerDependencies:
179 | '@babel/core': ^7.0.0-0
180 |
181 | '@babel/plugin-transform-react-jsx@7.27.1':
182 | resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==}
183 | engines: {node: '>=6.9.0'}
184 | peerDependencies:
185 | '@babel/core': ^7.0.0-0
186 |
187 | '@babel/plugin-transform-react-pure-annotations@7.27.1':
188 | resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==}
189 | engines: {node: '>=6.9.0'}
190 | peerDependencies:
191 | '@babel/core': ^7.0.0-0
192 |
193 | '@babel/preset-react@7.27.1':
194 | resolution: {integrity: sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==}
195 | engines: {node: '>=6.9.0'}
196 | peerDependencies:
197 | '@babel/core': ^7.0.0-0
198 |
199 | '@babel/template@7.27.2':
200 | resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
201 | engines: {node: '>=6.9.0'}
202 |
203 | '@babel/traverse@7.27.1':
204 | resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==}
205 | engines: {node: '>=6.9.0'}
206 |
207 | '@babel/types@7.27.1':
208 | resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==}
209 | engines: {node: '>=6.9.0'}
210 |
211 | '@esbuild/aix-ppc64@0.25.4':
212 | resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==}
213 | engines: {node: '>=18'}
214 | cpu: [ppc64]
215 | os: [aix]
216 |
217 | '@esbuild/android-arm64@0.25.4':
218 | resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==}
219 | engines: {node: '>=18'}
220 | cpu: [arm64]
221 | os: [android]
222 |
223 | '@esbuild/android-arm@0.25.4':
224 | resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==}
225 | engines: {node: '>=18'}
226 | cpu: [arm]
227 | os: [android]
228 |
229 | '@esbuild/android-x64@0.25.4':
230 | resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==}
231 | engines: {node: '>=18'}
232 | cpu: [x64]
233 | os: [android]
234 |
235 | '@esbuild/darwin-arm64@0.25.4':
236 | resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==}
237 | engines: {node: '>=18'}
238 | cpu: [arm64]
239 | os: [darwin]
240 |
241 | '@esbuild/darwin-x64@0.25.4':
242 | resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==}
243 | engines: {node: '>=18'}
244 | cpu: [x64]
245 | os: [darwin]
246 |
247 | '@esbuild/freebsd-arm64@0.25.4':
248 | resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==}
249 | engines: {node: '>=18'}
250 | cpu: [arm64]
251 | os: [freebsd]
252 |
253 | '@esbuild/freebsd-x64@0.25.4':
254 | resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==}
255 | engines: {node: '>=18'}
256 | cpu: [x64]
257 | os: [freebsd]
258 |
259 | '@esbuild/linux-arm64@0.25.4':
260 | resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==}
261 | engines: {node: '>=18'}
262 | cpu: [arm64]
263 | os: [linux]
264 |
265 | '@esbuild/linux-arm@0.25.4':
266 | resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==}
267 | engines: {node: '>=18'}
268 | cpu: [arm]
269 | os: [linux]
270 |
271 | '@esbuild/linux-ia32@0.25.4':
272 | resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==}
273 | engines: {node: '>=18'}
274 | cpu: [ia32]
275 | os: [linux]
276 |
277 | '@esbuild/linux-loong64@0.25.4':
278 | resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==}
279 | engines: {node: '>=18'}
280 | cpu: [loong64]
281 | os: [linux]
282 |
283 | '@esbuild/linux-mips64el@0.25.4':
284 | resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==}
285 | engines: {node: '>=18'}
286 | cpu: [mips64el]
287 | os: [linux]
288 |
289 | '@esbuild/linux-ppc64@0.25.4':
290 | resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==}
291 | engines: {node: '>=18'}
292 | cpu: [ppc64]
293 | os: [linux]
294 |
295 | '@esbuild/linux-riscv64@0.25.4':
296 | resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==}
297 | engines: {node: '>=18'}
298 | cpu: [riscv64]
299 | os: [linux]
300 |
301 | '@esbuild/linux-s390x@0.25.4':
302 | resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==}
303 | engines: {node: '>=18'}
304 | cpu: [s390x]
305 | os: [linux]
306 |
307 | '@esbuild/linux-x64@0.25.4':
308 | resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==}
309 | engines: {node: '>=18'}
310 | cpu: [x64]
311 | os: [linux]
312 |
313 | '@esbuild/netbsd-arm64@0.25.4':
314 | resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==}
315 | engines: {node: '>=18'}
316 | cpu: [arm64]
317 | os: [netbsd]
318 |
319 | '@esbuild/netbsd-x64@0.25.4':
320 | resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==}
321 | engines: {node: '>=18'}
322 | cpu: [x64]
323 | os: [netbsd]
324 |
325 | '@esbuild/openbsd-arm64@0.25.4':
326 | resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==}
327 | engines: {node: '>=18'}
328 | cpu: [arm64]
329 | os: [openbsd]
330 |
331 | '@esbuild/openbsd-x64@0.25.4':
332 | resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==}
333 | engines: {node: '>=18'}
334 | cpu: [x64]
335 | os: [openbsd]
336 |
337 | '@esbuild/sunos-x64@0.25.4':
338 | resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==}
339 | engines: {node: '>=18'}
340 | cpu: [x64]
341 | os: [sunos]
342 |
343 | '@esbuild/win32-arm64@0.25.4':
344 | resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==}
345 | engines: {node: '>=18'}
346 | cpu: [arm64]
347 | os: [win32]
348 |
349 | '@esbuild/win32-ia32@0.25.4':
350 | resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==}
351 | engines: {node: '>=18'}
352 | cpu: [ia32]
353 | os: [win32]
354 |
355 | '@esbuild/win32-x64@0.25.4':
356 | resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==}
357 | engines: {node: '>=18'}
358 | cpu: [x64]
359 | os: [win32]
360 |
361 | '@eslint-community/eslint-utils@4.7.0':
362 | resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
363 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
364 | peerDependencies:
365 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
366 |
367 | '@eslint-community/regexpp@4.12.1':
368 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
369 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
370 |
371 | '@eslint/config-array@0.20.0':
372 | resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
373 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
374 |
375 | '@eslint/config-helpers@0.2.2':
376 | resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==}
377 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
378 |
379 | '@eslint/core@0.14.0':
380 | resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
381 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
382 |
383 | '@eslint/eslintrc@3.3.1':
384 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
385 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
386 |
387 | '@eslint/js@9.27.0':
388 | resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==}
389 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
390 |
391 | '@eslint/object-schema@2.1.6':
392 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
393 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
394 |
395 | '@eslint/plugin-kit@0.3.1':
396 | resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==}
397 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
398 |
399 | '@humanfs/core@0.19.1':
400 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
401 | engines: {node: '>=18.18.0'}
402 |
403 | '@humanfs/node@0.16.6':
404 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
405 | engines: {node: '>=18.18.0'}
406 |
407 | '@humanwhocodes/module-importer@1.0.1':
408 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
409 | engines: {node: '>=12.22'}
410 |
411 | '@humanwhocodes/retry@0.3.1':
412 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
413 | engines: {node: '>=18.18'}
414 |
415 | '@humanwhocodes/retry@0.4.3':
416 | resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
417 | engines: {node: '>=18.18'}
418 |
419 | '@jridgewell/gen-mapping@0.3.8':
420 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
421 | engines: {node: '>=6.0.0'}
422 |
423 | '@jridgewell/resolve-uri@3.1.2':
424 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
425 | engines: {node: '>=6.0.0'}
426 |
427 | '@jridgewell/set-array@1.2.1':
428 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
429 | engines: {node: '>=6.0.0'}
430 |
431 | '@jridgewell/sourcemap-codec@1.5.0':
432 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
433 |
434 | '@jridgewell/trace-mapping@0.3.25':
435 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
436 |
437 | '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1':
438 | resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==}
439 |
440 | '@remix-run/router@1.23.0':
441 | resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==}
442 | engines: {node: '>=14.0.0'}
443 |
444 | '@rolldown/pluginutils@1.0.0-beta.9':
445 | resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==}
446 |
447 | '@rollup/rollup-android-arm-eabi@4.41.1':
448 | resolution: {integrity: sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==}
449 | cpu: [arm]
450 | os: [android]
451 |
452 | '@rollup/rollup-android-arm64@4.41.1':
453 | resolution: {integrity: sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==}
454 | cpu: [arm64]
455 | os: [android]
456 |
457 | '@rollup/rollup-darwin-arm64@4.41.1':
458 | resolution: {integrity: sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==}
459 | cpu: [arm64]
460 | os: [darwin]
461 |
462 | '@rollup/rollup-darwin-x64@4.41.1':
463 | resolution: {integrity: sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==}
464 | cpu: [x64]
465 | os: [darwin]
466 |
467 | '@rollup/rollup-freebsd-arm64@4.41.1':
468 | resolution: {integrity: sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==}
469 | cpu: [arm64]
470 | os: [freebsd]
471 |
472 | '@rollup/rollup-freebsd-x64@4.41.1':
473 | resolution: {integrity: sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==}
474 | cpu: [x64]
475 | os: [freebsd]
476 |
477 | '@rollup/rollup-linux-arm-gnueabihf@4.41.1':
478 | resolution: {integrity: sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==}
479 | cpu: [arm]
480 | os: [linux]
481 |
482 | '@rollup/rollup-linux-arm-musleabihf@4.41.1':
483 | resolution: {integrity: sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==}
484 | cpu: [arm]
485 | os: [linux]
486 |
487 | '@rollup/rollup-linux-arm64-gnu@4.41.1':
488 | resolution: {integrity: sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==}
489 | cpu: [arm64]
490 | os: [linux]
491 |
492 | '@rollup/rollup-linux-arm64-musl@4.41.1':
493 | resolution: {integrity: sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==}
494 | cpu: [arm64]
495 | os: [linux]
496 |
497 | '@rollup/rollup-linux-loongarch64-gnu@4.41.1':
498 | resolution: {integrity: sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==}
499 | cpu: [loong64]
500 | os: [linux]
501 |
502 | '@rollup/rollup-linux-powerpc64le-gnu@4.41.1':
503 | resolution: {integrity: sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==}
504 | cpu: [ppc64]
505 | os: [linux]
506 |
507 | '@rollup/rollup-linux-riscv64-gnu@4.41.1':
508 | resolution: {integrity: sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==}
509 | cpu: [riscv64]
510 | os: [linux]
511 |
512 | '@rollup/rollup-linux-riscv64-musl@4.41.1':
513 | resolution: {integrity: sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==}
514 | cpu: [riscv64]
515 | os: [linux]
516 |
517 | '@rollup/rollup-linux-s390x-gnu@4.41.1':
518 | resolution: {integrity: sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==}
519 | cpu: [s390x]
520 | os: [linux]
521 |
522 | '@rollup/rollup-linux-x64-gnu@4.41.1':
523 | resolution: {integrity: sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==}
524 | cpu: [x64]
525 | os: [linux]
526 |
527 | '@rollup/rollup-linux-x64-musl@4.41.1':
528 | resolution: {integrity: sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==}
529 | cpu: [x64]
530 | os: [linux]
531 |
532 | '@rollup/rollup-win32-arm64-msvc@4.41.1':
533 | resolution: {integrity: sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==}
534 | cpu: [arm64]
535 | os: [win32]
536 |
537 | '@rollup/rollup-win32-ia32-msvc@4.41.1':
538 | resolution: {integrity: sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==}
539 | cpu: [ia32]
540 | os: [win32]
541 |
542 | '@rollup/rollup-win32-x64-msvc@4.41.1':
543 | resolution: {integrity: sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==}
544 | cpu: [x64]
545 | os: [win32]
546 |
547 | '@types/babel__core@7.20.5':
548 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
549 |
550 | '@types/babel__generator@7.27.0':
551 | resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
552 |
553 | '@types/babel__template@7.4.4':
554 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
555 |
556 | '@types/babel__traverse@7.20.7':
557 | resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==}
558 |
559 | '@types/estree@1.0.7':
560 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
561 |
562 | '@types/json-schema@7.0.15':
563 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
564 |
565 | '@types/prop-types@15.7.14':
566 | resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
567 |
568 | '@types/react-dom@18.3.7':
569 | resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==}
570 | peerDependencies:
571 | '@types/react': ^18.0.0
572 |
573 | '@types/react@18.3.22':
574 | resolution: {integrity: sha512-vUhG0YmQZ7kL/tmKLrD3g5zXbXXreZXB3pmROW8bg3CnLnpjkRVwUlLne7Ufa2r9yJ8+/6B73RzhAek5TBKh2Q==}
575 |
576 | '@vitejs/plugin-react@4.5.0':
577 | resolution: {integrity: sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg==}
578 | engines: {node: ^14.18.0 || >=16.0.0}
579 | peerDependencies:
580 | vite: ^4.2.0 || ^5.0.0 || ^6.0.0
581 |
582 | acorn-jsx@5.3.2:
583 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
584 | peerDependencies:
585 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
586 |
587 | acorn@8.14.1:
588 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
589 | engines: {node: '>=0.4.0'}
590 | hasBin: true
591 |
592 | ajv@6.12.6:
593 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
594 |
595 | ansi-styles@4.3.0:
596 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
597 | engines: {node: '>=8'}
598 |
599 | argparse@2.0.1:
600 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
601 |
602 | array-buffer-byte-length@1.0.2:
603 | resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
604 | engines: {node: '>= 0.4'}
605 |
606 | array-includes@3.1.8:
607 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
608 | engines: {node: '>= 0.4'}
609 |
610 | array.prototype.findlast@1.2.5:
611 | resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
612 | engines: {node: '>= 0.4'}
613 |
614 | array.prototype.flat@1.3.3:
615 | resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
616 | engines: {node: '>= 0.4'}
617 |
618 | array.prototype.flatmap@1.3.3:
619 | resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
620 | engines: {node: '>= 0.4'}
621 |
622 | array.prototype.tosorted@1.1.4:
623 | resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
624 | engines: {node: '>= 0.4'}
625 |
626 | arraybuffer.prototype.slice@1.0.4:
627 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
628 | engines: {node: '>= 0.4'}
629 |
630 | async-function@1.0.0:
631 | resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
632 | engines: {node: '>= 0.4'}
633 |
634 | asynckit@0.4.0:
635 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
636 |
637 | available-typed-arrays@1.0.7:
638 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
639 | engines: {node: '>= 0.4'}
640 |
641 | axios@1.9.0:
642 | resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==}
643 |
644 | balanced-match@1.0.2:
645 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
646 |
647 | brace-expansion@1.1.11:
648 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
649 |
650 | browserslist@4.24.5:
651 | resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==}
652 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
653 | hasBin: true
654 |
655 | call-bind-apply-helpers@1.0.2:
656 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
657 | engines: {node: '>= 0.4'}
658 |
659 | call-bind@1.0.8:
660 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
661 | engines: {node: '>= 0.4'}
662 |
663 | call-bound@1.0.4:
664 | resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
665 | engines: {node: '>= 0.4'}
666 |
667 | callsites@3.1.0:
668 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
669 | engines: {node: '>=6'}
670 |
671 | caniuse-lite@1.0.30001718:
672 | resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==}
673 |
674 | chalk@4.1.2:
675 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
676 | engines: {node: '>=10'}
677 |
678 | color-convert@2.0.1:
679 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
680 | engines: {node: '>=7.0.0'}
681 |
682 | color-name@1.1.4:
683 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
684 |
685 | combined-stream@1.0.8:
686 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
687 | engines: {node: '>= 0.8'}
688 |
689 | concat-map@0.0.1:
690 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
691 |
692 | convert-source-map@2.0.0:
693 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
694 |
695 | cross-spawn@7.0.6:
696 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
697 | engines: {node: '>= 8'}
698 |
699 | csstype@3.1.3:
700 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
701 |
702 | data-view-buffer@1.0.2:
703 | resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
704 | engines: {node: '>= 0.4'}
705 |
706 | data-view-byte-length@1.0.2:
707 | resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
708 | engines: {node: '>= 0.4'}
709 |
710 | data-view-byte-offset@1.0.1:
711 | resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
712 | engines: {node: '>= 0.4'}
713 |
714 | dayjs@1.11.13:
715 | resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
716 |
717 | debug@4.4.1:
718 | resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
719 | engines: {node: '>=6.0'}
720 | peerDependencies:
721 | supports-color: '*'
722 | peerDependenciesMeta:
723 | supports-color:
724 | optional: true
725 |
726 | deep-is@0.1.4:
727 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
728 |
729 | define-data-property@1.1.4:
730 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
731 | engines: {node: '>= 0.4'}
732 |
733 | define-properties@1.2.1:
734 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
735 | engines: {node: '>= 0.4'}
736 |
737 | delayed-stream@1.0.0:
738 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
739 | engines: {node: '>=0.4.0'}
740 |
741 | doctrine@2.1.0:
742 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
743 | engines: {node: '>=0.10.0'}
744 |
745 | dunder-proto@1.0.1:
746 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
747 | engines: {node: '>= 0.4'}
748 |
749 | electron-to-chromium@1.5.157:
750 | resolution: {integrity: sha512-/0ybgsQd1muo8QlnuTpKwtl0oX5YMlUGbm8xyqgDU00motRkKFFbUJySAQBWcY79rVqNLWIWa87BGVGClwAB2w==}
751 |
752 | es-abstract@1.23.10:
753 | resolution: {integrity: sha512-MtUbM072wlJNyeYAe0mhzrD+M6DIJa96CZAOBBrhDbgKnB4MApIKefcyAB1eOdYn8cUNZgvwBvEzdoAYsxgEIw==}
754 | engines: {node: '>= 0.4'}
755 |
756 | es-define-property@1.0.1:
757 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
758 | engines: {node: '>= 0.4'}
759 |
760 | es-errors@1.3.0:
761 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
762 | engines: {node: '>= 0.4'}
763 |
764 | es-iterator-helpers@1.2.1:
765 | resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
766 | engines: {node: '>= 0.4'}
767 |
768 | es-object-atoms@1.1.1:
769 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
770 | engines: {node: '>= 0.4'}
771 |
772 | es-set-tostringtag@2.1.0:
773 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
774 | engines: {node: '>= 0.4'}
775 |
776 | es-shim-unscopables@1.1.0:
777 | resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
778 | engines: {node: '>= 0.4'}
779 |
780 | es-to-primitive@1.3.0:
781 | resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
782 | engines: {node: '>= 0.4'}
783 |
784 | esbuild@0.25.4:
785 | resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==}
786 | engines: {node: '>=18'}
787 | hasBin: true
788 |
789 | escalade@3.2.0:
790 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
791 | engines: {node: '>=6'}
792 |
793 | escape-string-regexp@4.0.0:
794 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
795 | engines: {node: '>=10'}
796 |
797 | eslint-plugin-react-hooks@5.2.0:
798 | resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
799 | engines: {node: '>=10'}
800 | peerDependencies:
801 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
802 |
803 | eslint-plugin-react-refresh@0.4.20:
804 | resolution: {integrity: sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==}
805 | peerDependencies:
806 | eslint: '>=8.40'
807 |
808 | eslint-plugin-react@7.37.5:
809 | resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
810 | engines: {node: '>=4'}
811 | peerDependencies:
812 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
813 |
814 | eslint-scope@5.1.1:
815 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
816 | engines: {node: '>=8.0.0'}
817 |
818 | eslint-scope@8.3.0:
819 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
820 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
821 |
822 | eslint-visitor-keys@2.1.0:
823 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
824 | engines: {node: '>=10'}
825 |
826 | eslint-visitor-keys@3.4.3:
827 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
828 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
829 |
830 | eslint-visitor-keys@4.2.0:
831 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
832 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
833 |
834 | eslint@9.27.0:
835 | resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==}
836 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
837 | hasBin: true
838 | peerDependencies:
839 | jiti: '*'
840 | peerDependenciesMeta:
841 | jiti:
842 | optional: true
843 |
844 | espree@10.3.0:
845 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
846 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
847 |
848 | esquery@1.6.0:
849 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
850 | engines: {node: '>=0.10'}
851 |
852 | esrecurse@4.3.0:
853 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
854 | engines: {node: '>=4.0'}
855 |
856 | estraverse@4.3.0:
857 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
858 | engines: {node: '>=4.0'}
859 |
860 | estraverse@5.3.0:
861 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
862 | engines: {node: '>=4.0'}
863 |
864 | esutils@2.0.3:
865 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
866 | engines: {node: '>=0.10.0'}
867 |
868 | fast-deep-equal@3.1.3:
869 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
870 |
871 | fast-json-stable-stringify@2.1.0:
872 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
873 |
874 | fast-levenshtein@2.0.6:
875 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
876 |
877 | fdir@6.4.4:
878 | resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}
879 | peerDependencies:
880 | picomatch: ^3 || ^4
881 | peerDependenciesMeta:
882 | picomatch:
883 | optional: true
884 |
885 | file-entry-cache@8.0.0:
886 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
887 | engines: {node: '>=16.0.0'}
888 |
889 | find-up@5.0.0:
890 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
891 | engines: {node: '>=10'}
892 |
893 | flat-cache@4.0.1:
894 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
895 | engines: {node: '>=16'}
896 |
897 | flatted@3.3.3:
898 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
899 |
900 | follow-redirects@1.15.9:
901 | resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
902 | engines: {node: '>=4.0'}
903 | peerDependencies:
904 | debug: '*'
905 | peerDependenciesMeta:
906 | debug:
907 | optional: true
908 |
909 | for-each@0.3.5:
910 | resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
911 | engines: {node: '>= 0.4'}
912 |
913 | form-data@4.0.2:
914 | resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
915 | engines: {node: '>= 6'}
916 |
917 | fsevents@2.3.3:
918 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
919 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
920 | os: [darwin]
921 |
922 | function-bind@1.1.2:
923 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
924 |
925 | function.prototype.name@1.1.8:
926 | resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
927 | engines: {node: '>= 0.4'}
928 |
929 | functions-have-names@1.2.3:
930 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
931 |
932 | gensync@1.0.0-beta.2:
933 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
934 | engines: {node: '>=6.9.0'}
935 |
936 | get-intrinsic@1.3.0:
937 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
938 | engines: {node: '>= 0.4'}
939 |
940 | get-proto@1.0.1:
941 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
942 | engines: {node: '>= 0.4'}
943 |
944 | get-symbol-description@1.1.0:
945 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
946 | engines: {node: '>= 0.4'}
947 |
948 | glob-parent@6.0.2:
949 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
950 | engines: {node: '>=10.13.0'}
951 |
952 | globals@11.12.0:
953 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
954 | engines: {node: '>=4'}
955 |
956 | globals@14.0.0:
957 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
958 | engines: {node: '>=18'}
959 |
960 | globals@16.1.0:
961 | resolution: {integrity: sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==}
962 | engines: {node: '>=18'}
963 |
964 | globalthis@1.0.4:
965 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
966 | engines: {node: '>= 0.4'}
967 |
968 | gopd@1.2.0:
969 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
970 | engines: {node: '>= 0.4'}
971 |
972 | has-bigints@1.1.0:
973 | resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
974 | engines: {node: '>= 0.4'}
975 |
976 | has-flag@4.0.0:
977 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
978 | engines: {node: '>=8'}
979 |
980 | has-property-descriptors@1.0.2:
981 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
982 |
983 | has-proto@1.2.0:
984 | resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
985 | engines: {node: '>= 0.4'}
986 |
987 | has-symbols@1.1.0:
988 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
989 | engines: {node: '>= 0.4'}
990 |
991 | has-tostringtag@1.0.2:
992 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
993 | engines: {node: '>= 0.4'}
994 |
995 | hasown@2.0.2:
996 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
997 | engines: {node: '>= 0.4'}
998 |
999 | ignore@5.3.2:
1000 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
1001 | engines: {node: '>= 4'}
1002 |
1003 | import-fresh@3.3.1:
1004 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
1005 | engines: {node: '>=6'}
1006 |
1007 | imurmurhash@0.1.4:
1008 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1009 | engines: {node: '>=0.8.19'}
1010 |
1011 | internal-slot@1.1.0:
1012 | resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
1013 | engines: {node: '>= 0.4'}
1014 |
1015 | is-array-buffer@3.0.5:
1016 | resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
1017 | engines: {node: '>= 0.4'}
1018 |
1019 | is-async-function@2.1.1:
1020 | resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
1021 | engines: {node: '>= 0.4'}
1022 |
1023 | is-bigint@1.1.0:
1024 | resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
1025 | engines: {node: '>= 0.4'}
1026 |
1027 | is-boolean-object@1.2.2:
1028 | resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
1029 | engines: {node: '>= 0.4'}
1030 |
1031 | is-callable@1.2.7:
1032 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
1033 | engines: {node: '>= 0.4'}
1034 |
1035 | is-core-module@2.16.1:
1036 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
1037 | engines: {node: '>= 0.4'}
1038 |
1039 | is-data-view@1.0.2:
1040 | resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
1041 | engines: {node: '>= 0.4'}
1042 |
1043 | is-date-object@1.1.0:
1044 | resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
1045 | engines: {node: '>= 0.4'}
1046 |
1047 | is-extglob@2.1.1:
1048 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1049 | engines: {node: '>=0.10.0'}
1050 |
1051 | is-finalizationregistry@1.1.1:
1052 | resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
1053 | engines: {node: '>= 0.4'}
1054 |
1055 | is-generator-function@1.1.0:
1056 | resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
1057 | engines: {node: '>= 0.4'}
1058 |
1059 | is-glob@4.0.3:
1060 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1061 | engines: {node: '>=0.10.0'}
1062 |
1063 | is-map@2.0.3:
1064 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
1065 | engines: {node: '>= 0.4'}
1066 |
1067 | is-number-object@1.1.1:
1068 | resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
1069 | engines: {node: '>= 0.4'}
1070 |
1071 | is-regex@1.2.1:
1072 | resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
1073 | engines: {node: '>= 0.4'}
1074 |
1075 | is-set@2.0.3:
1076 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
1077 | engines: {node: '>= 0.4'}
1078 |
1079 | is-shared-array-buffer@1.0.4:
1080 | resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
1081 | engines: {node: '>= 0.4'}
1082 |
1083 | is-string@1.1.1:
1084 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
1085 | engines: {node: '>= 0.4'}
1086 |
1087 | is-symbol@1.1.1:
1088 | resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
1089 | engines: {node: '>= 0.4'}
1090 |
1091 | is-typed-array@1.1.15:
1092 | resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
1093 | engines: {node: '>= 0.4'}
1094 |
1095 | is-weakmap@2.0.2:
1096 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
1097 | engines: {node: '>= 0.4'}
1098 |
1099 | is-weakref@1.1.1:
1100 | resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
1101 | engines: {node: '>= 0.4'}
1102 |
1103 | is-weakset@2.0.4:
1104 | resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
1105 | engines: {node: '>= 0.4'}
1106 |
1107 | isarray@2.0.5:
1108 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
1109 |
1110 | isexe@2.0.0:
1111 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1112 |
1113 | iterator.prototype@1.1.5:
1114 | resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
1115 | engines: {node: '>= 0.4'}
1116 |
1117 | js-cookie@3.0.5:
1118 | resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
1119 | engines: {node: '>=14'}
1120 |
1121 | js-tokens@4.0.0:
1122 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1123 |
1124 | js-yaml@4.1.0:
1125 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1126 | hasBin: true
1127 |
1128 | jsesc@3.1.0:
1129 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
1130 | engines: {node: '>=6'}
1131 | hasBin: true
1132 |
1133 | json-buffer@3.0.1:
1134 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
1135 |
1136 | json-schema-traverse@0.4.1:
1137 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1138 |
1139 | json-stable-stringify-without-jsonify@1.0.1:
1140 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1141 |
1142 | json5@2.2.3:
1143 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
1144 | engines: {node: '>=6'}
1145 | hasBin: true
1146 |
1147 | jsx-ast-utils@3.3.5:
1148 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
1149 | engines: {node: '>=4.0'}
1150 |
1151 | jwt-decode@4.0.0:
1152 | resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==}
1153 | engines: {node: '>=18'}
1154 |
1155 | keyv@4.5.4:
1156 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1157 |
1158 | levn@0.4.1:
1159 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1160 | engines: {node: '>= 0.8.0'}
1161 |
1162 | locate-path@6.0.0:
1163 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1164 | engines: {node: '>=10'}
1165 |
1166 | lodash.merge@4.6.2:
1167 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1168 |
1169 | loose-envify@1.4.0:
1170 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
1171 | hasBin: true
1172 |
1173 | lru-cache@5.1.1:
1174 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1175 |
1176 | math-intrinsics@1.1.0:
1177 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
1178 | engines: {node: '>= 0.4'}
1179 |
1180 | mime-db@1.52.0:
1181 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1182 | engines: {node: '>= 0.6'}
1183 |
1184 | mime-types@2.1.35:
1185 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1186 | engines: {node: '>= 0.6'}
1187 |
1188 | minimatch@3.1.2:
1189 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1190 |
1191 | ms@2.1.3:
1192 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1193 |
1194 | nanoid@3.3.11:
1195 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
1196 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1197 | hasBin: true
1198 |
1199 | natural-compare@1.4.0:
1200 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1201 |
1202 | node-releases@2.0.19:
1203 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
1204 |
1205 | object-assign@4.1.1:
1206 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1207 | engines: {node: '>=0.10.0'}
1208 |
1209 | object-inspect@1.13.4:
1210 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
1211 | engines: {node: '>= 0.4'}
1212 |
1213 | object-keys@1.1.1:
1214 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
1215 | engines: {node: '>= 0.4'}
1216 |
1217 | object.assign@4.1.7:
1218 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
1219 | engines: {node: '>= 0.4'}
1220 |
1221 | object.entries@1.1.9:
1222 | resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==}
1223 | engines: {node: '>= 0.4'}
1224 |
1225 | object.fromentries@2.0.8:
1226 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
1227 | engines: {node: '>= 0.4'}
1228 |
1229 | object.values@1.2.1:
1230 | resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
1231 | engines: {node: '>= 0.4'}
1232 |
1233 | optionator@0.9.4:
1234 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1235 | engines: {node: '>= 0.8.0'}
1236 |
1237 | own-keys@1.0.1:
1238 | resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
1239 | engines: {node: '>= 0.4'}
1240 |
1241 | p-limit@3.1.0:
1242 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1243 | engines: {node: '>=10'}
1244 |
1245 | p-locate@5.0.0:
1246 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1247 | engines: {node: '>=10'}
1248 |
1249 | parent-module@1.0.1:
1250 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1251 | engines: {node: '>=6'}
1252 |
1253 | path-exists@4.0.0:
1254 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1255 | engines: {node: '>=8'}
1256 |
1257 | path-key@3.1.1:
1258 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1259 | engines: {node: '>=8'}
1260 |
1261 | path-parse@1.0.7:
1262 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1263 |
1264 | picocolors@1.1.1:
1265 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1266 |
1267 | picomatch@4.0.2:
1268 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
1269 | engines: {node: '>=12'}
1270 |
1271 | possible-typed-array-names@1.1.0:
1272 | resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
1273 | engines: {node: '>= 0.4'}
1274 |
1275 | postcss@8.5.3:
1276 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
1277 | engines: {node: ^10 || ^12 || >=14}
1278 |
1279 | prelude-ls@1.2.1:
1280 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1281 | engines: {node: '>= 0.8.0'}
1282 |
1283 | prettier@3.5.3:
1284 | resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
1285 | engines: {node: '>=14'}
1286 | hasBin: true
1287 |
1288 | prop-types@15.8.1:
1289 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
1290 |
1291 | proxy-from-env@1.1.0:
1292 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
1293 |
1294 | punycode@2.3.1:
1295 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1296 | engines: {node: '>=6'}
1297 |
1298 | react-dom@18.3.1:
1299 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
1300 | peerDependencies:
1301 | react: ^18.3.1
1302 |
1303 | react-is@16.13.1:
1304 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
1305 |
1306 | react-refresh@0.17.0:
1307 | resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
1308 | engines: {node: '>=0.10.0'}
1309 |
1310 | react-router-dom@6.30.1:
1311 | resolution: {integrity: sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==}
1312 | engines: {node: '>=14.0.0'}
1313 | peerDependencies:
1314 | react: '>=16.8'
1315 | react-dom: '>=16.8'
1316 |
1317 | react-router@6.30.1:
1318 | resolution: {integrity: sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==}
1319 | engines: {node: '>=14.0.0'}
1320 | peerDependencies:
1321 | react: '>=16.8'
1322 |
1323 | react@18.3.1:
1324 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
1325 | engines: {node: '>=0.10.0'}
1326 |
1327 | reflect.getprototypeof@1.0.10:
1328 | resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
1329 | engines: {node: '>= 0.4'}
1330 |
1331 | regexp.prototype.flags@1.5.4:
1332 | resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
1333 | engines: {node: '>= 0.4'}
1334 |
1335 | resolve-from@4.0.0:
1336 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1337 | engines: {node: '>=4'}
1338 |
1339 | resolve@2.0.0-next.5:
1340 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
1341 | hasBin: true
1342 |
1343 | rollup@4.41.1:
1344 | resolution: {integrity: sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==}
1345 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1346 | hasBin: true
1347 |
1348 | safe-array-concat@1.1.3:
1349 | resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
1350 | engines: {node: '>=0.4'}
1351 |
1352 | safe-push-apply@1.0.0:
1353 | resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
1354 | engines: {node: '>= 0.4'}
1355 |
1356 | safe-regex-test@1.1.0:
1357 | resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
1358 | engines: {node: '>= 0.4'}
1359 |
1360 | scheduler@0.23.2:
1361 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
1362 |
1363 | semver@6.3.1:
1364 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1365 | hasBin: true
1366 |
1367 | set-function-length@1.2.2:
1368 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
1369 | engines: {node: '>= 0.4'}
1370 |
1371 | set-function-name@2.0.2:
1372 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
1373 | engines: {node: '>= 0.4'}
1374 |
1375 | set-proto@1.0.0:
1376 | resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
1377 | engines: {node: '>= 0.4'}
1378 |
1379 | shebang-command@2.0.0:
1380 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1381 | engines: {node: '>=8'}
1382 |
1383 | shebang-regex@3.0.0:
1384 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1385 | engines: {node: '>=8'}
1386 |
1387 | side-channel-list@1.0.0:
1388 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
1389 | engines: {node: '>= 0.4'}
1390 |
1391 | side-channel-map@1.0.1:
1392 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
1393 | engines: {node: '>= 0.4'}
1394 |
1395 | side-channel-weakmap@1.0.2:
1396 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
1397 | engines: {node: '>= 0.4'}
1398 |
1399 | side-channel@1.1.0:
1400 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
1401 | engines: {node: '>= 0.4'}
1402 |
1403 | simple-zustand-devtools@1.1.0:
1404 | resolution: {integrity: sha512-Axfcfr9L3YL3kto7aschCQLY2VUlXXMnIVtaTe9Y0qWbNmPsX/y7KsNprmxBZoB0pww5ZGs1u/ohcrvQ3tE6jA==}
1405 | peerDependencies:
1406 | '@types/react': '>=18.0.0'
1407 | '@types/react-dom': '>=18.0.0'
1408 | react: '>=18.0.0'
1409 | react-dom: '>=18.0.0'
1410 | zustand: '>=1.0.2'
1411 |
1412 | source-map-js@1.2.1:
1413 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1414 | engines: {node: '>=0.10.0'}
1415 |
1416 | string.prototype.matchall@4.0.12:
1417 | resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
1418 | engines: {node: '>= 0.4'}
1419 |
1420 | string.prototype.repeat@1.0.0:
1421 | resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
1422 |
1423 | string.prototype.trim@1.2.10:
1424 | resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
1425 | engines: {node: '>= 0.4'}
1426 |
1427 | string.prototype.trimend@1.0.9:
1428 | resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
1429 | engines: {node: '>= 0.4'}
1430 |
1431 | string.prototype.trimstart@1.0.8:
1432 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
1433 | engines: {node: '>= 0.4'}
1434 |
1435 | strip-json-comments@3.1.1:
1436 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1437 | engines: {node: '>=8'}
1438 |
1439 | supports-color@7.2.0:
1440 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1441 | engines: {node: '>=8'}
1442 |
1443 | supports-preserve-symlinks-flag@1.0.0:
1444 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1445 | engines: {node: '>= 0.4'}
1446 |
1447 | tinyglobby@0.2.13:
1448 | resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==}
1449 | engines: {node: '>=12.0.0'}
1450 |
1451 | type-check@0.4.0:
1452 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1453 | engines: {node: '>= 0.8.0'}
1454 |
1455 | typed-array-buffer@1.0.3:
1456 | resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
1457 | engines: {node: '>= 0.4'}
1458 |
1459 | typed-array-byte-length@1.0.3:
1460 | resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
1461 | engines: {node: '>= 0.4'}
1462 |
1463 | typed-array-byte-offset@1.0.4:
1464 | resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
1465 | engines: {node: '>= 0.4'}
1466 |
1467 | typed-array-length@1.0.7:
1468 | resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
1469 | engines: {node: '>= 0.4'}
1470 |
1471 | unbox-primitive@1.1.0:
1472 | resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
1473 | engines: {node: '>= 0.4'}
1474 |
1475 | update-browserslist-db@1.1.3:
1476 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
1477 | hasBin: true
1478 | peerDependencies:
1479 | browserslist: '>= 4.21.0'
1480 |
1481 | uri-js@4.4.1:
1482 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1483 |
1484 | use-sync-external-store@1.5.0:
1485 | resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
1486 | peerDependencies:
1487 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
1488 |
1489 | vite@6.3.5:
1490 | resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
1491 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1492 | hasBin: true
1493 | peerDependencies:
1494 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
1495 | jiti: '>=1.21.0'
1496 | less: '*'
1497 | lightningcss: ^1.21.0
1498 | sass: '*'
1499 | sass-embedded: '*'
1500 | stylus: '*'
1501 | sugarss: '*'
1502 | terser: ^5.16.0
1503 | tsx: ^4.8.1
1504 | yaml: ^2.4.2
1505 | peerDependenciesMeta:
1506 | '@types/node':
1507 | optional: true
1508 | jiti:
1509 | optional: true
1510 | less:
1511 | optional: true
1512 | lightningcss:
1513 | optional: true
1514 | sass:
1515 | optional: true
1516 | sass-embedded:
1517 | optional: true
1518 | stylus:
1519 | optional: true
1520 | sugarss:
1521 | optional: true
1522 | terser:
1523 | optional: true
1524 | tsx:
1525 | optional: true
1526 | yaml:
1527 | optional: true
1528 |
1529 | which-boxed-primitive@1.1.1:
1530 | resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
1531 | engines: {node: '>= 0.4'}
1532 |
1533 | which-builtin-type@1.2.1:
1534 | resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
1535 | engines: {node: '>= 0.4'}
1536 |
1537 | which-collection@1.0.2:
1538 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
1539 | engines: {node: '>= 0.4'}
1540 |
1541 | which-typed-array@1.1.19:
1542 | resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
1543 | engines: {node: '>= 0.4'}
1544 |
1545 | which@2.0.2:
1546 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1547 | engines: {node: '>= 8'}
1548 | hasBin: true
1549 |
1550 | word-wrap@1.2.5:
1551 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1552 | engines: {node: '>=0.10.0'}
1553 |
1554 | yallist@3.1.1:
1555 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1556 |
1557 | yocto-queue@0.1.0:
1558 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1559 | engines: {node: '>=10'}
1560 |
1561 | zustand@5.0.5:
1562 | resolution: {integrity: sha512-mILtRfKW9xM47hqxGIxCv12gXusoY/xTSHBYApXozR0HmQv299whhBeeAcRy+KrPPybzosvJBCOmVjq6x12fCg==}
1563 | engines: {node: '>=12.20.0'}
1564 | peerDependencies:
1565 | '@types/react': '>=18.0.0'
1566 | immer: '>=9.0.6'
1567 | react: '>=18.0.0'
1568 | use-sync-external-store: '>=1.2.0'
1569 | peerDependenciesMeta:
1570 | '@types/react':
1571 | optional: true
1572 | immer:
1573 | optional: true
1574 | react:
1575 | optional: true
1576 | use-sync-external-store:
1577 | optional: true
1578 |
1579 | snapshots:
1580 |
1581 | '@ampproject/remapping@2.3.0':
1582 | dependencies:
1583 | '@jridgewell/gen-mapping': 0.3.8
1584 | '@jridgewell/trace-mapping': 0.3.25
1585 |
1586 | '@babel/code-frame@7.27.1':
1587 | dependencies:
1588 | '@babel/helper-validator-identifier': 7.27.1
1589 | js-tokens: 4.0.0
1590 | picocolors: 1.1.1
1591 |
1592 | '@babel/compat-data@7.27.2': {}
1593 |
1594 | '@babel/core@7.27.1':
1595 | dependencies:
1596 | '@ampproject/remapping': 2.3.0
1597 | '@babel/code-frame': 7.27.1
1598 | '@babel/generator': 7.27.1
1599 | '@babel/helper-compilation-targets': 7.27.2
1600 | '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1)
1601 | '@babel/helpers': 7.27.1
1602 | '@babel/parser': 7.27.2
1603 | '@babel/template': 7.27.2
1604 | '@babel/traverse': 7.27.1
1605 | '@babel/types': 7.27.1
1606 | convert-source-map: 2.0.0
1607 | debug: 4.4.1
1608 | gensync: 1.0.0-beta.2
1609 | json5: 2.2.3
1610 | semver: 6.3.1
1611 | transitivePeerDependencies:
1612 | - supports-color
1613 |
1614 | '@babel/eslint-parser@7.27.1(@babel/core@7.27.1)(eslint@9.27.0)':
1615 | dependencies:
1616 | '@babel/core': 7.27.1
1617 | '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
1618 | eslint: 9.27.0
1619 | eslint-visitor-keys: 2.1.0
1620 | semver: 6.3.1
1621 |
1622 | '@babel/generator@7.27.1':
1623 | dependencies:
1624 | '@babel/parser': 7.27.2
1625 | '@babel/types': 7.27.1
1626 | '@jridgewell/gen-mapping': 0.3.8
1627 | '@jridgewell/trace-mapping': 0.3.25
1628 | jsesc: 3.1.0
1629 |
1630 | '@babel/helper-annotate-as-pure@7.27.1':
1631 | dependencies:
1632 | '@babel/types': 7.27.1
1633 |
1634 | '@babel/helper-compilation-targets@7.27.2':
1635 | dependencies:
1636 | '@babel/compat-data': 7.27.2
1637 | '@babel/helper-validator-option': 7.27.1
1638 | browserslist: 4.24.5
1639 | lru-cache: 5.1.1
1640 | semver: 6.3.1
1641 |
1642 | '@babel/helper-module-imports@7.27.1':
1643 | dependencies:
1644 | '@babel/traverse': 7.27.1
1645 | '@babel/types': 7.27.1
1646 | transitivePeerDependencies:
1647 | - supports-color
1648 |
1649 | '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)':
1650 | dependencies:
1651 | '@babel/core': 7.27.1
1652 | '@babel/helper-module-imports': 7.27.1
1653 | '@babel/helper-validator-identifier': 7.27.1
1654 | '@babel/traverse': 7.27.1
1655 | transitivePeerDependencies:
1656 | - supports-color
1657 |
1658 | '@babel/helper-plugin-utils@7.27.1': {}
1659 |
1660 | '@babel/helper-string-parser@7.27.1': {}
1661 |
1662 | '@babel/helper-validator-identifier@7.27.1': {}
1663 |
1664 | '@babel/helper-validator-option@7.27.1': {}
1665 |
1666 | '@babel/helpers@7.27.1':
1667 | dependencies:
1668 | '@babel/template': 7.27.2
1669 | '@babel/types': 7.27.1
1670 |
1671 | '@babel/parser@7.27.2':
1672 | dependencies:
1673 | '@babel/types': 7.27.1
1674 |
1675 | '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.1)':
1676 | dependencies:
1677 | '@babel/core': 7.27.1
1678 | '@babel/helper-plugin-utils': 7.27.1
1679 |
1680 | '@babel/plugin-transform-react-display-name@7.27.1(@babel/core@7.27.1)':
1681 | dependencies:
1682 | '@babel/core': 7.27.1
1683 | '@babel/helper-plugin-utils': 7.27.1
1684 |
1685 | '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.27.1)':
1686 | dependencies:
1687 | '@babel/core': 7.27.1
1688 | '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.1)
1689 | transitivePeerDependencies:
1690 | - supports-color
1691 |
1692 | '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.27.1)':
1693 | dependencies:
1694 | '@babel/core': 7.27.1
1695 | '@babel/helper-plugin-utils': 7.27.1
1696 |
1697 | '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.27.1)':
1698 | dependencies:
1699 | '@babel/core': 7.27.1
1700 | '@babel/helper-plugin-utils': 7.27.1
1701 |
1702 | '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.27.1)':
1703 | dependencies:
1704 | '@babel/core': 7.27.1
1705 | '@babel/helper-annotate-as-pure': 7.27.1
1706 | '@babel/helper-module-imports': 7.27.1
1707 | '@babel/helper-plugin-utils': 7.27.1
1708 | '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1)
1709 | '@babel/types': 7.27.1
1710 | transitivePeerDependencies:
1711 | - supports-color
1712 |
1713 | '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.27.1)':
1714 | dependencies:
1715 | '@babel/core': 7.27.1
1716 | '@babel/helper-annotate-as-pure': 7.27.1
1717 | '@babel/helper-plugin-utils': 7.27.1
1718 |
1719 | '@babel/preset-react@7.27.1(@babel/core@7.27.1)':
1720 | dependencies:
1721 | '@babel/core': 7.27.1
1722 | '@babel/helper-plugin-utils': 7.27.1
1723 | '@babel/helper-validator-option': 7.27.1
1724 | '@babel/plugin-transform-react-display-name': 7.27.1(@babel/core@7.27.1)
1725 | '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.1)
1726 | '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.27.1)
1727 | '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.27.1)
1728 | transitivePeerDependencies:
1729 | - supports-color
1730 |
1731 | '@babel/template@7.27.2':
1732 | dependencies:
1733 | '@babel/code-frame': 7.27.1
1734 | '@babel/parser': 7.27.2
1735 | '@babel/types': 7.27.1
1736 |
1737 | '@babel/traverse@7.27.1':
1738 | dependencies:
1739 | '@babel/code-frame': 7.27.1
1740 | '@babel/generator': 7.27.1
1741 | '@babel/parser': 7.27.2
1742 | '@babel/template': 7.27.2
1743 | '@babel/types': 7.27.1
1744 | debug: 4.4.1
1745 | globals: 11.12.0
1746 | transitivePeerDependencies:
1747 | - supports-color
1748 |
1749 | '@babel/types@7.27.1':
1750 | dependencies:
1751 | '@babel/helper-string-parser': 7.27.1
1752 | '@babel/helper-validator-identifier': 7.27.1
1753 |
1754 | '@esbuild/aix-ppc64@0.25.4':
1755 | optional: true
1756 |
1757 | '@esbuild/android-arm64@0.25.4':
1758 | optional: true
1759 |
1760 | '@esbuild/android-arm@0.25.4':
1761 | optional: true
1762 |
1763 | '@esbuild/android-x64@0.25.4':
1764 | optional: true
1765 |
1766 | '@esbuild/darwin-arm64@0.25.4':
1767 | optional: true
1768 |
1769 | '@esbuild/darwin-x64@0.25.4':
1770 | optional: true
1771 |
1772 | '@esbuild/freebsd-arm64@0.25.4':
1773 | optional: true
1774 |
1775 | '@esbuild/freebsd-x64@0.25.4':
1776 | optional: true
1777 |
1778 | '@esbuild/linux-arm64@0.25.4':
1779 | optional: true
1780 |
1781 | '@esbuild/linux-arm@0.25.4':
1782 | optional: true
1783 |
1784 | '@esbuild/linux-ia32@0.25.4':
1785 | optional: true
1786 |
1787 | '@esbuild/linux-loong64@0.25.4':
1788 | optional: true
1789 |
1790 | '@esbuild/linux-mips64el@0.25.4':
1791 | optional: true
1792 |
1793 | '@esbuild/linux-ppc64@0.25.4':
1794 | optional: true
1795 |
1796 | '@esbuild/linux-riscv64@0.25.4':
1797 | optional: true
1798 |
1799 | '@esbuild/linux-s390x@0.25.4':
1800 | optional: true
1801 |
1802 | '@esbuild/linux-x64@0.25.4':
1803 | optional: true
1804 |
1805 | '@esbuild/netbsd-arm64@0.25.4':
1806 | optional: true
1807 |
1808 | '@esbuild/netbsd-x64@0.25.4':
1809 | optional: true
1810 |
1811 | '@esbuild/openbsd-arm64@0.25.4':
1812 | optional: true
1813 |
1814 | '@esbuild/openbsd-x64@0.25.4':
1815 | optional: true
1816 |
1817 | '@esbuild/sunos-x64@0.25.4':
1818 | optional: true
1819 |
1820 | '@esbuild/win32-arm64@0.25.4':
1821 | optional: true
1822 |
1823 | '@esbuild/win32-ia32@0.25.4':
1824 | optional: true
1825 |
1826 | '@esbuild/win32-x64@0.25.4':
1827 | optional: true
1828 |
1829 | '@eslint-community/eslint-utils@4.7.0(eslint@9.27.0)':
1830 | dependencies:
1831 | eslint: 9.27.0
1832 | eslint-visitor-keys: 3.4.3
1833 |
1834 | '@eslint-community/regexpp@4.12.1': {}
1835 |
1836 | '@eslint/config-array@0.20.0':
1837 | dependencies:
1838 | '@eslint/object-schema': 2.1.6
1839 | debug: 4.4.1
1840 | minimatch: 3.1.2
1841 | transitivePeerDependencies:
1842 | - supports-color
1843 |
1844 | '@eslint/config-helpers@0.2.2': {}
1845 |
1846 | '@eslint/core@0.14.0':
1847 | dependencies:
1848 | '@types/json-schema': 7.0.15
1849 |
1850 | '@eslint/eslintrc@3.3.1':
1851 | dependencies:
1852 | ajv: 6.12.6
1853 | debug: 4.4.1
1854 | espree: 10.3.0
1855 | globals: 14.0.0
1856 | ignore: 5.3.2
1857 | import-fresh: 3.3.1
1858 | js-yaml: 4.1.0
1859 | minimatch: 3.1.2
1860 | strip-json-comments: 3.1.1
1861 | transitivePeerDependencies:
1862 | - supports-color
1863 |
1864 | '@eslint/js@9.27.0': {}
1865 |
1866 | '@eslint/object-schema@2.1.6': {}
1867 |
1868 | '@eslint/plugin-kit@0.3.1':
1869 | dependencies:
1870 | '@eslint/core': 0.14.0
1871 | levn: 0.4.1
1872 |
1873 | '@humanfs/core@0.19.1': {}
1874 |
1875 | '@humanfs/node@0.16.6':
1876 | dependencies:
1877 | '@humanfs/core': 0.19.1
1878 | '@humanwhocodes/retry': 0.3.1
1879 |
1880 | '@humanwhocodes/module-importer@1.0.1': {}
1881 |
1882 | '@humanwhocodes/retry@0.3.1': {}
1883 |
1884 | '@humanwhocodes/retry@0.4.3': {}
1885 |
1886 | '@jridgewell/gen-mapping@0.3.8':
1887 | dependencies:
1888 | '@jridgewell/set-array': 1.2.1
1889 | '@jridgewell/sourcemap-codec': 1.5.0
1890 | '@jridgewell/trace-mapping': 0.3.25
1891 |
1892 | '@jridgewell/resolve-uri@3.1.2': {}
1893 |
1894 | '@jridgewell/set-array@1.2.1': {}
1895 |
1896 | '@jridgewell/sourcemap-codec@1.5.0': {}
1897 |
1898 | '@jridgewell/trace-mapping@0.3.25':
1899 | dependencies:
1900 | '@jridgewell/resolve-uri': 3.1.2
1901 | '@jridgewell/sourcemap-codec': 1.5.0
1902 |
1903 | '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1':
1904 | dependencies:
1905 | eslint-scope: 5.1.1
1906 |
1907 | '@remix-run/router@1.23.0': {}
1908 |
1909 | '@rolldown/pluginutils@1.0.0-beta.9': {}
1910 |
1911 | '@rollup/rollup-android-arm-eabi@4.41.1':
1912 | optional: true
1913 |
1914 | '@rollup/rollup-android-arm64@4.41.1':
1915 | optional: true
1916 |
1917 | '@rollup/rollup-darwin-arm64@4.41.1':
1918 | optional: true
1919 |
1920 | '@rollup/rollup-darwin-x64@4.41.1':
1921 | optional: true
1922 |
1923 | '@rollup/rollup-freebsd-arm64@4.41.1':
1924 | optional: true
1925 |
1926 | '@rollup/rollup-freebsd-x64@4.41.1':
1927 | optional: true
1928 |
1929 | '@rollup/rollup-linux-arm-gnueabihf@4.41.1':
1930 | optional: true
1931 |
1932 | '@rollup/rollup-linux-arm-musleabihf@4.41.1':
1933 | optional: true
1934 |
1935 | '@rollup/rollup-linux-arm64-gnu@4.41.1':
1936 | optional: true
1937 |
1938 | '@rollup/rollup-linux-arm64-musl@4.41.1':
1939 | optional: true
1940 |
1941 | '@rollup/rollup-linux-loongarch64-gnu@4.41.1':
1942 | optional: true
1943 |
1944 | '@rollup/rollup-linux-powerpc64le-gnu@4.41.1':
1945 | optional: true
1946 |
1947 | '@rollup/rollup-linux-riscv64-gnu@4.41.1':
1948 | optional: true
1949 |
1950 | '@rollup/rollup-linux-riscv64-musl@4.41.1':
1951 | optional: true
1952 |
1953 | '@rollup/rollup-linux-s390x-gnu@4.41.1':
1954 | optional: true
1955 |
1956 | '@rollup/rollup-linux-x64-gnu@4.41.1':
1957 | optional: true
1958 |
1959 | '@rollup/rollup-linux-x64-musl@4.41.1':
1960 | optional: true
1961 |
1962 | '@rollup/rollup-win32-arm64-msvc@4.41.1':
1963 | optional: true
1964 |
1965 | '@rollup/rollup-win32-ia32-msvc@4.41.1':
1966 | optional: true
1967 |
1968 | '@rollup/rollup-win32-x64-msvc@4.41.1':
1969 | optional: true
1970 |
1971 | '@types/babel__core@7.20.5':
1972 | dependencies:
1973 | '@babel/parser': 7.27.2
1974 | '@babel/types': 7.27.1
1975 | '@types/babel__generator': 7.27.0
1976 | '@types/babel__template': 7.4.4
1977 | '@types/babel__traverse': 7.20.7
1978 |
1979 | '@types/babel__generator@7.27.0':
1980 | dependencies:
1981 | '@babel/types': 7.27.1
1982 |
1983 | '@types/babel__template@7.4.4':
1984 | dependencies:
1985 | '@babel/parser': 7.27.2
1986 | '@babel/types': 7.27.1
1987 |
1988 | '@types/babel__traverse@7.20.7':
1989 | dependencies:
1990 | '@babel/types': 7.27.1
1991 |
1992 | '@types/estree@1.0.7': {}
1993 |
1994 | '@types/json-schema@7.0.15': {}
1995 |
1996 | '@types/prop-types@15.7.14': {}
1997 |
1998 | '@types/react-dom@18.3.7(@types/react@18.3.22)':
1999 | dependencies:
2000 | '@types/react': 18.3.22
2001 |
2002 | '@types/react@18.3.22':
2003 | dependencies:
2004 | '@types/prop-types': 15.7.14
2005 | csstype: 3.1.3
2006 |
2007 | '@vitejs/plugin-react@4.5.0(vite@6.3.5)':
2008 | dependencies:
2009 | '@babel/core': 7.27.1
2010 | '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.1)
2011 | '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.27.1)
2012 | '@rolldown/pluginutils': 1.0.0-beta.9
2013 | '@types/babel__core': 7.20.5
2014 | react-refresh: 0.17.0
2015 | vite: 6.3.5
2016 | transitivePeerDependencies:
2017 | - supports-color
2018 |
2019 | acorn-jsx@5.3.2(acorn@8.14.1):
2020 | dependencies:
2021 | acorn: 8.14.1
2022 |
2023 | acorn@8.14.1: {}
2024 |
2025 | ajv@6.12.6:
2026 | dependencies:
2027 | fast-deep-equal: 3.1.3
2028 | fast-json-stable-stringify: 2.1.0
2029 | json-schema-traverse: 0.4.1
2030 | uri-js: 4.4.1
2031 |
2032 | ansi-styles@4.3.0:
2033 | dependencies:
2034 | color-convert: 2.0.1
2035 |
2036 | argparse@2.0.1: {}
2037 |
2038 | array-buffer-byte-length@1.0.2:
2039 | dependencies:
2040 | call-bound: 1.0.4
2041 | is-array-buffer: 3.0.5
2042 |
2043 | array-includes@3.1.8:
2044 | dependencies:
2045 | call-bind: 1.0.8
2046 | define-properties: 1.2.1
2047 | es-abstract: 1.23.10
2048 | es-object-atoms: 1.1.1
2049 | get-intrinsic: 1.3.0
2050 | is-string: 1.1.1
2051 |
2052 | array.prototype.findlast@1.2.5:
2053 | dependencies:
2054 | call-bind: 1.0.8
2055 | define-properties: 1.2.1
2056 | es-abstract: 1.23.10
2057 | es-errors: 1.3.0
2058 | es-object-atoms: 1.1.1
2059 | es-shim-unscopables: 1.1.0
2060 |
2061 | array.prototype.flat@1.3.3:
2062 | dependencies:
2063 | call-bind: 1.0.8
2064 | define-properties: 1.2.1
2065 | es-abstract: 1.23.10
2066 | es-shim-unscopables: 1.1.0
2067 |
2068 | array.prototype.flatmap@1.3.3:
2069 | dependencies:
2070 | call-bind: 1.0.8
2071 | define-properties: 1.2.1
2072 | es-abstract: 1.23.10
2073 | es-shim-unscopables: 1.1.0
2074 |
2075 | array.prototype.tosorted@1.1.4:
2076 | dependencies:
2077 | call-bind: 1.0.8
2078 | define-properties: 1.2.1
2079 | es-abstract: 1.23.10
2080 | es-errors: 1.3.0
2081 | es-shim-unscopables: 1.1.0
2082 |
2083 | arraybuffer.prototype.slice@1.0.4:
2084 | dependencies:
2085 | array-buffer-byte-length: 1.0.2
2086 | call-bind: 1.0.8
2087 | define-properties: 1.2.1
2088 | es-abstract: 1.23.10
2089 | es-errors: 1.3.0
2090 | get-intrinsic: 1.3.0
2091 | is-array-buffer: 3.0.5
2092 |
2093 | async-function@1.0.0: {}
2094 |
2095 | asynckit@0.4.0: {}
2096 |
2097 | available-typed-arrays@1.0.7:
2098 | dependencies:
2099 | possible-typed-array-names: 1.1.0
2100 |
2101 | axios@1.9.0:
2102 | dependencies:
2103 | follow-redirects: 1.15.9
2104 | form-data: 4.0.2
2105 | proxy-from-env: 1.1.0
2106 | transitivePeerDependencies:
2107 | - debug
2108 |
2109 | balanced-match@1.0.2: {}
2110 |
2111 | brace-expansion@1.1.11:
2112 | dependencies:
2113 | balanced-match: 1.0.2
2114 | concat-map: 0.0.1
2115 |
2116 | browserslist@4.24.5:
2117 | dependencies:
2118 | caniuse-lite: 1.0.30001718
2119 | electron-to-chromium: 1.5.157
2120 | node-releases: 2.0.19
2121 | update-browserslist-db: 1.1.3(browserslist@4.24.5)
2122 |
2123 | call-bind-apply-helpers@1.0.2:
2124 | dependencies:
2125 | es-errors: 1.3.0
2126 | function-bind: 1.1.2
2127 |
2128 | call-bind@1.0.8:
2129 | dependencies:
2130 | call-bind-apply-helpers: 1.0.2
2131 | es-define-property: 1.0.1
2132 | get-intrinsic: 1.3.0
2133 | set-function-length: 1.2.2
2134 |
2135 | call-bound@1.0.4:
2136 | dependencies:
2137 | call-bind-apply-helpers: 1.0.2
2138 | get-intrinsic: 1.3.0
2139 |
2140 | callsites@3.1.0: {}
2141 |
2142 | caniuse-lite@1.0.30001718: {}
2143 |
2144 | chalk@4.1.2:
2145 | dependencies:
2146 | ansi-styles: 4.3.0
2147 | supports-color: 7.2.0
2148 |
2149 | color-convert@2.0.1:
2150 | dependencies:
2151 | color-name: 1.1.4
2152 |
2153 | color-name@1.1.4: {}
2154 |
2155 | combined-stream@1.0.8:
2156 | dependencies:
2157 | delayed-stream: 1.0.0
2158 |
2159 | concat-map@0.0.1: {}
2160 |
2161 | convert-source-map@2.0.0: {}
2162 |
2163 | cross-spawn@7.0.6:
2164 | dependencies:
2165 | path-key: 3.1.1
2166 | shebang-command: 2.0.0
2167 | which: 2.0.2
2168 |
2169 | csstype@3.1.3: {}
2170 |
2171 | data-view-buffer@1.0.2:
2172 | dependencies:
2173 | call-bound: 1.0.4
2174 | es-errors: 1.3.0
2175 | is-data-view: 1.0.2
2176 |
2177 | data-view-byte-length@1.0.2:
2178 | dependencies:
2179 | call-bound: 1.0.4
2180 | es-errors: 1.3.0
2181 | is-data-view: 1.0.2
2182 |
2183 | data-view-byte-offset@1.0.1:
2184 | dependencies:
2185 | call-bound: 1.0.4
2186 | es-errors: 1.3.0
2187 | is-data-view: 1.0.2
2188 |
2189 | dayjs@1.11.13: {}
2190 |
2191 | debug@4.4.1:
2192 | dependencies:
2193 | ms: 2.1.3
2194 |
2195 | deep-is@0.1.4: {}
2196 |
2197 | define-data-property@1.1.4:
2198 | dependencies:
2199 | es-define-property: 1.0.1
2200 | es-errors: 1.3.0
2201 | gopd: 1.2.0
2202 |
2203 | define-properties@1.2.1:
2204 | dependencies:
2205 | define-data-property: 1.1.4
2206 | has-property-descriptors: 1.0.2
2207 | object-keys: 1.1.1
2208 |
2209 | delayed-stream@1.0.0: {}
2210 |
2211 | doctrine@2.1.0:
2212 | dependencies:
2213 | esutils: 2.0.3
2214 |
2215 | dunder-proto@1.0.1:
2216 | dependencies:
2217 | call-bind-apply-helpers: 1.0.2
2218 | es-errors: 1.3.0
2219 | gopd: 1.2.0
2220 |
2221 | electron-to-chromium@1.5.157: {}
2222 |
2223 | es-abstract@1.23.10:
2224 | dependencies:
2225 | array-buffer-byte-length: 1.0.2
2226 | arraybuffer.prototype.slice: 1.0.4
2227 | available-typed-arrays: 1.0.7
2228 | call-bind: 1.0.8
2229 | call-bound: 1.0.4
2230 | data-view-buffer: 1.0.2
2231 | data-view-byte-length: 1.0.2
2232 | data-view-byte-offset: 1.0.1
2233 | es-define-property: 1.0.1
2234 | es-errors: 1.3.0
2235 | es-object-atoms: 1.1.1
2236 | es-set-tostringtag: 2.1.0
2237 | es-to-primitive: 1.3.0
2238 | function.prototype.name: 1.1.8
2239 | get-intrinsic: 1.3.0
2240 | get-proto: 1.0.1
2241 | get-symbol-description: 1.1.0
2242 | globalthis: 1.0.4
2243 | gopd: 1.2.0
2244 | has-property-descriptors: 1.0.2
2245 | has-proto: 1.2.0
2246 | has-symbols: 1.1.0
2247 | hasown: 2.0.2
2248 | internal-slot: 1.1.0
2249 | is-array-buffer: 3.0.5
2250 | is-callable: 1.2.7
2251 | is-data-view: 1.0.2
2252 | is-regex: 1.2.1
2253 | is-shared-array-buffer: 1.0.4
2254 | is-string: 1.1.1
2255 | is-typed-array: 1.1.15
2256 | is-weakref: 1.1.1
2257 | math-intrinsics: 1.1.0
2258 | object-inspect: 1.13.4
2259 | object-keys: 1.1.1
2260 | object.assign: 4.1.7
2261 | own-keys: 1.0.1
2262 | regexp.prototype.flags: 1.5.4
2263 | safe-array-concat: 1.1.3
2264 | safe-push-apply: 1.0.0
2265 | safe-regex-test: 1.1.0
2266 | set-proto: 1.0.0
2267 | string.prototype.trim: 1.2.10
2268 | string.prototype.trimend: 1.0.9
2269 | string.prototype.trimstart: 1.0.8
2270 | typed-array-buffer: 1.0.3
2271 | typed-array-byte-length: 1.0.3
2272 | typed-array-byte-offset: 1.0.4
2273 | typed-array-length: 1.0.7
2274 | unbox-primitive: 1.1.0
2275 | which-typed-array: 1.1.19
2276 |
2277 | es-define-property@1.0.1: {}
2278 |
2279 | es-errors@1.3.0: {}
2280 |
2281 | es-iterator-helpers@1.2.1:
2282 | dependencies:
2283 | call-bind: 1.0.8
2284 | call-bound: 1.0.4
2285 | define-properties: 1.2.1
2286 | es-abstract: 1.23.10
2287 | es-errors: 1.3.0
2288 | es-set-tostringtag: 2.1.0
2289 | function-bind: 1.1.2
2290 | get-intrinsic: 1.3.0
2291 | globalthis: 1.0.4
2292 | gopd: 1.2.0
2293 | has-property-descriptors: 1.0.2
2294 | has-proto: 1.2.0
2295 | has-symbols: 1.1.0
2296 | internal-slot: 1.1.0
2297 | iterator.prototype: 1.1.5
2298 | safe-array-concat: 1.1.3
2299 |
2300 | es-object-atoms@1.1.1:
2301 | dependencies:
2302 | es-errors: 1.3.0
2303 |
2304 | es-set-tostringtag@2.1.0:
2305 | dependencies:
2306 | es-errors: 1.3.0
2307 | get-intrinsic: 1.3.0
2308 | has-tostringtag: 1.0.2
2309 | hasown: 2.0.2
2310 |
2311 | es-shim-unscopables@1.1.0:
2312 | dependencies:
2313 | hasown: 2.0.2
2314 |
2315 | es-to-primitive@1.3.0:
2316 | dependencies:
2317 | is-callable: 1.2.7
2318 | is-date-object: 1.1.0
2319 | is-symbol: 1.1.1
2320 |
2321 | esbuild@0.25.4:
2322 | optionalDependencies:
2323 | '@esbuild/aix-ppc64': 0.25.4
2324 | '@esbuild/android-arm': 0.25.4
2325 | '@esbuild/android-arm64': 0.25.4
2326 | '@esbuild/android-x64': 0.25.4
2327 | '@esbuild/darwin-arm64': 0.25.4
2328 | '@esbuild/darwin-x64': 0.25.4
2329 | '@esbuild/freebsd-arm64': 0.25.4
2330 | '@esbuild/freebsd-x64': 0.25.4
2331 | '@esbuild/linux-arm': 0.25.4
2332 | '@esbuild/linux-arm64': 0.25.4
2333 | '@esbuild/linux-ia32': 0.25.4
2334 | '@esbuild/linux-loong64': 0.25.4
2335 | '@esbuild/linux-mips64el': 0.25.4
2336 | '@esbuild/linux-ppc64': 0.25.4
2337 | '@esbuild/linux-riscv64': 0.25.4
2338 | '@esbuild/linux-s390x': 0.25.4
2339 | '@esbuild/linux-x64': 0.25.4
2340 | '@esbuild/netbsd-arm64': 0.25.4
2341 | '@esbuild/netbsd-x64': 0.25.4
2342 | '@esbuild/openbsd-arm64': 0.25.4
2343 | '@esbuild/openbsd-x64': 0.25.4
2344 | '@esbuild/sunos-x64': 0.25.4
2345 | '@esbuild/win32-arm64': 0.25.4
2346 | '@esbuild/win32-ia32': 0.25.4
2347 | '@esbuild/win32-x64': 0.25.4
2348 |
2349 | escalade@3.2.0: {}
2350 |
2351 | escape-string-regexp@4.0.0: {}
2352 |
2353 | eslint-plugin-react-hooks@5.2.0(eslint@9.27.0):
2354 | dependencies:
2355 | eslint: 9.27.0
2356 |
2357 | eslint-plugin-react-refresh@0.4.20(eslint@9.27.0):
2358 | dependencies:
2359 | eslint: 9.27.0
2360 |
2361 | eslint-plugin-react@7.37.5(eslint@9.27.0):
2362 | dependencies:
2363 | array-includes: 3.1.8
2364 | array.prototype.findlast: 1.2.5
2365 | array.prototype.flatmap: 1.3.3
2366 | array.prototype.tosorted: 1.1.4
2367 | doctrine: 2.1.0
2368 | es-iterator-helpers: 1.2.1
2369 | eslint: 9.27.0
2370 | estraverse: 5.3.0
2371 | hasown: 2.0.2
2372 | jsx-ast-utils: 3.3.5
2373 | minimatch: 3.1.2
2374 | object.entries: 1.1.9
2375 | object.fromentries: 2.0.8
2376 | object.values: 1.2.1
2377 | prop-types: 15.8.1
2378 | resolve: 2.0.0-next.5
2379 | semver: 6.3.1
2380 | string.prototype.matchall: 4.0.12
2381 | string.prototype.repeat: 1.0.0
2382 |
2383 | eslint-scope@5.1.1:
2384 | dependencies:
2385 | esrecurse: 4.3.0
2386 | estraverse: 4.3.0
2387 |
2388 | eslint-scope@8.3.0:
2389 | dependencies:
2390 | esrecurse: 4.3.0
2391 | estraverse: 5.3.0
2392 |
2393 | eslint-visitor-keys@2.1.0: {}
2394 |
2395 | eslint-visitor-keys@3.4.3: {}
2396 |
2397 | eslint-visitor-keys@4.2.0: {}
2398 |
2399 | eslint@9.27.0:
2400 | dependencies:
2401 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0)
2402 | '@eslint-community/regexpp': 4.12.1
2403 | '@eslint/config-array': 0.20.0
2404 | '@eslint/config-helpers': 0.2.2
2405 | '@eslint/core': 0.14.0
2406 | '@eslint/eslintrc': 3.3.1
2407 | '@eslint/js': 9.27.0
2408 | '@eslint/plugin-kit': 0.3.1
2409 | '@humanfs/node': 0.16.6
2410 | '@humanwhocodes/module-importer': 1.0.1
2411 | '@humanwhocodes/retry': 0.4.3
2412 | '@types/estree': 1.0.7
2413 | '@types/json-schema': 7.0.15
2414 | ajv: 6.12.6
2415 | chalk: 4.1.2
2416 | cross-spawn: 7.0.6
2417 | debug: 4.4.1
2418 | escape-string-regexp: 4.0.0
2419 | eslint-scope: 8.3.0
2420 | eslint-visitor-keys: 4.2.0
2421 | espree: 10.3.0
2422 | esquery: 1.6.0
2423 | esutils: 2.0.3
2424 | fast-deep-equal: 3.1.3
2425 | file-entry-cache: 8.0.0
2426 | find-up: 5.0.0
2427 | glob-parent: 6.0.2
2428 | ignore: 5.3.2
2429 | imurmurhash: 0.1.4
2430 | is-glob: 4.0.3
2431 | json-stable-stringify-without-jsonify: 1.0.1
2432 | lodash.merge: 4.6.2
2433 | minimatch: 3.1.2
2434 | natural-compare: 1.4.0
2435 | optionator: 0.9.4
2436 | transitivePeerDependencies:
2437 | - supports-color
2438 |
2439 | espree@10.3.0:
2440 | dependencies:
2441 | acorn: 8.14.1
2442 | acorn-jsx: 5.3.2(acorn@8.14.1)
2443 | eslint-visitor-keys: 4.2.0
2444 |
2445 | esquery@1.6.0:
2446 | dependencies:
2447 | estraverse: 5.3.0
2448 |
2449 | esrecurse@4.3.0:
2450 | dependencies:
2451 | estraverse: 5.3.0
2452 |
2453 | estraverse@4.3.0: {}
2454 |
2455 | estraverse@5.3.0: {}
2456 |
2457 | esutils@2.0.3: {}
2458 |
2459 | fast-deep-equal@3.1.3: {}
2460 |
2461 | fast-json-stable-stringify@2.1.0: {}
2462 |
2463 | fast-levenshtein@2.0.6: {}
2464 |
2465 | fdir@6.4.4(picomatch@4.0.2):
2466 | optionalDependencies:
2467 | picomatch: 4.0.2
2468 |
2469 | file-entry-cache@8.0.0:
2470 | dependencies:
2471 | flat-cache: 4.0.1
2472 |
2473 | find-up@5.0.0:
2474 | dependencies:
2475 | locate-path: 6.0.0
2476 | path-exists: 4.0.0
2477 |
2478 | flat-cache@4.0.1:
2479 | dependencies:
2480 | flatted: 3.3.3
2481 | keyv: 4.5.4
2482 |
2483 | flatted@3.3.3: {}
2484 |
2485 | follow-redirects@1.15.9: {}
2486 |
2487 | for-each@0.3.5:
2488 | dependencies:
2489 | is-callable: 1.2.7
2490 |
2491 | form-data@4.0.2:
2492 | dependencies:
2493 | asynckit: 0.4.0
2494 | combined-stream: 1.0.8
2495 | es-set-tostringtag: 2.1.0
2496 | mime-types: 2.1.35
2497 |
2498 | fsevents@2.3.3:
2499 | optional: true
2500 |
2501 | function-bind@1.1.2: {}
2502 |
2503 | function.prototype.name@1.1.8:
2504 | dependencies:
2505 | call-bind: 1.0.8
2506 | call-bound: 1.0.4
2507 | define-properties: 1.2.1
2508 | functions-have-names: 1.2.3
2509 | hasown: 2.0.2
2510 | is-callable: 1.2.7
2511 |
2512 | functions-have-names@1.2.3: {}
2513 |
2514 | gensync@1.0.0-beta.2: {}
2515 |
2516 | get-intrinsic@1.3.0:
2517 | dependencies:
2518 | call-bind-apply-helpers: 1.0.2
2519 | es-define-property: 1.0.1
2520 | es-errors: 1.3.0
2521 | es-object-atoms: 1.1.1
2522 | function-bind: 1.1.2
2523 | get-proto: 1.0.1
2524 | gopd: 1.2.0
2525 | has-symbols: 1.1.0
2526 | hasown: 2.0.2
2527 | math-intrinsics: 1.1.0
2528 |
2529 | get-proto@1.0.1:
2530 | dependencies:
2531 | dunder-proto: 1.0.1
2532 | es-object-atoms: 1.1.1
2533 |
2534 | get-symbol-description@1.1.0:
2535 | dependencies:
2536 | call-bound: 1.0.4
2537 | es-errors: 1.3.0
2538 | get-intrinsic: 1.3.0
2539 |
2540 | glob-parent@6.0.2:
2541 | dependencies:
2542 | is-glob: 4.0.3
2543 |
2544 | globals@11.12.0: {}
2545 |
2546 | globals@14.0.0: {}
2547 |
2548 | globals@16.1.0: {}
2549 |
2550 | globalthis@1.0.4:
2551 | dependencies:
2552 | define-properties: 1.2.1
2553 | gopd: 1.2.0
2554 |
2555 | gopd@1.2.0: {}
2556 |
2557 | has-bigints@1.1.0: {}
2558 |
2559 | has-flag@4.0.0: {}
2560 |
2561 | has-property-descriptors@1.0.2:
2562 | dependencies:
2563 | es-define-property: 1.0.1
2564 |
2565 | has-proto@1.2.0:
2566 | dependencies:
2567 | dunder-proto: 1.0.1
2568 |
2569 | has-symbols@1.1.0: {}
2570 |
2571 | has-tostringtag@1.0.2:
2572 | dependencies:
2573 | has-symbols: 1.1.0
2574 |
2575 | hasown@2.0.2:
2576 | dependencies:
2577 | function-bind: 1.1.2
2578 |
2579 | ignore@5.3.2: {}
2580 |
2581 | import-fresh@3.3.1:
2582 | dependencies:
2583 | parent-module: 1.0.1
2584 | resolve-from: 4.0.0
2585 |
2586 | imurmurhash@0.1.4: {}
2587 |
2588 | internal-slot@1.1.0:
2589 | dependencies:
2590 | es-errors: 1.3.0
2591 | hasown: 2.0.2
2592 | side-channel: 1.1.0
2593 |
2594 | is-array-buffer@3.0.5:
2595 | dependencies:
2596 | call-bind: 1.0.8
2597 | call-bound: 1.0.4
2598 | get-intrinsic: 1.3.0
2599 |
2600 | is-async-function@2.1.1:
2601 | dependencies:
2602 | async-function: 1.0.0
2603 | call-bound: 1.0.4
2604 | get-proto: 1.0.1
2605 | has-tostringtag: 1.0.2
2606 | safe-regex-test: 1.1.0
2607 |
2608 | is-bigint@1.1.0:
2609 | dependencies:
2610 | has-bigints: 1.1.0
2611 |
2612 | is-boolean-object@1.2.2:
2613 | dependencies:
2614 | call-bound: 1.0.4
2615 | has-tostringtag: 1.0.2
2616 |
2617 | is-callable@1.2.7: {}
2618 |
2619 | is-core-module@2.16.1:
2620 | dependencies:
2621 | hasown: 2.0.2
2622 |
2623 | is-data-view@1.0.2:
2624 | dependencies:
2625 | call-bound: 1.0.4
2626 | get-intrinsic: 1.3.0
2627 | is-typed-array: 1.1.15
2628 |
2629 | is-date-object@1.1.0:
2630 | dependencies:
2631 | call-bound: 1.0.4
2632 | has-tostringtag: 1.0.2
2633 |
2634 | is-extglob@2.1.1: {}
2635 |
2636 | is-finalizationregistry@1.1.1:
2637 | dependencies:
2638 | call-bound: 1.0.4
2639 |
2640 | is-generator-function@1.1.0:
2641 | dependencies:
2642 | call-bound: 1.0.4
2643 | get-proto: 1.0.1
2644 | has-tostringtag: 1.0.2
2645 | safe-regex-test: 1.1.0
2646 |
2647 | is-glob@4.0.3:
2648 | dependencies:
2649 | is-extglob: 2.1.1
2650 |
2651 | is-map@2.0.3: {}
2652 |
2653 | is-number-object@1.1.1:
2654 | dependencies:
2655 | call-bound: 1.0.4
2656 | has-tostringtag: 1.0.2
2657 |
2658 | is-regex@1.2.1:
2659 | dependencies:
2660 | call-bound: 1.0.4
2661 | gopd: 1.2.0
2662 | has-tostringtag: 1.0.2
2663 | hasown: 2.0.2
2664 |
2665 | is-set@2.0.3: {}
2666 |
2667 | is-shared-array-buffer@1.0.4:
2668 | dependencies:
2669 | call-bound: 1.0.4
2670 |
2671 | is-string@1.1.1:
2672 | dependencies:
2673 | call-bound: 1.0.4
2674 | has-tostringtag: 1.0.2
2675 |
2676 | is-symbol@1.1.1:
2677 | dependencies:
2678 | call-bound: 1.0.4
2679 | has-symbols: 1.1.0
2680 | safe-regex-test: 1.1.0
2681 |
2682 | is-typed-array@1.1.15:
2683 | dependencies:
2684 | which-typed-array: 1.1.19
2685 |
2686 | is-weakmap@2.0.2: {}
2687 |
2688 | is-weakref@1.1.1:
2689 | dependencies:
2690 | call-bound: 1.0.4
2691 |
2692 | is-weakset@2.0.4:
2693 | dependencies:
2694 | call-bound: 1.0.4
2695 | get-intrinsic: 1.3.0
2696 |
2697 | isarray@2.0.5: {}
2698 |
2699 | isexe@2.0.0: {}
2700 |
2701 | iterator.prototype@1.1.5:
2702 | dependencies:
2703 | define-data-property: 1.1.4
2704 | es-object-atoms: 1.1.1
2705 | get-intrinsic: 1.3.0
2706 | get-proto: 1.0.1
2707 | has-symbols: 1.1.0
2708 | set-function-name: 2.0.2
2709 |
2710 | js-cookie@3.0.5: {}
2711 |
2712 | js-tokens@4.0.0: {}
2713 |
2714 | js-yaml@4.1.0:
2715 | dependencies:
2716 | argparse: 2.0.1
2717 |
2718 | jsesc@3.1.0: {}
2719 |
2720 | json-buffer@3.0.1: {}
2721 |
2722 | json-schema-traverse@0.4.1: {}
2723 |
2724 | json-stable-stringify-without-jsonify@1.0.1: {}
2725 |
2726 | json5@2.2.3: {}
2727 |
2728 | jsx-ast-utils@3.3.5:
2729 | dependencies:
2730 | array-includes: 3.1.8
2731 | array.prototype.flat: 1.3.3
2732 | object.assign: 4.1.7
2733 | object.values: 1.2.1
2734 |
2735 | jwt-decode@4.0.0: {}
2736 |
2737 | keyv@4.5.4:
2738 | dependencies:
2739 | json-buffer: 3.0.1
2740 |
2741 | levn@0.4.1:
2742 | dependencies:
2743 | prelude-ls: 1.2.1
2744 | type-check: 0.4.0
2745 |
2746 | locate-path@6.0.0:
2747 | dependencies:
2748 | p-locate: 5.0.0
2749 |
2750 | lodash.merge@4.6.2: {}
2751 |
2752 | loose-envify@1.4.0:
2753 | dependencies:
2754 | js-tokens: 4.0.0
2755 |
2756 | lru-cache@5.1.1:
2757 | dependencies:
2758 | yallist: 3.1.1
2759 |
2760 | math-intrinsics@1.1.0: {}
2761 |
2762 | mime-db@1.52.0: {}
2763 |
2764 | mime-types@2.1.35:
2765 | dependencies:
2766 | mime-db: 1.52.0
2767 |
2768 | minimatch@3.1.2:
2769 | dependencies:
2770 | brace-expansion: 1.1.11
2771 |
2772 | ms@2.1.3: {}
2773 |
2774 | nanoid@3.3.11: {}
2775 |
2776 | natural-compare@1.4.0: {}
2777 |
2778 | node-releases@2.0.19: {}
2779 |
2780 | object-assign@4.1.1: {}
2781 |
2782 | object-inspect@1.13.4: {}
2783 |
2784 | object-keys@1.1.1: {}
2785 |
2786 | object.assign@4.1.7:
2787 | dependencies:
2788 | call-bind: 1.0.8
2789 | call-bound: 1.0.4
2790 | define-properties: 1.2.1
2791 | es-object-atoms: 1.1.1
2792 | has-symbols: 1.1.0
2793 | object-keys: 1.1.1
2794 |
2795 | object.entries@1.1.9:
2796 | dependencies:
2797 | call-bind: 1.0.8
2798 | call-bound: 1.0.4
2799 | define-properties: 1.2.1
2800 | es-object-atoms: 1.1.1
2801 |
2802 | object.fromentries@2.0.8:
2803 | dependencies:
2804 | call-bind: 1.0.8
2805 | define-properties: 1.2.1
2806 | es-abstract: 1.23.10
2807 | es-object-atoms: 1.1.1
2808 |
2809 | object.values@1.2.1:
2810 | dependencies:
2811 | call-bind: 1.0.8
2812 | call-bound: 1.0.4
2813 | define-properties: 1.2.1
2814 | es-object-atoms: 1.1.1
2815 |
2816 | optionator@0.9.4:
2817 | dependencies:
2818 | deep-is: 0.1.4
2819 | fast-levenshtein: 2.0.6
2820 | levn: 0.4.1
2821 | prelude-ls: 1.2.1
2822 | type-check: 0.4.0
2823 | word-wrap: 1.2.5
2824 |
2825 | own-keys@1.0.1:
2826 | dependencies:
2827 | get-intrinsic: 1.3.0
2828 | object-keys: 1.1.1
2829 | safe-push-apply: 1.0.0
2830 |
2831 | p-limit@3.1.0:
2832 | dependencies:
2833 | yocto-queue: 0.1.0
2834 |
2835 | p-locate@5.0.0:
2836 | dependencies:
2837 | p-limit: 3.1.0
2838 |
2839 | parent-module@1.0.1:
2840 | dependencies:
2841 | callsites: 3.1.0
2842 |
2843 | path-exists@4.0.0: {}
2844 |
2845 | path-key@3.1.1: {}
2846 |
2847 | path-parse@1.0.7: {}
2848 |
2849 | picocolors@1.1.1: {}
2850 |
2851 | picomatch@4.0.2: {}
2852 |
2853 | possible-typed-array-names@1.1.0: {}
2854 |
2855 | postcss@8.5.3:
2856 | dependencies:
2857 | nanoid: 3.3.11
2858 | picocolors: 1.1.1
2859 | source-map-js: 1.2.1
2860 |
2861 | prelude-ls@1.2.1: {}
2862 |
2863 | prettier@3.5.3: {}
2864 |
2865 | prop-types@15.8.1:
2866 | dependencies:
2867 | loose-envify: 1.4.0
2868 | object-assign: 4.1.1
2869 | react-is: 16.13.1
2870 |
2871 | proxy-from-env@1.1.0: {}
2872 |
2873 | punycode@2.3.1: {}
2874 |
2875 | react-dom@18.3.1(react@18.3.1):
2876 | dependencies:
2877 | loose-envify: 1.4.0
2878 | react: 18.3.1
2879 | scheduler: 0.23.2
2880 |
2881 | react-is@16.13.1: {}
2882 |
2883 | react-refresh@0.17.0: {}
2884 |
2885 | react-router-dom@6.30.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
2886 | dependencies:
2887 | '@remix-run/router': 1.23.0
2888 | react: 18.3.1
2889 | react-dom: 18.3.1(react@18.3.1)
2890 | react-router: 6.30.1(react@18.3.1)
2891 |
2892 | react-router@6.30.1(react@18.3.1):
2893 | dependencies:
2894 | '@remix-run/router': 1.23.0
2895 | react: 18.3.1
2896 |
2897 | react@18.3.1:
2898 | dependencies:
2899 | loose-envify: 1.4.0
2900 |
2901 | reflect.getprototypeof@1.0.10:
2902 | dependencies:
2903 | call-bind: 1.0.8
2904 | define-properties: 1.2.1
2905 | es-abstract: 1.23.10
2906 | es-errors: 1.3.0
2907 | es-object-atoms: 1.1.1
2908 | get-intrinsic: 1.3.0
2909 | get-proto: 1.0.1
2910 | which-builtin-type: 1.2.1
2911 |
2912 | regexp.prototype.flags@1.5.4:
2913 | dependencies:
2914 | call-bind: 1.0.8
2915 | define-properties: 1.2.1
2916 | es-errors: 1.3.0
2917 | get-proto: 1.0.1
2918 | gopd: 1.2.0
2919 | set-function-name: 2.0.2
2920 |
2921 | resolve-from@4.0.0: {}
2922 |
2923 | resolve@2.0.0-next.5:
2924 | dependencies:
2925 | is-core-module: 2.16.1
2926 | path-parse: 1.0.7
2927 | supports-preserve-symlinks-flag: 1.0.0
2928 |
2929 | rollup@4.41.1:
2930 | dependencies:
2931 | '@types/estree': 1.0.7
2932 | optionalDependencies:
2933 | '@rollup/rollup-android-arm-eabi': 4.41.1
2934 | '@rollup/rollup-android-arm64': 4.41.1
2935 | '@rollup/rollup-darwin-arm64': 4.41.1
2936 | '@rollup/rollup-darwin-x64': 4.41.1
2937 | '@rollup/rollup-freebsd-arm64': 4.41.1
2938 | '@rollup/rollup-freebsd-x64': 4.41.1
2939 | '@rollup/rollup-linux-arm-gnueabihf': 4.41.1
2940 | '@rollup/rollup-linux-arm-musleabihf': 4.41.1
2941 | '@rollup/rollup-linux-arm64-gnu': 4.41.1
2942 | '@rollup/rollup-linux-arm64-musl': 4.41.1
2943 | '@rollup/rollup-linux-loongarch64-gnu': 4.41.1
2944 | '@rollup/rollup-linux-powerpc64le-gnu': 4.41.1
2945 | '@rollup/rollup-linux-riscv64-gnu': 4.41.1
2946 | '@rollup/rollup-linux-riscv64-musl': 4.41.1
2947 | '@rollup/rollup-linux-s390x-gnu': 4.41.1
2948 | '@rollup/rollup-linux-x64-gnu': 4.41.1
2949 | '@rollup/rollup-linux-x64-musl': 4.41.1
2950 | '@rollup/rollup-win32-arm64-msvc': 4.41.1
2951 | '@rollup/rollup-win32-ia32-msvc': 4.41.1
2952 | '@rollup/rollup-win32-x64-msvc': 4.41.1
2953 | fsevents: 2.3.3
2954 |
2955 | safe-array-concat@1.1.3:
2956 | dependencies:
2957 | call-bind: 1.0.8
2958 | call-bound: 1.0.4
2959 | get-intrinsic: 1.3.0
2960 | has-symbols: 1.1.0
2961 | isarray: 2.0.5
2962 |
2963 | safe-push-apply@1.0.0:
2964 | dependencies:
2965 | es-errors: 1.3.0
2966 | isarray: 2.0.5
2967 |
2968 | safe-regex-test@1.1.0:
2969 | dependencies:
2970 | call-bound: 1.0.4
2971 | es-errors: 1.3.0
2972 | is-regex: 1.2.1
2973 |
2974 | scheduler@0.23.2:
2975 | dependencies:
2976 | loose-envify: 1.4.0
2977 |
2978 | semver@6.3.1: {}
2979 |
2980 | set-function-length@1.2.2:
2981 | dependencies:
2982 | define-data-property: 1.1.4
2983 | es-errors: 1.3.0
2984 | function-bind: 1.1.2
2985 | get-intrinsic: 1.3.0
2986 | gopd: 1.2.0
2987 | has-property-descriptors: 1.0.2
2988 |
2989 | set-function-name@2.0.2:
2990 | dependencies:
2991 | define-data-property: 1.1.4
2992 | es-errors: 1.3.0
2993 | functions-have-names: 1.2.3
2994 | has-property-descriptors: 1.0.2
2995 |
2996 | set-proto@1.0.0:
2997 | dependencies:
2998 | dunder-proto: 1.0.1
2999 | es-errors: 1.3.0
3000 | es-object-atoms: 1.1.1
3001 |
3002 | shebang-command@2.0.0:
3003 | dependencies:
3004 | shebang-regex: 3.0.0
3005 |
3006 | shebang-regex@3.0.0: {}
3007 |
3008 | side-channel-list@1.0.0:
3009 | dependencies:
3010 | es-errors: 1.3.0
3011 | object-inspect: 1.13.4
3012 |
3013 | side-channel-map@1.0.1:
3014 | dependencies:
3015 | call-bound: 1.0.4
3016 | es-errors: 1.3.0
3017 | get-intrinsic: 1.3.0
3018 | object-inspect: 1.13.4
3019 |
3020 | side-channel-weakmap@1.0.2:
3021 | dependencies:
3022 | call-bound: 1.0.4
3023 | es-errors: 1.3.0
3024 | get-intrinsic: 1.3.0
3025 | object-inspect: 1.13.4
3026 | side-channel-map: 1.0.1
3027 |
3028 | side-channel@1.1.0:
3029 | dependencies:
3030 | es-errors: 1.3.0
3031 | object-inspect: 1.13.4
3032 | side-channel-list: 1.0.0
3033 | side-channel-map: 1.0.1
3034 | side-channel-weakmap: 1.0.2
3035 |
3036 | simple-zustand-devtools@1.1.0(@types/react-dom@18.3.7(@types/react@18.3.22))(@types/react@18.3.22)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zustand@5.0.5(@types/react@18.3.22)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1))):
3037 | dependencies:
3038 | '@types/react': 18.3.22
3039 | '@types/react-dom': 18.3.7(@types/react@18.3.22)
3040 | react: 18.3.1
3041 | react-dom: 18.3.1(react@18.3.1)
3042 | zustand: 5.0.5(@types/react@18.3.22)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1))
3043 |
3044 | source-map-js@1.2.1: {}
3045 |
3046 | string.prototype.matchall@4.0.12:
3047 | dependencies:
3048 | call-bind: 1.0.8
3049 | call-bound: 1.0.4
3050 | define-properties: 1.2.1
3051 | es-abstract: 1.23.10
3052 | es-errors: 1.3.0
3053 | es-object-atoms: 1.1.1
3054 | get-intrinsic: 1.3.0
3055 | gopd: 1.2.0
3056 | has-symbols: 1.1.0
3057 | internal-slot: 1.1.0
3058 | regexp.prototype.flags: 1.5.4
3059 | set-function-name: 2.0.2
3060 | side-channel: 1.1.0
3061 |
3062 | string.prototype.repeat@1.0.0:
3063 | dependencies:
3064 | define-properties: 1.2.1
3065 | es-abstract: 1.23.10
3066 |
3067 | string.prototype.trim@1.2.10:
3068 | dependencies:
3069 | call-bind: 1.0.8
3070 | call-bound: 1.0.4
3071 | define-data-property: 1.1.4
3072 | define-properties: 1.2.1
3073 | es-abstract: 1.23.10
3074 | es-object-atoms: 1.1.1
3075 | has-property-descriptors: 1.0.2
3076 |
3077 | string.prototype.trimend@1.0.9:
3078 | dependencies:
3079 | call-bind: 1.0.8
3080 | call-bound: 1.0.4
3081 | define-properties: 1.2.1
3082 | es-object-atoms: 1.1.1
3083 |
3084 | string.prototype.trimstart@1.0.8:
3085 | dependencies:
3086 | call-bind: 1.0.8
3087 | define-properties: 1.2.1
3088 | es-object-atoms: 1.1.1
3089 |
3090 | strip-json-comments@3.1.1: {}
3091 |
3092 | supports-color@7.2.0:
3093 | dependencies:
3094 | has-flag: 4.0.0
3095 |
3096 | supports-preserve-symlinks-flag@1.0.0: {}
3097 |
3098 | tinyglobby@0.2.13:
3099 | dependencies:
3100 | fdir: 6.4.4(picomatch@4.0.2)
3101 | picomatch: 4.0.2
3102 |
3103 | type-check@0.4.0:
3104 | dependencies:
3105 | prelude-ls: 1.2.1
3106 |
3107 | typed-array-buffer@1.0.3:
3108 | dependencies:
3109 | call-bound: 1.0.4
3110 | es-errors: 1.3.0
3111 | is-typed-array: 1.1.15
3112 |
3113 | typed-array-byte-length@1.0.3:
3114 | dependencies:
3115 | call-bind: 1.0.8
3116 | for-each: 0.3.5
3117 | gopd: 1.2.0
3118 | has-proto: 1.2.0
3119 | is-typed-array: 1.1.15
3120 |
3121 | typed-array-byte-offset@1.0.4:
3122 | dependencies:
3123 | available-typed-arrays: 1.0.7
3124 | call-bind: 1.0.8
3125 | for-each: 0.3.5
3126 | gopd: 1.2.0
3127 | has-proto: 1.2.0
3128 | is-typed-array: 1.1.15
3129 | reflect.getprototypeof: 1.0.10
3130 |
3131 | typed-array-length@1.0.7:
3132 | dependencies:
3133 | call-bind: 1.0.8
3134 | for-each: 0.3.5
3135 | gopd: 1.2.0
3136 | is-typed-array: 1.1.15
3137 | possible-typed-array-names: 1.1.0
3138 | reflect.getprototypeof: 1.0.10
3139 |
3140 | unbox-primitive@1.1.0:
3141 | dependencies:
3142 | call-bound: 1.0.4
3143 | has-bigints: 1.1.0
3144 | has-symbols: 1.1.0
3145 | which-boxed-primitive: 1.1.1
3146 |
3147 | update-browserslist-db@1.1.3(browserslist@4.24.5):
3148 | dependencies:
3149 | browserslist: 4.24.5
3150 | escalade: 3.2.0
3151 | picocolors: 1.1.1
3152 |
3153 | uri-js@4.4.1:
3154 | dependencies:
3155 | punycode: 2.3.1
3156 |
3157 | use-sync-external-store@1.5.0(react@18.3.1):
3158 | dependencies:
3159 | react: 18.3.1
3160 | optional: true
3161 |
3162 | vite@6.3.5:
3163 | dependencies:
3164 | esbuild: 0.25.4
3165 | fdir: 6.4.4(picomatch@4.0.2)
3166 | picomatch: 4.0.2
3167 | postcss: 8.5.3
3168 | rollup: 4.41.1
3169 | tinyglobby: 0.2.13
3170 | optionalDependencies:
3171 | fsevents: 2.3.3
3172 |
3173 | which-boxed-primitive@1.1.1:
3174 | dependencies:
3175 | is-bigint: 1.1.0
3176 | is-boolean-object: 1.2.2
3177 | is-number-object: 1.1.1
3178 | is-string: 1.1.1
3179 | is-symbol: 1.1.1
3180 |
3181 | which-builtin-type@1.2.1:
3182 | dependencies:
3183 | call-bound: 1.0.4
3184 | function.prototype.name: 1.1.8
3185 | has-tostringtag: 1.0.2
3186 | is-async-function: 2.1.1
3187 | is-date-object: 1.1.0
3188 | is-finalizationregistry: 1.1.1
3189 | is-generator-function: 1.1.0
3190 | is-regex: 1.2.1
3191 | is-weakref: 1.1.1
3192 | isarray: 2.0.5
3193 | which-boxed-primitive: 1.1.1
3194 | which-collection: 1.0.2
3195 | which-typed-array: 1.1.19
3196 |
3197 | which-collection@1.0.2:
3198 | dependencies:
3199 | is-map: 2.0.3
3200 | is-set: 2.0.3
3201 | is-weakmap: 2.0.2
3202 | is-weakset: 2.0.4
3203 |
3204 | which-typed-array@1.1.19:
3205 | dependencies:
3206 | available-typed-arrays: 1.0.7
3207 | call-bind: 1.0.8
3208 | call-bound: 1.0.4
3209 | for-each: 0.3.5
3210 | get-proto: 1.0.1
3211 | gopd: 1.2.0
3212 | has-tostringtag: 1.0.2
3213 |
3214 | which@2.0.2:
3215 | dependencies:
3216 | isexe: 2.0.0
3217 |
3218 | word-wrap@1.2.5: {}
3219 |
3220 | yallist@3.1.1: {}
3221 |
3222 | yocto-queue@0.1.0: {}
3223 |
3224 | zustand@5.0.5(@types/react@18.3.22)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)):
3225 | optionalDependencies:
3226 | '@types/react': 18.3.22
3227 | react: 18.3.1
3228 | use-sync-external-store: 1.5.0(react@18.3.1)
3229 |
--------------------------------------------------------------------------------