├── .gitignore ├── README.md ├── assets ├── bookstore-api-account.png ├── bookstore-basic.png ├── bookstore-form.png ├── bookstore-next.png ├── bookstore-react.png └── enable-issue-feature.png ├── assignment-1 ├── README.md ├── index.html ├── script.js └── style.css ├── assignment-2 ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt └── src │ ├── App.css │ ├── App.js │ ├── App.test.js │ ├── index.css │ ├── index.js │ ├── logo.svg │ ├── reportWebVitals.js │ └── setupTests.js ├── assignment-3 ├── .eslintrc ├── .gitignore ├── .prettierrc ├── README.md ├── package.json ├── pnpm-lock.yaml ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt ├── src │ ├── App.css │ ├── App.test.tsx │ ├── App.tsx │ ├── index.css │ ├── index.tsx │ ├── logo.svg │ ├── react-app-env.d.ts │ ├── reportWebVitals.ts │ └── setupTests.ts └── tsconfig.json ├── assignment-4 ├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── README.md ├── next.config.js ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public │ ├── next.svg │ └── vercel.svg ├── src │ └── app │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx ├── tailwind.config.ts └── tsconfig.json ├── assignment-5 └── README.md ├── assignment-6 └── README.md ├── assignment-7 └── README.md └── final-project └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | .DS_Store 3 | .vscode -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Frontend Training 2023 2 | 3 | Welcome to the Frontend Training 2023 repository! This is where you'll find exercises and templates meant to guide you through 8 training sessions on frontend development organized by [Dwarves Foundation](https://d.foundation/). 4 | 5 | ## Get Started 6 | 7 | 1. **Fork the Repository:** If you're a part of this class, kindly [fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo#forking-a-repository) this repository. 8 | 2. **Set Your Fork to Public:** This helps us in evaluating and collaborating on your assignments. 9 | 3. **Syncing and Updates:** After every session, we will push relevant assignments here. Ensure you [sync your forked repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork) to pull the exercise templates. 10 | 11 | ## Assignments Schedule 12 | 13 | | Day | Topic | Deadline | 14 | | --- | ------------------------------------------------------------------------- | ---------- | 15 | | 1 | [HTML, CSS & JavaScript](./assignment-1/) | 21/09/2023 | 16 | | 2 | [React & State management](./assignment-2/) | 26/09/2023 | 17 | | 3 | [Tooling: Webpack, Babel, TypeScript, ESLint & Prettier](./assignment-3/) | 01/10/2023 | 18 | | 4 | [NextJS & TailwindCSS](./assignment-4/) | 06/10/2023 | 19 | | 5 | [Form handling](./assignment-5/) | 08/10/2023 | 20 | | 6 | [Authentication & API Integration](./assignment-6/) | 13/10/2023 | 21 | | 7 | [Type-safe client server](./assignment-7/) | 15/10/2023 | 22 | | 8 | [Final project](./final-project/) | 24/10/2023 | 23 | 24 | Stay tuned for updates on future assignments! 25 | 26 | ## Assignment Submission 27 | 28 | To submit your assignments, please ensure you have enabled the **Issues** feature in your forked repository. If it's disabled by default, you can enable it by navigating to `Settings > General` on your fork. Scroll down to the `Features` sub-section and check the `Issues` box. 29 | 30 | ![how to enable issue feature on fork](./assets/enable-issue-feature.png). 31 | 32 | Once enabled, follow these steps for each submission: 33 | 34 | 1. **Code Submission**: Place your submitted code in the respective `/assignment-[number]` folder on your fork. 35 | 2. **Deployment**: Deploy your project on a cloud service to generate a public preview link. 36 | 3. **Issue Creation**: Open an issue in your forked repository with the title `Submission for assignment [number]`. Ensure you include the public preview link in the issue description. Refer to [this example issue](https://github.com/zlatanpham/df-frontend-2023/issues/1) for guidance. 37 | 38 | ## Evaluation Criteria 39 | 40 | We evaluate assignments based on the following criteria: 41 | 42 | - **Timeliness**: The assignment must be submitted by the deadline (based on the time of the last commit in the assignment folder). 43 | - **Requirements Fulfillment**: The assignment must fulfill all mandatory requirements. 44 | 45 | Our team will carefully assess your submissions. After evaluation, we'll share the results and offer feedback on the corresponding open issue. 46 | 47 | ## Support 48 | 49 | Should you have any questions or run into any issues, don't hesitate to reach out on [our Discord](https://discord.com/invite/Y2vvH9rQE4). We are happy to help! 50 | 51 | Best of luck with your training! 🌟 52 | -------------------------------------------------------------------------------- /assets/bookstore-api-account.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assets/bookstore-api-account.png -------------------------------------------------------------------------------- /assets/bookstore-basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assets/bookstore-basic.png -------------------------------------------------------------------------------- /assets/bookstore-form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assets/bookstore-form.png -------------------------------------------------------------------------------- /assets/bookstore-next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assets/bookstore-next.png -------------------------------------------------------------------------------- /assets/bookstore-react.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assets/bookstore-react.png -------------------------------------------------------------------------------- /assets/enable-issue-feature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assets/enable-issue-feature.png -------------------------------------------------------------------------------- /assignment-1/README.md: -------------------------------------------------------------------------------- 1 | # HTML, CSS & JavaScript 2 | 3 | Design and develop a simple bookstore Content Management System (CMS) table that lets users view and add records. For this task, you'll need to use HTML, CSS, and JavaScript to craft a user-friendly interface for content management. 4 | 5 | ![bookstore preview](../assets/bookstore-basic.png). 6 | 7 | ### **Requirements** 8 | 9 | - Set up an initial CMS table with columns for various attributes such as name, author, and topic. 10 | - Fill the table with sample records or placeholder data. 11 | - Enable book search by title. 12 | - Permit users to input data for a new record and incorporate it into the table (no field validation necessary). 13 | - Allow users to delete rows from the table. 14 | 15 | **Assignment Deliverables** 16 | 17 | - Craft the project using **HTML, CSS,** and **JavaScript**; no need for frameworks or libraries. 18 | - The project should be deployable, and a demo link must be provided for review (While you can select any deployment platform, we've provided a [tutorial on using Vercel](https://dwarves.notion.site/Steps-to-Deploy-Your-Assignments-Using-Vercel-cff73a5fe1024e47a4f512bbb7f93c19) to simplify the process.) 19 | - **Bonus:** Store the data in the browser's [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage). 20 | 21 | **What Are We Looking For?** 22 | 23 | - The objective here is to assess how you organize your work, employ JavaScript for basic DOM manipulations, utilize semantic HTML, and style elements like the table, input fields, and buttons with CSS. 24 | - The app should be visually appealing, but there's no need to be overkill; a minimalist design is perfectly acceptable. 25 | 26 | ### Submission 27 | 28 | - Begin your work using the html, js, and css files found in the assignment folder. 29 | - Ensure all the assignment code resides in the `/assignment-1` directory. 30 | - The final submission deadline is **21/09/2023**. 31 | - After completing and setting up the deployable demo, [open a Github issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/creating-an-issue) in your forked repository titled **Submission for assignment 1**. Include the demo link in the description. 32 | -------------------------------------------------------------------------------- /assignment-1/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Bookstore 7 | 8 | 9 | 10 | 11 | Hello world 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /assignment-1/script.js: -------------------------------------------------------------------------------- 1 | // Your JS code goes here -------------------------------------------------------------------------------- /assignment-1/style.css: -------------------------------------------------------------------------------- 1 | html { 2 | height: 100%; 3 | width: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /assignment-2/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /assignment-2/README.md: -------------------------------------------------------------------------------- 1 | # React & State Management 2 | 3 | In the previous assignment, we built a simple CMS table using just HTML, CSS, and JavaScript. For this assignment, you're tasked with recreating the same interface using React. This will allow us to appreciate how React enhances our approach to web app development. 4 | 5 | ![bookstore preview](../assets/bookstore-react.png). 6 | 7 | ## Requirements 8 | 9 | - Port the functionality from [Assignment 01](../assignment-1/) into this React project. 10 | - **New**: Introduce pagination for the table, allowing users to navigate between pages. Display 5 records per page. 11 | 12 | ### Deliverables 13 | 14 | - Design the React project incorporating all essential components and functionalities. 15 | - Ensure the project can be deployed. Provide a demo link for review. While you can choose any deployment platform, we've included [a tutorial](https://www.notion.so/Steps-to-Deploy-Your-Assignments-Using-Vercel-cff73a5fe1024e47a4f512bbb7f93c19?pvs=21) on using Vercel to guide you through the process. 16 | - **Bonus**: Enhance user experience by adding a toggle for light/dark mode themes. 17 | 18 | ### What Are We Looking For? 19 | 20 | - Proper structuring of React components and effective state management with Hooks. 21 | - Full implementation of all listed features. 22 | - Adherence to styling and design principles to produce a visually appealing, minimalist UI. 23 | 24 | ## Submission 25 | 26 | - Begin your work using the template found in the assignment folder. This project is bootstrapped by [Create React App](https://create-react-app.dev/). Visit the document to see the details but you can use the following commands to start the project: 27 | ```bash 28 | # Install packages 29 | npm install 30 | # Run the app in development mode 31 | npm start 32 | # Build the app for production 33 | npm run build 34 | ``` 35 | - Ensure all the assignment code resides in the `/assignment-2` directory. 36 | The final submission deadline is **26/09/2023**. 37 | - After completing and setting up the deployable demo, open a Github issue in your forked repository titled **Submission for assignment 2**. Include the demo link in the description. 38 | -------------------------------------------------------------------------------- /assignment-2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "assignment-2", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@testing-library/jest-dom": "^5.17.0", 7 | "@testing-library/react": "^13.4.0", 8 | "@testing-library/user-event": "^13.5.0", 9 | "react": "^18.2.0", 10 | "react-dom": "^18.2.0", 11 | "react-scripts": "5.0.1", 12 | "web-vitals": "^2.1.4" 13 | }, 14 | "scripts": { 15 | "start": "react-scripts start", 16 | "build": "react-scripts build", 17 | "test": "react-scripts test", 18 | "eject": "react-scripts eject" 19 | }, 20 | "eslintConfig": { 21 | "extends": [ 22 | "react-app", 23 | "react-app/jest" 24 | ] 25 | }, 26 | "browserslist": { 27 | "production": [ 28 | ">0.2%", 29 | "not dead", 30 | "not op_mini all" 31 | ], 32 | "development": [ 33 | "last 1 chrome version", 34 | "last 1 firefox version", 35 | "last 1 safari version" 36 | ] 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /assignment-2/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assignment-2/public/favicon.ico -------------------------------------------------------------------------------- /assignment-2/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | React App 28 | 29 | 30 | 31 |
32 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /assignment-2/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assignment-2/public/logo192.png -------------------------------------------------------------------------------- /assignment-2/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assignment-2/public/logo512.png -------------------------------------------------------------------------------- /assignment-2/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /assignment-2/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /assignment-2/src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | text-align: center; 3 | } 4 | 5 | .App-logo { 6 | height: 40vmin; 7 | pointer-events: none; 8 | } 9 | 10 | @media (prefers-reduced-motion: no-preference) { 11 | .App-logo { 12 | animation: App-logo-spin infinite 20s linear; 13 | } 14 | } 15 | 16 | .App-header { 17 | background-color: #282c34; 18 | min-height: 100vh; 19 | display: flex; 20 | flex-direction: column; 21 | align-items: center; 22 | justify-content: center; 23 | font-size: calc(10px + 2vmin); 24 | color: white; 25 | } 26 | 27 | .App-link { 28 | color: #61dafb; 29 | } 30 | 31 | @keyframes App-logo-spin { 32 | from { 33 | transform: rotate(0deg); 34 | } 35 | to { 36 | transform: rotate(360deg); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /assignment-2/src/App.js: -------------------------------------------------------------------------------- 1 | import logo from './logo.svg'; 2 | import './App.css'; 3 | 4 | function App() { 5 | return ( 6 |
7 |
8 | logo 9 |

10 | Edit src/App.js and save to reload. 11 |

12 | 18 | Learn React 19 | 20 |
21 |
22 | ); 23 | } 24 | 25 | export default App; 26 | -------------------------------------------------------------------------------- /assignment-2/src/App.test.js: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import App from './App'; 3 | 4 | test('renders learn react link', () => { 5 | render(); 6 | const linkElement = screen.getByText(/learn react/i); 7 | expect(linkElement).toBeInTheDocument(); 8 | }); 9 | -------------------------------------------------------------------------------- /assignment-2/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /assignment-2/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | const root = ReactDOM.createRoot(document.getElementById('root')); 8 | root.render( 9 | 10 | 11 | 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /assignment-2/src/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assignment-2/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /assignment-2/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /assignment-3/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["./node_modules/@dwarvesf/react-eslint-config"], 3 | "env": { 4 | "es6": true, 5 | "browser": true, 6 | "node": true, 7 | "jest": true 8 | }, 9 | "globals": { 10 | "io": true, 11 | "chrome": true 12 | }, 13 | "parserOptions": { 14 | "ecmaVersion": 10, 15 | "ecmaFeatures": { 16 | "jsx": true 17 | }, 18 | "project": ["./tsconfig.json"], 19 | "createDefaultProgram": true, 20 | "sourceType": "module" 21 | }, 22 | "rules": {}, 23 | "overrides": [ 24 | { 25 | "files": ["**/*.ts?(x)", "**/*.js?(x)"], 26 | "rules": { 27 | "react/react-in-jsx-scope": "off", 28 | "react/jsx-sort-props": "off", 29 | "react/function-component-definition": "off", 30 | "no-shadow": "off" 31 | } 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /assignment-3/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /assignment-3/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "bracketSpacing": true, 3 | "bracketSameLine": false, 4 | "jsxSingleQuote": false, 5 | "printWidth": 80, 6 | "proseWrap": "always", 7 | "semi": false, 8 | "singleQuote": true, 9 | "tabWidth": 2, 10 | "trailingComma": "all", 11 | "htmlWhitespaceSensitivity": "ignore" 12 | } 13 | -------------------------------------------------------------------------------- /assignment-3/README.md: -------------------------------------------------------------------------------- 1 | # Development Tooling 2 | 3 | In the previous assignment, we took a leap from a traditional web interface to a modern React application. Now, we're going to level up the project by incorporating TypeScript for type safety and setting up ESLint rules to ensure clean and convention-following code. 4 | 5 | ## Requirements 6 | 7 | - Convert the [Assignment 02's React Project](../assignment-2/) into TypeScript to leverage better type safety and developer experience. 8 | - Follow the predefined convention configuration from [@dwarvesf/react-eslint-config](https://github.com/dwarvesf/react-toolkit/tree/master/packages/eslint-config) to promote error-free code. 9 | 10 | ### Deliverables 11 | 12 | - Deliver a Typescript-based React project that is well-structured, free of linting errors, and consistently formatted. 13 | - **Bonus**: Enhance developer experience and code quality by configuring ESLint to run automatically before each commit. This way, every commit will abide by established code conventions. You might find tools like [Husky](https://typicode.github.io/husky/) and [lint-staged](https://github.com/okonet/lint-staged) valuable for this task. 14 | 15 | ### What Are We Looking For? 16 | 17 | - A comprehensive and organized TypeScript project, ensuring safer and more predictable code. 18 | - Effectively follow ESLint rules, demonstrating an adherence to coding standards and conventions. 19 | 20 | ## Submission 21 | 22 | - Begin your project based on the existing codebase in `/assignment-3` folder. Use the following commands to get started with PNPM: 23 | ```bash 24 | # Install packages with PNPM 25 | pnpm install 26 | # Run the app in development mode 27 | pnpm start 28 | # Build the app for production 29 | pnpm run build 30 | ``` 31 | - Ensure all the assignment code resides in the `/assignment-3` directory. 32 | - The final submission deadline is **01/10/2023**. 33 | - After completing and setting up the deployable demo, open a Github issue in your forked repository titled **Submission for assignment 3**. Include the demo link in the description. 34 | 35 | -------------------------------------------------------------------------------- /assignment-3/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "assignment-3", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "react": "^18.2.0", 7 | "react-dom": "^18.2.0", 8 | "react-scripts": "5.0.1", 9 | "typescript": "^4.9.5", 10 | "web-vitals": "^2.1.4" 11 | }, 12 | "scripts": { 13 | "start": "react-scripts start", 14 | "build": "react-scripts build", 15 | "test": "react-scripts test", 16 | "eject": "react-scripts eject", 17 | "lint": "eslint src --ext .js,.jsx,.ts,.tsx", 18 | "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"", 19 | "preinstall": "npx only-allow pnpm" 20 | }, 21 | "eslintConfig": { 22 | "extends": [ 23 | "react-app", 24 | "react-app/jest" 25 | ] 26 | }, 27 | "browserslist": { 28 | "production": [ 29 | ">0.2%", 30 | "not dead", 31 | "not op_mini all" 32 | ], 33 | "development": [ 34 | "last 1 chrome version", 35 | "last 1 firefox version", 36 | "last 1 safari version" 37 | ] 38 | }, 39 | "devDependencies": { 40 | "@dwarvesf/react-eslint-config": "^1.0.1", 41 | "@testing-library/jest-dom": "^6.1.3", 42 | "@testing-library/react": "^13.4.0", 43 | "@testing-library/user-event": "^13.5.0", 44 | "@types/jest": "^27.5.2", 45 | "@types/node": "^16.18.52", 46 | "@types/react": "^18.2.22", 47 | "@types/react-dom": "^18.2.7", 48 | "prettier": "^3.0.3" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /assignment-3/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assignment-3/public/favicon.ico -------------------------------------------------------------------------------- /assignment-3/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | React App 28 | 29 | 30 | 31 |
32 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /assignment-3/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assignment-3/public/logo192.png -------------------------------------------------------------------------------- /assignment-3/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assignment-3/public/logo512.png -------------------------------------------------------------------------------- /assignment-3/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /assignment-3/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /assignment-3/src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | text-align: center; 3 | } 4 | 5 | .App-logo { 6 | height: 40vmin; 7 | pointer-events: none; 8 | } 9 | 10 | @media (prefers-reduced-motion: no-preference) { 11 | .App-logo { 12 | animation: App-logo-spin infinite 20s linear; 13 | } 14 | } 15 | 16 | .App-header { 17 | background-color: #282c34; 18 | min-height: 100vh; 19 | display: flex; 20 | flex-direction: column; 21 | align-items: center; 22 | justify-content: center; 23 | font-size: calc(10px + 2vmin); 24 | color: white; 25 | } 26 | 27 | .App-link { 28 | color: #61dafb; 29 | } 30 | 31 | @keyframes App-logo-spin { 32 | from { 33 | transform: rotate(0deg); 34 | } 35 | to { 36 | transform: rotate(360deg); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /assignment-3/src/App.test.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { render, screen } from '@testing-library/react' 3 | import App from './App' 4 | 5 | test('renders learn react link', () => { 6 | render() 7 | const linkElement = screen.getByText(/learn react/i) 8 | expect(linkElement).toBeInTheDocument() 9 | }) 10 | -------------------------------------------------------------------------------- /assignment-3/src/App.tsx: -------------------------------------------------------------------------------- 1 | import logo from './logo.svg' 2 | import './App.css' 3 | 4 | function App() { 5 | return ( 6 |
7 |
8 | logo 9 |

10 | 11 | Edit src/App.js and save to reload. 12 |

13 | 19 | Learn React 20 | 21 |
22 |
23 | ) 24 | } 25 | 26 | export default App 27 | -------------------------------------------------------------------------------- /assignment-3/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /assignment-3/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import './index.css' 4 | import App from './App' 5 | import reportWebVitals from './reportWebVitals' 6 | 7 | const rootElement = document.getElementById('root') 8 | 9 | if (rootElement) { 10 | const root = ReactDOM.createRoot(rootElement) 11 | root.render( 12 | 13 | 14 | , 15 | ) 16 | // If you want to start measuring performance in your app, pass a function 17 | // to log results (for example: reportWebVitals(console.log)) 18 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 19 | reportWebVitals() 20 | } 21 | -------------------------------------------------------------------------------- /assignment-3/src/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assignment-3/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /assignment-3/src/reportWebVitals.ts: -------------------------------------------------------------------------------- 1 | import { ReportHandler } from 'web-vitals' 2 | 3 | const reportWebVitals = (onPerfEntry?: ReportHandler) => { 4 | if (onPerfEntry && onPerfEntry instanceof Function) { 5 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 6 | getCLS(onPerfEntry) 7 | getFID(onPerfEntry) 8 | getFCP(onPerfEntry) 9 | getLCP(onPerfEntry) 10 | getTTFB(onPerfEntry) 11 | }) 12 | } 13 | } 14 | 15 | export default reportWebVitals 16 | -------------------------------------------------------------------------------- /assignment-3/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom' 6 | -------------------------------------------------------------------------------- /assignment-3/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "jsx": "preserve", 4 | "allowJs": true, 5 | "esModuleInterop": true, 6 | "allowSyntheticDefaultImports": true, 7 | "types": ["node", "jest"], 8 | "strict": true, 9 | "noUnusedLocals": false, 10 | "noUnusedParameters": true, 11 | "forceConsistentCasingInFileNames": false, 12 | "noEmit": true, 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "noImplicitAny": false, 16 | "checkJs": false, 17 | "strictNullChecks": true, 18 | "strictFunctionTypes": true, 19 | "strictPropertyInitialization": true, 20 | "useUnknownInCatchVariables": false, 21 | "noImplicitThis": true, 22 | "target": "ESNext", 23 | "lib": ["dom", "dom.iterable", "esnext"], 24 | "skipLibCheck": true, 25 | "module": "esnext", 26 | "moduleResolution": "node", 27 | "incremental": true 28 | }, 29 | "include": [ 30 | "**/*.ts", 31 | "**/*.tsx", 32 | "**/*.d.ts", 33 | "**/*.js", 34 | "**/*.jsx", 35 | ], 36 | "exclude": ["node_modules"] 37 | } 38 | -------------------------------------------------------------------------------- /assignment-4/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: [ 4 | './node_modules/@dwarvesf/react-eslint-config', 5 | 'eslint:recommended', 6 | 'plugin:react/recommended', 7 | 'plugin:prettier/recommended', 8 | 'plugin:@typescript-eslint/eslint-recommended', 9 | 'plugin:@typescript-eslint/recommended', 10 | 'next', 11 | 'next/core-web-vitals', 12 | ], 13 | ignorePatterns: [ 14 | 'node_modules/', 15 | ], 16 | env: { 17 | es6: true, 18 | browser: true, 19 | node: true, 20 | }, 21 | globals: { 22 | io: true, 23 | chrome: true, 24 | }, 25 | parserOptions: { 26 | ecmaVersion: 10, 27 | ecmaFeatures: { 28 | jsx: true, 29 | }, 30 | project: ['./tsconfig.json'], 31 | tsconfigRootDir: __dirname, 32 | createDefaultProgram: true, 33 | sourceType: 'module', 34 | babelOptions: { 35 | presets: [require.resolve('next/babel')], 36 | }, 37 | }, 38 | rules: {}, 39 | overrides: [ 40 | { 41 | files: ['**/*.ts?(x)', '**/*.js?(x)'], 42 | rules: { 43 | 'react/react-in-jsx-scope': 'off', 44 | 'react/jsx-sort-props': 'off', 45 | 'react/function-component-definition': 'off', 46 | 'no-shadow': 'off', 47 | }, 48 | }, 49 | ], 50 | } 51 | -------------------------------------------------------------------------------- /assignment-4/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env*.local 29 | 30 | # vercel 31 | .vercel 32 | 33 | # typescript 34 | *.tsbuildinfo 35 | next-env.d.ts 36 | 37 | # tools 38 | /.vscode 39 | .eslintcache 40 | -------------------------------------------------------------------------------- /assignment-4/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "bracketSpacing": true, 3 | "bracketSameLine": false, 4 | "jsxSingleQuote": false, 5 | "printWidth": 80, 6 | "proseWrap": "always", 7 | "semi": false, 8 | "singleQuote": true, 9 | "tabWidth": 2, 10 | "trailingComma": "all", 11 | "htmlWhitespaceSensitivity": "ignore" 12 | } 13 | -------------------------------------------------------------------------------- /assignment-4/README.md: -------------------------------------------------------------------------------- 1 | # NextJS & Tailwind 2 | 3 | Adapt the CMS Bookstore interface from [Assignment 02's React Project](../assignment-2/) into a NextJS application. This transition will highlight the flexibility and power of the framework. Enhance the UI using TailwindCSS to ensure a responsive and modern design. 4 | 5 |

6 | 7 |

8 | 9 | ## Requirements 10 | 11 | 1. Use the functionalities from [Assignment 02](../assignment-2/) as a foundation. Transform the project to utilize the power of NextJS. 12 | 2. Employ TailwindCSS exclusively for the project's styling needs. 13 | 3. View a book's detail by clicking its "View" button. This should navigate the user to **`/book/:id`**. 14 | 4. Implement a `404 page` for invalid routes. If a user attempts to access a non-existent book id, display a `Not Found` UI. 15 | 5. Within the book detail page, incorporate a "Delete" button. Once a book is deleted successfully, redirect users back to the main listing page and ensure the deleted book is no longer displayed. 16 | 17 | ### Deliverables 18 | 19 | - A well-structured NextJS project written in TypeScript, incorporating all necessary components and functionalities. Ensure that TailwindCSS is utilized effectively for all styling aspects. 20 | - The code should be fully formatted, following best practices and conventions, with ESLint and TypeScript rules from [Assignment 03](../assignment-3/). 21 | - Ensure the project can be deployed. Provide a demo link for review. While you have the freedom to choose any deployment platform, our recommended platform is Vercel. (Refer to the provided [tutorial](https://www.notion.so/Steps-to-Deploy-Your-Assignments-Using-Vercel-cff73a5fe1024e47a4f512bbb7f93c19?pvs=21) on using Vercel for deployment guidance). 22 | - **Bonus:** Integrate a light and dark mode toggle for the UI using TailwindCSS. 23 | - **Bonus**: for an enhanced user experience, persist the search query and pagination state in the URL. For instance, if a user searches for a book with the keyword "abc" and is on page 2 of the results, the URL should reflect **`/?q=abc&page=2`**. 24 | 25 | ### What Are We Looking For? 26 | 27 | - Proper use of NextJS framework & TailwindCSS. 28 | - Full implementation of all listed features. 29 | - Improvement from feedback from your previous assignments 30 | 31 | ## Submission 32 | 33 | - Begin with the template found in the assignment folder. This project should be initialized using NextJS and TailwindCSS. To guide you, you can use the following commands: 34 | 35 | ```bash 36 | # Install packages 37 | pnpm install 38 | # Run the app in development mode 39 | pnpm dev 40 | # Build the app for production 41 | pnpm build 42 | ``` 43 | 44 | - Ensure all assignment code is placed within the **`/assignment-4`** directory. The final submission deadline is **06/10/2023**. 45 | - After finalizing and ensuring a deployable demo, open a Github issue in your forked repository titled "**Submission for Assignment 4.**" Include the demo link in the description. 46 | -------------------------------------------------------------------------------- /assignment-4/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = nextConfig 7 | -------------------------------------------------------------------------------- /assignment-4/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "assignment-4", 3 | "version": "0.1.0", 4 | "private": true, 5 | "description": "DF 2023 Assignment 4", 6 | "author": "Dwarves Foundation", 7 | "repository": { 8 | "type": "git", 9 | "url": "git+https://github.com/dwarvesf/df-frontend-2023.git" 10 | }, 11 | "scripts": { 12 | "dev": "next dev", 13 | "build": "next build", 14 | "start": "next start", 15 | "lint": "eslint src --ext .js,.jsx,.ts,.tsx", 16 | "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"", 17 | "preinstall": "npx only-allow pnpm" 18 | }, 19 | "dependencies": { 20 | "next": "^13.5.3", 21 | "react": "^18.2.0", 22 | "react-dom": "^18.2.0" 23 | }, 24 | "devDependencies": { 25 | "@dwarvesf/react-eslint-config": "^1.0.1", 26 | "@next/eslint-plugin-next": "^13.5.3", 27 | "@types/node": "^20.7.0", 28 | "@types/react": "^18.2.22", 29 | "@types/react-dom": "^18.2.7", 30 | "autoprefixer": "^10.4.16", 31 | "eslint": "^8.50.0", 32 | "eslint-config-next": "^13.5.3", 33 | "postcss": "^8.4.30", 34 | "prettier": "^3.0.3", 35 | "tailwindcss": "^3.3.3", 36 | "typescript": "^5.2.2" 37 | }, 38 | "engines": { 39 | "node": ">=14.0.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /assignment-4/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | next: 9 | specifier: ^13.5.3 10 | version: 13.5.3(react-dom@18.2.0)(react@18.2.0) 11 | react: 12 | specifier: ^18.2.0 13 | version: 18.2.0 14 | react-dom: 15 | specifier: ^18.2.0 16 | version: 18.2.0(react@18.2.0) 17 | 18 | devDependencies: 19 | '@dwarvesf/react-eslint-config': 20 | specifier: ^1.0.1 21 | version: 1.0.1(@typescript-eslint/eslint-plugin@6.7.3)(@typescript-eslint/parser@6.7.3)(babel-eslint@10.1.0)(eslint-config-airbnb-typescript@17.1.0)(eslint-config-airbnb@19.0.4)(eslint-config-prettier@8.10.0)(eslint-config-react@1.1.7)(eslint-plugin-import@2.28.1)(eslint-plugin-jsx-a11y@6.7.1)(eslint-plugin-prettier@5.0.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint-plugin-testing-library@5.11.1)(eslint@8.50.0) 22 | '@next/eslint-plugin-next': 23 | specifier: ^13.5.3 24 | version: 13.5.3 25 | '@types/node': 26 | specifier: ^20.7.0 27 | version: 20.7.0 28 | '@types/react': 29 | specifier: ^18.2.22 30 | version: 18.2.22 31 | '@types/react-dom': 32 | specifier: ^18.2.7 33 | version: 18.2.7 34 | autoprefixer: 35 | specifier: ^10.4.16 36 | version: 10.4.16(postcss@8.4.30) 37 | eslint: 38 | specifier: ^8.50.0 39 | version: 8.50.0 40 | eslint-config-next: 41 | specifier: ^13.5.3 42 | version: 13.5.3(eslint@8.50.0)(typescript@5.2.2) 43 | postcss: 44 | specifier: ^8.4.30 45 | version: 8.4.30 46 | prettier: 47 | specifier: ^3.0.3 48 | version: 3.0.3 49 | tailwindcss: 50 | specifier: ^3.3.3 51 | version: 3.3.3 52 | typescript: 53 | specifier: ^5.2.2 54 | version: 5.2.2 55 | 56 | packages: 57 | 58 | /@aashutoshrathi/word-wrap@1.2.6: 59 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 60 | engines: {node: '>=0.10.0'} 61 | dev: true 62 | 63 | /@alloc/quick-lru@5.2.0: 64 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 65 | engines: {node: '>=10'} 66 | dev: true 67 | 68 | /@babel/code-frame@7.22.13: 69 | resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} 70 | engines: {node: '>=6.9.0'} 71 | dependencies: 72 | '@babel/highlight': 7.22.20 73 | chalk: 2.4.2 74 | dev: true 75 | 76 | /@babel/generator@7.23.0: 77 | resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} 78 | engines: {node: '>=6.9.0'} 79 | dependencies: 80 | '@babel/types': 7.23.0 81 | '@jridgewell/gen-mapping': 0.3.3 82 | '@jridgewell/trace-mapping': 0.3.19 83 | jsesc: 2.5.2 84 | dev: true 85 | 86 | /@babel/helper-environment-visitor@7.22.20: 87 | resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} 88 | engines: {node: '>=6.9.0'} 89 | dev: true 90 | 91 | /@babel/helper-function-name@7.23.0: 92 | resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} 93 | engines: {node: '>=6.9.0'} 94 | dependencies: 95 | '@babel/template': 7.22.15 96 | '@babel/types': 7.23.0 97 | dev: true 98 | 99 | /@babel/helper-hoist-variables@7.22.5: 100 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 101 | engines: {node: '>=6.9.0'} 102 | dependencies: 103 | '@babel/types': 7.23.0 104 | dev: true 105 | 106 | /@babel/helper-split-export-declaration@7.22.6: 107 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 108 | engines: {node: '>=6.9.0'} 109 | dependencies: 110 | '@babel/types': 7.23.0 111 | dev: true 112 | 113 | /@babel/helper-string-parser@7.22.5: 114 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} 115 | engines: {node: '>=6.9.0'} 116 | dev: true 117 | 118 | /@babel/helper-validator-identifier@7.22.20: 119 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 120 | engines: {node: '>=6.9.0'} 121 | dev: true 122 | 123 | /@babel/highlight@7.22.20: 124 | resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} 125 | engines: {node: '>=6.9.0'} 126 | dependencies: 127 | '@babel/helper-validator-identifier': 7.22.20 128 | chalk: 2.4.2 129 | js-tokens: 4.0.0 130 | dev: true 131 | 132 | /@babel/parser@7.23.0: 133 | resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} 134 | engines: {node: '>=6.0.0'} 135 | hasBin: true 136 | dependencies: 137 | '@babel/types': 7.23.0 138 | dev: true 139 | 140 | /@babel/runtime@7.23.1: 141 | resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} 142 | engines: {node: '>=6.9.0'} 143 | dependencies: 144 | regenerator-runtime: 0.14.0 145 | dev: true 146 | 147 | /@babel/template@7.22.15: 148 | resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} 149 | engines: {node: '>=6.9.0'} 150 | dependencies: 151 | '@babel/code-frame': 7.22.13 152 | '@babel/parser': 7.23.0 153 | '@babel/types': 7.23.0 154 | dev: true 155 | 156 | /@babel/traverse@7.23.0: 157 | resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} 158 | engines: {node: '>=6.9.0'} 159 | dependencies: 160 | '@babel/code-frame': 7.22.13 161 | '@babel/generator': 7.23.0 162 | '@babel/helper-environment-visitor': 7.22.20 163 | '@babel/helper-function-name': 7.23.0 164 | '@babel/helper-hoist-variables': 7.22.5 165 | '@babel/helper-split-export-declaration': 7.22.6 166 | '@babel/parser': 7.23.0 167 | '@babel/types': 7.23.0 168 | debug: 4.3.4 169 | globals: 11.12.0 170 | transitivePeerDependencies: 171 | - supports-color 172 | dev: true 173 | 174 | /@babel/types@7.23.0: 175 | resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} 176 | engines: {node: '>=6.9.0'} 177 | dependencies: 178 | '@babel/helper-string-parser': 7.22.5 179 | '@babel/helper-validator-identifier': 7.22.20 180 | to-fast-properties: 2.0.0 181 | dev: true 182 | 183 | /@dwarvesf/react-eslint-config@1.0.1(@typescript-eslint/eslint-plugin@6.7.3)(@typescript-eslint/parser@6.7.3)(babel-eslint@10.1.0)(eslint-config-airbnb-typescript@17.1.0)(eslint-config-airbnb@19.0.4)(eslint-config-prettier@8.10.0)(eslint-config-react@1.1.7)(eslint-plugin-import@2.28.1)(eslint-plugin-jsx-a11y@6.7.1)(eslint-plugin-prettier@5.0.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint-plugin-testing-library@5.11.1)(eslint@8.50.0): 184 | resolution: {integrity: sha512-VepdWkv6bGvogXjMFy2LCkP4Aqv8N2kVx60UFLvZ5z8A2z9acCG50Yjt4ICL2J0ZfrXP6/PI0kJSHI1NCurbuw==} 185 | engines: {node: '>=12.0.0'} 186 | peerDependencies: 187 | '@typescript-eslint/eslint-plugin': 6.x 188 | '@typescript-eslint/parser': 6.x 189 | babel-eslint: 10.x 190 | eslint: 8.x 191 | eslint-config-airbnb: 19.x 192 | eslint-config-airbnb-typescript: 17.x 193 | eslint-config-prettier: 8.x 194 | eslint-config-react: 1.x 195 | eslint-plugin-import: 2.x 196 | eslint-plugin-jsx-a11y: 6.x 197 | eslint-plugin-prettier: 5.x 198 | eslint-plugin-react: 7.x 199 | eslint-plugin-react-hooks: 4.x 200 | eslint-plugin-testing-library: 5.x 201 | dependencies: 202 | '@typescript-eslint/eslint-plugin': 6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2) 203 | '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) 204 | babel-eslint: 10.1.0(eslint@8.50.0) 205 | eslint: 8.50.0 206 | eslint-config-airbnb: 19.0.4(eslint-plugin-import@2.28.1)(eslint-plugin-jsx-a11y@6.7.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.50.0) 207 | eslint-config-airbnb-typescript: 17.1.0(@typescript-eslint/eslint-plugin@6.7.3)(@typescript-eslint/parser@6.7.3)(eslint-plugin-import@2.28.1)(eslint@8.50.0) 208 | eslint-config-prettier: 8.10.0(eslint@8.50.0) 209 | eslint-config-react: 1.1.7 210 | eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) 211 | eslint-plugin-jsx-a11y: 6.7.1(eslint@8.50.0) 212 | eslint-plugin-prettier: 5.0.0(eslint-config-prettier@8.10.0)(eslint@8.50.0)(prettier@3.0.3) 213 | eslint-plugin-react: 7.33.2(eslint@8.50.0) 214 | eslint-plugin-react-hooks: 4.6.0(eslint@8.50.0) 215 | eslint-plugin-testing-library: 5.11.1(eslint@8.50.0)(typescript@5.2.2) 216 | dev: true 217 | 218 | /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): 219 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 220 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 221 | peerDependencies: 222 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 223 | dependencies: 224 | eslint: 8.50.0 225 | eslint-visitor-keys: 3.4.3 226 | dev: true 227 | 228 | /@eslint-community/regexpp@4.8.2: 229 | resolution: {integrity: sha512-0MGxAVt1m/ZK+LTJp/j0qF7Hz97D9O/FH9Ms3ltnyIdDD57cbb1ACIQTkbHvNXtWDv5TPq7w5Kq56+cNukbo7g==} 230 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 231 | dev: true 232 | 233 | /@eslint/eslintrc@2.1.2: 234 | resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} 235 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 236 | dependencies: 237 | ajv: 6.12.6 238 | debug: 4.3.4 239 | espree: 9.6.1 240 | globals: 13.22.0 241 | ignore: 5.2.4 242 | import-fresh: 3.3.0 243 | js-yaml: 4.1.0 244 | minimatch: 3.1.2 245 | strip-json-comments: 3.1.1 246 | transitivePeerDependencies: 247 | - supports-color 248 | dev: true 249 | 250 | /@eslint/js@8.50.0: 251 | resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==} 252 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 253 | dev: true 254 | 255 | /@humanwhocodes/config-array@0.11.11: 256 | resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} 257 | engines: {node: '>=10.10.0'} 258 | dependencies: 259 | '@humanwhocodes/object-schema': 1.2.1 260 | debug: 4.3.4 261 | minimatch: 3.1.2 262 | transitivePeerDependencies: 263 | - supports-color 264 | dev: true 265 | 266 | /@humanwhocodes/module-importer@1.0.1: 267 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 268 | engines: {node: '>=12.22'} 269 | dev: true 270 | 271 | /@humanwhocodes/object-schema@1.2.1: 272 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 273 | dev: true 274 | 275 | /@jridgewell/gen-mapping@0.3.3: 276 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 277 | engines: {node: '>=6.0.0'} 278 | dependencies: 279 | '@jridgewell/set-array': 1.1.2 280 | '@jridgewell/sourcemap-codec': 1.4.15 281 | '@jridgewell/trace-mapping': 0.3.19 282 | dev: true 283 | 284 | /@jridgewell/resolve-uri@3.1.1: 285 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 286 | engines: {node: '>=6.0.0'} 287 | dev: true 288 | 289 | /@jridgewell/set-array@1.1.2: 290 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 291 | engines: {node: '>=6.0.0'} 292 | dev: true 293 | 294 | /@jridgewell/sourcemap-codec@1.4.15: 295 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 296 | dev: true 297 | 298 | /@jridgewell/trace-mapping@0.3.19: 299 | resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} 300 | dependencies: 301 | '@jridgewell/resolve-uri': 3.1.1 302 | '@jridgewell/sourcemap-codec': 1.4.15 303 | dev: true 304 | 305 | /@next/env@13.5.3: 306 | resolution: {integrity: sha512-X4te86vsbjsB7iO4usY9jLPtZ827Mbx+WcwNBGUOIuswuTAKQtzsuoxc/6KLxCMvogKG795MhrR1LDhYgDvasg==} 307 | dev: false 308 | 309 | /@next/eslint-plugin-next@13.5.3: 310 | resolution: {integrity: sha512-lbZOoEjzSuTtpk9UgV9rOmxYw+PsSfNR+00mZcInqooiDMZ1u+RqT1YQYLsEZPW1kumZoQe5+exkCBtZ2xn0uw==} 311 | dependencies: 312 | glob: 7.1.7 313 | dev: true 314 | 315 | /@next/swc-darwin-arm64@13.5.3: 316 | resolution: {integrity: sha512-6hiYNJxJmyYvvKGrVThzo4nTcqvqUTA/JvKim7Auaj33NexDqSNwN5YrrQu+QhZJCIpv2tULSHt+lf+rUflLSw==} 317 | engines: {node: '>= 10'} 318 | cpu: [arm64] 319 | os: [darwin] 320 | requiresBuild: true 321 | dev: false 322 | optional: true 323 | 324 | /@next/swc-darwin-x64@13.5.3: 325 | resolution: {integrity: sha512-UpBKxu2ob9scbpJyEq/xPgpdrgBgN3aLYlxyGqlYX5/KnwpJpFuIHU2lx8upQQ7L+MEmz+fA1XSgesoK92ppwQ==} 326 | engines: {node: '>= 10'} 327 | cpu: [x64] 328 | os: [darwin] 329 | requiresBuild: true 330 | dev: false 331 | optional: true 332 | 333 | /@next/swc-linux-arm64-gnu@13.5.3: 334 | resolution: {integrity: sha512-5AzM7Yx1Ky+oLY6pHs7tjONTF22JirDPd5Jw/3/NazJ73uGB05NqhGhB4SbeCchg7SlVYVBeRMrMSZwJwq/xoA==} 335 | engines: {node: '>= 10'} 336 | cpu: [arm64] 337 | os: [linux] 338 | requiresBuild: true 339 | dev: false 340 | optional: true 341 | 342 | /@next/swc-linux-arm64-musl@13.5.3: 343 | resolution: {integrity: sha512-A/C1shbyUhj7wRtokmn73eBksjTM7fFQoY2v/0rTM5wehpkjQRLOXI8WJsag2uLhnZ4ii5OzR1rFPwoD9cvOgA==} 344 | engines: {node: '>= 10'} 345 | cpu: [arm64] 346 | os: [linux] 347 | requiresBuild: true 348 | dev: false 349 | optional: true 350 | 351 | /@next/swc-linux-x64-gnu@13.5.3: 352 | resolution: {integrity: sha512-FubPuw/Boz8tKkk+5eOuDHOpk36F80rbgxlx4+xty/U71e3wZZxVYHfZXmf0IRToBn1Crb8WvLM9OYj/Ur815g==} 353 | engines: {node: '>= 10'} 354 | cpu: [x64] 355 | os: [linux] 356 | requiresBuild: true 357 | dev: false 358 | optional: true 359 | 360 | /@next/swc-linux-x64-musl@13.5.3: 361 | resolution: {integrity: sha512-DPw8nFuM1uEpbX47tM3wiXIR0Qa+atSzs9Q3peY1urkhofx44o7E1svnq+a5Q0r8lAcssLrwiM+OyJJgV/oj7g==} 362 | engines: {node: '>= 10'} 363 | cpu: [x64] 364 | os: [linux] 365 | requiresBuild: true 366 | dev: false 367 | optional: true 368 | 369 | /@next/swc-win32-arm64-msvc@13.5.3: 370 | resolution: {integrity: sha512-zBPSP8cHL51Gub/YV8UUePW7AVGukp2D8JU93IHbVDu2qmhFAn9LWXiOOLKplZQKxnIPUkJTQAJDCWBWU4UWUA==} 371 | engines: {node: '>= 10'} 372 | cpu: [arm64] 373 | os: [win32] 374 | requiresBuild: true 375 | dev: false 376 | optional: true 377 | 378 | /@next/swc-win32-ia32-msvc@13.5.3: 379 | resolution: {integrity: sha512-ONcL/lYyGUj4W37D4I2I450SZtSenmFAvapkJQNIJhrPMhzDU/AdfLkW98NvH1D2+7FXwe7yclf3+B7v28uzBQ==} 380 | engines: {node: '>= 10'} 381 | cpu: [ia32] 382 | os: [win32] 383 | requiresBuild: true 384 | dev: false 385 | optional: true 386 | 387 | /@next/swc-win32-x64-msvc@13.5.3: 388 | resolution: {integrity: sha512-2Vz2tYWaLqJvLcWbbTlJ5k9AN6JD7a5CN2pAeIzpbecK8ZF/yobA39cXtv6e+Z8c5UJuVOmaTldEAIxvsIux/Q==} 389 | engines: {node: '>= 10'} 390 | cpu: [x64] 391 | os: [win32] 392 | requiresBuild: true 393 | dev: false 394 | optional: true 395 | 396 | /@nodelib/fs.scandir@2.1.5: 397 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 398 | engines: {node: '>= 8'} 399 | dependencies: 400 | '@nodelib/fs.stat': 2.0.5 401 | run-parallel: 1.2.0 402 | dev: true 403 | 404 | /@nodelib/fs.stat@2.0.5: 405 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 406 | engines: {node: '>= 8'} 407 | dev: true 408 | 409 | /@nodelib/fs.walk@1.2.8: 410 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 411 | engines: {node: '>= 8'} 412 | dependencies: 413 | '@nodelib/fs.scandir': 2.1.5 414 | fastq: 1.15.0 415 | dev: true 416 | 417 | /@pkgr/utils@2.4.2: 418 | resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} 419 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 420 | dependencies: 421 | cross-spawn: 7.0.3 422 | fast-glob: 3.3.1 423 | is-glob: 4.0.3 424 | open: 9.1.0 425 | picocolors: 1.0.0 426 | tslib: 2.6.2 427 | dev: true 428 | 429 | /@rushstack/eslint-patch@1.4.0: 430 | resolution: {integrity: sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==} 431 | dev: true 432 | 433 | /@swc/helpers@0.5.2: 434 | resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} 435 | dependencies: 436 | tslib: 2.6.2 437 | dev: false 438 | 439 | /@types/json-schema@7.0.13: 440 | resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} 441 | dev: true 442 | 443 | /@types/json5@0.0.29: 444 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 445 | dev: true 446 | 447 | /@types/node@20.7.0: 448 | resolution: {integrity: sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==} 449 | dev: true 450 | 451 | /@types/prop-types@15.7.7: 452 | resolution: {integrity: sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog==} 453 | dev: true 454 | 455 | /@types/react-dom@18.2.7: 456 | resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} 457 | dependencies: 458 | '@types/react': 18.2.22 459 | dev: true 460 | 461 | /@types/react@18.2.22: 462 | resolution: {integrity: sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA==} 463 | dependencies: 464 | '@types/prop-types': 15.7.7 465 | '@types/scheduler': 0.16.4 466 | csstype: 3.1.2 467 | dev: true 468 | 469 | /@types/scheduler@0.16.4: 470 | resolution: {integrity: sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==} 471 | dev: true 472 | 473 | /@types/semver@7.5.3: 474 | resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} 475 | dev: true 476 | 477 | /@typescript-eslint/eslint-plugin@6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2): 478 | resolution: {integrity: sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==} 479 | engines: {node: ^16.0.0 || >=18.0.0} 480 | peerDependencies: 481 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha 482 | eslint: ^7.0.0 || ^8.0.0 483 | typescript: '*' 484 | peerDependenciesMeta: 485 | typescript: 486 | optional: true 487 | dependencies: 488 | '@eslint-community/regexpp': 4.8.2 489 | '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) 490 | '@typescript-eslint/scope-manager': 6.7.3 491 | '@typescript-eslint/type-utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2) 492 | '@typescript-eslint/utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2) 493 | '@typescript-eslint/visitor-keys': 6.7.3 494 | debug: 4.3.4 495 | eslint: 8.50.0 496 | graphemer: 1.4.0 497 | ignore: 5.2.4 498 | natural-compare: 1.4.0 499 | semver: 7.5.4 500 | ts-api-utils: 1.0.3(typescript@5.2.2) 501 | typescript: 5.2.2 502 | transitivePeerDependencies: 503 | - supports-color 504 | dev: true 505 | 506 | /@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2): 507 | resolution: {integrity: sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==} 508 | engines: {node: ^16.0.0 || >=18.0.0} 509 | peerDependencies: 510 | eslint: ^7.0.0 || ^8.0.0 511 | typescript: '*' 512 | peerDependenciesMeta: 513 | typescript: 514 | optional: true 515 | dependencies: 516 | '@typescript-eslint/scope-manager': 6.7.3 517 | '@typescript-eslint/types': 6.7.3 518 | '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) 519 | '@typescript-eslint/visitor-keys': 6.7.3 520 | debug: 4.3.4 521 | eslint: 8.50.0 522 | typescript: 5.2.2 523 | transitivePeerDependencies: 524 | - supports-color 525 | dev: true 526 | 527 | /@typescript-eslint/scope-manager@5.62.0: 528 | resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} 529 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 530 | dependencies: 531 | '@typescript-eslint/types': 5.62.0 532 | '@typescript-eslint/visitor-keys': 5.62.0 533 | dev: true 534 | 535 | /@typescript-eslint/scope-manager@6.7.3: 536 | resolution: {integrity: sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==} 537 | engines: {node: ^16.0.0 || >=18.0.0} 538 | dependencies: 539 | '@typescript-eslint/types': 6.7.3 540 | '@typescript-eslint/visitor-keys': 6.7.3 541 | dev: true 542 | 543 | /@typescript-eslint/type-utils@6.7.3(eslint@8.50.0)(typescript@5.2.2): 544 | resolution: {integrity: sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==} 545 | engines: {node: ^16.0.0 || >=18.0.0} 546 | peerDependencies: 547 | eslint: ^7.0.0 || ^8.0.0 548 | typescript: '*' 549 | peerDependenciesMeta: 550 | typescript: 551 | optional: true 552 | dependencies: 553 | '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) 554 | '@typescript-eslint/utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2) 555 | debug: 4.3.4 556 | eslint: 8.50.0 557 | ts-api-utils: 1.0.3(typescript@5.2.2) 558 | typescript: 5.2.2 559 | transitivePeerDependencies: 560 | - supports-color 561 | dev: true 562 | 563 | /@typescript-eslint/types@5.62.0: 564 | resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} 565 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 566 | dev: true 567 | 568 | /@typescript-eslint/types@6.7.3: 569 | resolution: {integrity: sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==} 570 | engines: {node: ^16.0.0 || >=18.0.0} 571 | dev: true 572 | 573 | /@typescript-eslint/typescript-estree@5.62.0(typescript@5.2.2): 574 | resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} 575 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 576 | peerDependencies: 577 | typescript: '*' 578 | peerDependenciesMeta: 579 | typescript: 580 | optional: true 581 | dependencies: 582 | '@typescript-eslint/types': 5.62.0 583 | '@typescript-eslint/visitor-keys': 5.62.0 584 | debug: 4.3.4 585 | globby: 11.1.0 586 | is-glob: 4.0.3 587 | semver: 7.5.4 588 | tsutils: 3.21.0(typescript@5.2.2) 589 | typescript: 5.2.2 590 | transitivePeerDependencies: 591 | - supports-color 592 | dev: true 593 | 594 | /@typescript-eslint/typescript-estree@6.7.3(typescript@5.2.2): 595 | resolution: {integrity: sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==} 596 | engines: {node: ^16.0.0 || >=18.0.0} 597 | peerDependencies: 598 | typescript: '*' 599 | peerDependenciesMeta: 600 | typescript: 601 | optional: true 602 | dependencies: 603 | '@typescript-eslint/types': 6.7.3 604 | '@typescript-eslint/visitor-keys': 6.7.3 605 | debug: 4.3.4 606 | globby: 11.1.0 607 | is-glob: 4.0.3 608 | semver: 7.5.4 609 | ts-api-utils: 1.0.3(typescript@5.2.2) 610 | typescript: 5.2.2 611 | transitivePeerDependencies: 612 | - supports-color 613 | dev: true 614 | 615 | /@typescript-eslint/utils@5.62.0(eslint@8.50.0)(typescript@5.2.2): 616 | resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} 617 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 618 | peerDependencies: 619 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 620 | dependencies: 621 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) 622 | '@types/json-schema': 7.0.13 623 | '@types/semver': 7.5.3 624 | '@typescript-eslint/scope-manager': 5.62.0 625 | '@typescript-eslint/types': 5.62.0 626 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) 627 | eslint: 8.50.0 628 | eslint-scope: 5.1.1 629 | semver: 7.5.4 630 | transitivePeerDependencies: 631 | - supports-color 632 | - typescript 633 | dev: true 634 | 635 | /@typescript-eslint/utils@6.7.3(eslint@8.50.0)(typescript@5.2.2): 636 | resolution: {integrity: sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==} 637 | engines: {node: ^16.0.0 || >=18.0.0} 638 | peerDependencies: 639 | eslint: ^7.0.0 || ^8.0.0 640 | dependencies: 641 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) 642 | '@types/json-schema': 7.0.13 643 | '@types/semver': 7.5.3 644 | '@typescript-eslint/scope-manager': 6.7.3 645 | '@typescript-eslint/types': 6.7.3 646 | '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) 647 | eslint: 8.50.0 648 | semver: 7.5.4 649 | transitivePeerDependencies: 650 | - supports-color 651 | - typescript 652 | dev: true 653 | 654 | /@typescript-eslint/visitor-keys@5.62.0: 655 | resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} 656 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 657 | dependencies: 658 | '@typescript-eslint/types': 5.62.0 659 | eslint-visitor-keys: 3.4.3 660 | dev: true 661 | 662 | /@typescript-eslint/visitor-keys@6.7.3: 663 | resolution: {integrity: sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==} 664 | engines: {node: ^16.0.0 || >=18.0.0} 665 | dependencies: 666 | '@typescript-eslint/types': 6.7.3 667 | eslint-visitor-keys: 3.4.3 668 | dev: true 669 | 670 | /acorn-jsx@5.3.2(acorn@8.10.0): 671 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 672 | peerDependencies: 673 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 674 | dependencies: 675 | acorn: 8.10.0 676 | dev: true 677 | 678 | /acorn@8.10.0: 679 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} 680 | engines: {node: '>=0.4.0'} 681 | hasBin: true 682 | dev: true 683 | 684 | /ajv@6.12.6: 685 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 686 | dependencies: 687 | fast-deep-equal: 3.1.3 688 | fast-json-stable-stringify: 2.1.0 689 | json-schema-traverse: 0.4.1 690 | uri-js: 4.4.1 691 | dev: true 692 | 693 | /ansi-regex@5.0.1: 694 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 695 | engines: {node: '>=8'} 696 | dev: true 697 | 698 | /ansi-styles@3.2.1: 699 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 700 | engines: {node: '>=4'} 701 | dependencies: 702 | color-convert: 1.9.3 703 | dev: true 704 | 705 | /ansi-styles@4.3.0: 706 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 707 | engines: {node: '>=8'} 708 | dependencies: 709 | color-convert: 2.0.1 710 | dev: true 711 | 712 | /any-promise@1.3.0: 713 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 714 | dev: true 715 | 716 | /anymatch@3.1.3: 717 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 718 | engines: {node: '>= 8'} 719 | dependencies: 720 | normalize-path: 3.0.0 721 | picomatch: 2.3.1 722 | dev: true 723 | 724 | /arg@5.0.2: 725 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 726 | dev: true 727 | 728 | /argparse@2.0.1: 729 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 730 | dev: true 731 | 732 | /aria-query@5.3.0: 733 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 734 | dependencies: 735 | dequal: 2.0.3 736 | dev: true 737 | 738 | /array-buffer-byte-length@1.0.0: 739 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 740 | dependencies: 741 | call-bind: 1.0.2 742 | is-array-buffer: 3.0.2 743 | dev: true 744 | 745 | /array-includes@3.1.7: 746 | resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} 747 | engines: {node: '>= 0.4'} 748 | dependencies: 749 | call-bind: 1.0.2 750 | define-properties: 1.2.1 751 | es-abstract: 1.22.2 752 | get-intrinsic: 1.2.1 753 | is-string: 1.0.7 754 | dev: true 755 | 756 | /array-union@2.1.0: 757 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 758 | engines: {node: '>=8'} 759 | dev: true 760 | 761 | /array.prototype.findlastindex@1.2.3: 762 | resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} 763 | engines: {node: '>= 0.4'} 764 | dependencies: 765 | call-bind: 1.0.2 766 | define-properties: 1.2.1 767 | es-abstract: 1.22.2 768 | es-shim-unscopables: 1.0.0 769 | get-intrinsic: 1.2.1 770 | dev: true 771 | 772 | /array.prototype.flat@1.3.2: 773 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 774 | engines: {node: '>= 0.4'} 775 | dependencies: 776 | call-bind: 1.0.2 777 | define-properties: 1.2.1 778 | es-abstract: 1.22.2 779 | es-shim-unscopables: 1.0.0 780 | dev: true 781 | 782 | /array.prototype.flatmap@1.3.2: 783 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 784 | engines: {node: '>= 0.4'} 785 | dependencies: 786 | call-bind: 1.0.2 787 | define-properties: 1.2.1 788 | es-abstract: 1.22.2 789 | es-shim-unscopables: 1.0.0 790 | dev: true 791 | 792 | /array.prototype.tosorted@1.1.2: 793 | resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} 794 | dependencies: 795 | call-bind: 1.0.2 796 | define-properties: 1.2.1 797 | es-abstract: 1.22.2 798 | es-shim-unscopables: 1.0.0 799 | get-intrinsic: 1.2.1 800 | dev: true 801 | 802 | /arraybuffer.prototype.slice@1.0.2: 803 | resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} 804 | engines: {node: '>= 0.4'} 805 | dependencies: 806 | array-buffer-byte-length: 1.0.0 807 | call-bind: 1.0.2 808 | define-properties: 1.2.1 809 | es-abstract: 1.22.2 810 | get-intrinsic: 1.2.1 811 | is-array-buffer: 3.0.2 812 | is-shared-array-buffer: 1.0.2 813 | dev: true 814 | 815 | /ast-types-flow@0.0.7: 816 | resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} 817 | dev: true 818 | 819 | /asynciterator.prototype@1.0.0: 820 | resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} 821 | dependencies: 822 | has-symbols: 1.0.3 823 | dev: true 824 | 825 | /autoprefixer@10.4.16(postcss@8.4.30): 826 | resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} 827 | engines: {node: ^10 || ^12 || >=14} 828 | hasBin: true 829 | peerDependencies: 830 | postcss: ^8.1.0 831 | dependencies: 832 | browserslist: 4.21.11 833 | caniuse-lite: 1.0.30001539 834 | fraction.js: 4.3.6 835 | normalize-range: 0.1.2 836 | picocolors: 1.0.0 837 | postcss: 8.4.30 838 | postcss-value-parser: 4.2.0 839 | dev: true 840 | 841 | /available-typed-arrays@1.0.5: 842 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 843 | engines: {node: '>= 0.4'} 844 | dev: true 845 | 846 | /axe-core@4.8.2: 847 | resolution: {integrity: sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==} 848 | engines: {node: '>=4'} 849 | dev: true 850 | 851 | /axobject-query@3.2.1: 852 | resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} 853 | dependencies: 854 | dequal: 2.0.3 855 | dev: true 856 | 857 | /babel-eslint@10.1.0(eslint@8.50.0): 858 | resolution: {integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==} 859 | engines: {node: '>=6'} 860 | deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. 861 | peerDependencies: 862 | eslint: '>= 4.12.1' 863 | dependencies: 864 | '@babel/code-frame': 7.22.13 865 | '@babel/parser': 7.23.0 866 | '@babel/traverse': 7.23.0 867 | '@babel/types': 7.23.0 868 | eslint: 8.50.0 869 | eslint-visitor-keys: 1.3.0 870 | resolve: 1.22.6 871 | transitivePeerDependencies: 872 | - supports-color 873 | dev: true 874 | 875 | /balanced-match@1.0.2: 876 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 877 | dev: true 878 | 879 | /big-integer@1.6.51: 880 | resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} 881 | engines: {node: '>=0.6'} 882 | dev: true 883 | 884 | /binary-extensions@2.2.0: 885 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 886 | engines: {node: '>=8'} 887 | dev: true 888 | 889 | /bplist-parser@0.2.0: 890 | resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} 891 | engines: {node: '>= 5.10.0'} 892 | dependencies: 893 | big-integer: 1.6.51 894 | dev: true 895 | 896 | /brace-expansion@1.1.11: 897 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 898 | dependencies: 899 | balanced-match: 1.0.2 900 | concat-map: 0.0.1 901 | dev: true 902 | 903 | /braces@3.0.2: 904 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 905 | engines: {node: '>=8'} 906 | dependencies: 907 | fill-range: 7.0.1 908 | dev: true 909 | 910 | /browserslist@4.21.11: 911 | resolution: {integrity: sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==} 912 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 913 | hasBin: true 914 | dependencies: 915 | caniuse-lite: 1.0.30001539 916 | electron-to-chromium: 1.4.529 917 | node-releases: 2.0.13 918 | update-browserslist-db: 1.0.13(browserslist@4.21.11) 919 | dev: true 920 | 921 | /bundle-name@3.0.0: 922 | resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} 923 | engines: {node: '>=12'} 924 | dependencies: 925 | run-applescript: 5.0.0 926 | dev: true 927 | 928 | /busboy@1.6.0: 929 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 930 | engines: {node: '>=10.16.0'} 931 | dependencies: 932 | streamsearch: 1.1.0 933 | dev: false 934 | 935 | /call-bind@1.0.2: 936 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 937 | dependencies: 938 | function-bind: 1.1.1 939 | get-intrinsic: 1.2.1 940 | dev: true 941 | 942 | /callsites@3.1.0: 943 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 944 | engines: {node: '>=6'} 945 | dev: true 946 | 947 | /camelcase-css@2.0.1: 948 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 949 | engines: {node: '>= 6'} 950 | dev: true 951 | 952 | /caniuse-lite@1.0.30001539: 953 | resolution: {integrity: sha512-hfS5tE8bnNiNvEOEkm8HElUHroYwlqMMENEzELymy77+tJ6m+gA2krtHl5hxJaj71OlpC2cHZbdSMX1/YEqEkA==} 954 | 955 | /chalk@2.4.2: 956 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 957 | engines: {node: '>=4'} 958 | dependencies: 959 | ansi-styles: 3.2.1 960 | escape-string-regexp: 1.0.5 961 | supports-color: 5.5.0 962 | dev: true 963 | 964 | /chalk@4.1.2: 965 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 966 | engines: {node: '>=10'} 967 | dependencies: 968 | ansi-styles: 4.3.0 969 | supports-color: 7.2.0 970 | dev: true 971 | 972 | /chokidar@3.5.3: 973 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 974 | engines: {node: '>= 8.10.0'} 975 | dependencies: 976 | anymatch: 3.1.3 977 | braces: 3.0.2 978 | glob-parent: 5.1.2 979 | is-binary-path: 2.1.0 980 | is-glob: 4.0.3 981 | normalize-path: 3.0.0 982 | readdirp: 3.6.0 983 | optionalDependencies: 984 | fsevents: 2.3.3 985 | dev: true 986 | 987 | /client-only@0.0.1: 988 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 989 | dev: false 990 | 991 | /color-convert@1.9.3: 992 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 993 | dependencies: 994 | color-name: 1.1.3 995 | dev: true 996 | 997 | /color-convert@2.0.1: 998 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 999 | engines: {node: '>=7.0.0'} 1000 | dependencies: 1001 | color-name: 1.1.4 1002 | dev: true 1003 | 1004 | /color-name@1.1.3: 1005 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1006 | dev: true 1007 | 1008 | /color-name@1.1.4: 1009 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1010 | dev: true 1011 | 1012 | /commander@4.1.1: 1013 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 1014 | engines: {node: '>= 6'} 1015 | dev: true 1016 | 1017 | /concat-map@0.0.1: 1018 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1019 | dev: true 1020 | 1021 | /confusing-browser-globals@1.0.11: 1022 | resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} 1023 | dev: true 1024 | 1025 | /cross-spawn@7.0.3: 1026 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1027 | engines: {node: '>= 8'} 1028 | dependencies: 1029 | path-key: 3.1.1 1030 | shebang-command: 2.0.0 1031 | which: 2.0.2 1032 | dev: true 1033 | 1034 | /cssesc@3.0.0: 1035 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1036 | engines: {node: '>=4'} 1037 | hasBin: true 1038 | dev: true 1039 | 1040 | /csstype@3.1.2: 1041 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} 1042 | dev: true 1043 | 1044 | /damerau-levenshtein@1.0.8: 1045 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} 1046 | dev: true 1047 | 1048 | /debug@3.2.7: 1049 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 1050 | peerDependencies: 1051 | supports-color: '*' 1052 | peerDependenciesMeta: 1053 | supports-color: 1054 | optional: true 1055 | dependencies: 1056 | ms: 2.1.3 1057 | dev: true 1058 | 1059 | /debug@4.3.4: 1060 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1061 | engines: {node: '>=6.0'} 1062 | peerDependencies: 1063 | supports-color: '*' 1064 | peerDependenciesMeta: 1065 | supports-color: 1066 | optional: true 1067 | dependencies: 1068 | ms: 2.1.2 1069 | dev: true 1070 | 1071 | /deep-is@0.1.4: 1072 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1073 | dev: true 1074 | 1075 | /default-browser-id@3.0.0: 1076 | resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} 1077 | engines: {node: '>=12'} 1078 | dependencies: 1079 | bplist-parser: 0.2.0 1080 | untildify: 4.0.0 1081 | dev: true 1082 | 1083 | /default-browser@4.0.0: 1084 | resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} 1085 | engines: {node: '>=14.16'} 1086 | dependencies: 1087 | bundle-name: 3.0.0 1088 | default-browser-id: 3.0.0 1089 | execa: 7.2.0 1090 | titleize: 3.0.0 1091 | dev: true 1092 | 1093 | /define-data-property@1.1.0: 1094 | resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==} 1095 | engines: {node: '>= 0.4'} 1096 | dependencies: 1097 | get-intrinsic: 1.2.1 1098 | gopd: 1.0.1 1099 | has-property-descriptors: 1.0.0 1100 | dev: true 1101 | 1102 | /define-lazy-prop@3.0.0: 1103 | resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} 1104 | engines: {node: '>=12'} 1105 | dev: true 1106 | 1107 | /define-properties@1.2.1: 1108 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 1109 | engines: {node: '>= 0.4'} 1110 | dependencies: 1111 | define-data-property: 1.1.0 1112 | has-property-descriptors: 1.0.0 1113 | object-keys: 1.1.1 1114 | dev: true 1115 | 1116 | /dequal@2.0.3: 1117 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 1118 | engines: {node: '>=6'} 1119 | dev: true 1120 | 1121 | /didyoumean@1.2.2: 1122 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 1123 | dev: true 1124 | 1125 | /dir-glob@3.0.1: 1126 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1127 | engines: {node: '>=8'} 1128 | dependencies: 1129 | path-type: 4.0.0 1130 | dev: true 1131 | 1132 | /dlv@1.1.3: 1133 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 1134 | dev: true 1135 | 1136 | /doctrine@2.1.0: 1137 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 1138 | engines: {node: '>=0.10.0'} 1139 | dependencies: 1140 | esutils: 2.0.3 1141 | dev: true 1142 | 1143 | /doctrine@3.0.0: 1144 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1145 | engines: {node: '>=6.0.0'} 1146 | dependencies: 1147 | esutils: 2.0.3 1148 | dev: true 1149 | 1150 | /electron-to-chromium@1.4.529: 1151 | resolution: {integrity: sha512-6uyPyXTo8lkv8SWAmjKFbG42U073TXlzD4R8rW3EzuznhFS2olCIAfjjQtV2dV2ar/vRF55KUd3zQYnCB0dd3A==} 1152 | dev: true 1153 | 1154 | /emoji-regex@9.2.2: 1155 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1156 | dev: true 1157 | 1158 | /enhanced-resolve@5.15.0: 1159 | resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} 1160 | engines: {node: '>=10.13.0'} 1161 | dependencies: 1162 | graceful-fs: 4.2.11 1163 | tapable: 2.2.1 1164 | dev: true 1165 | 1166 | /es-abstract@1.22.2: 1167 | resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} 1168 | engines: {node: '>= 0.4'} 1169 | dependencies: 1170 | array-buffer-byte-length: 1.0.0 1171 | arraybuffer.prototype.slice: 1.0.2 1172 | available-typed-arrays: 1.0.5 1173 | call-bind: 1.0.2 1174 | es-set-tostringtag: 2.0.1 1175 | es-to-primitive: 1.2.1 1176 | function.prototype.name: 1.1.6 1177 | get-intrinsic: 1.2.1 1178 | get-symbol-description: 1.0.0 1179 | globalthis: 1.0.3 1180 | gopd: 1.0.1 1181 | has: 1.0.3 1182 | has-property-descriptors: 1.0.0 1183 | has-proto: 1.0.1 1184 | has-symbols: 1.0.3 1185 | internal-slot: 1.0.5 1186 | is-array-buffer: 3.0.2 1187 | is-callable: 1.2.7 1188 | is-negative-zero: 2.0.2 1189 | is-regex: 1.1.4 1190 | is-shared-array-buffer: 1.0.2 1191 | is-string: 1.0.7 1192 | is-typed-array: 1.1.12 1193 | is-weakref: 1.0.2 1194 | object-inspect: 1.12.3 1195 | object-keys: 1.1.1 1196 | object.assign: 4.1.4 1197 | regexp.prototype.flags: 1.5.1 1198 | safe-array-concat: 1.0.1 1199 | safe-regex-test: 1.0.0 1200 | string.prototype.trim: 1.2.8 1201 | string.prototype.trimend: 1.0.7 1202 | string.prototype.trimstart: 1.0.7 1203 | typed-array-buffer: 1.0.0 1204 | typed-array-byte-length: 1.0.0 1205 | typed-array-byte-offset: 1.0.0 1206 | typed-array-length: 1.0.4 1207 | unbox-primitive: 1.0.2 1208 | which-typed-array: 1.1.11 1209 | dev: true 1210 | 1211 | /es-iterator-helpers@1.0.15: 1212 | resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} 1213 | dependencies: 1214 | asynciterator.prototype: 1.0.0 1215 | call-bind: 1.0.2 1216 | define-properties: 1.2.1 1217 | es-abstract: 1.22.2 1218 | es-set-tostringtag: 2.0.1 1219 | function-bind: 1.1.1 1220 | get-intrinsic: 1.2.1 1221 | globalthis: 1.0.3 1222 | has-property-descriptors: 1.0.0 1223 | has-proto: 1.0.1 1224 | has-symbols: 1.0.3 1225 | internal-slot: 1.0.5 1226 | iterator.prototype: 1.1.2 1227 | safe-array-concat: 1.0.1 1228 | dev: true 1229 | 1230 | /es-set-tostringtag@2.0.1: 1231 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 1232 | engines: {node: '>= 0.4'} 1233 | dependencies: 1234 | get-intrinsic: 1.2.1 1235 | has: 1.0.3 1236 | has-tostringtag: 1.0.0 1237 | dev: true 1238 | 1239 | /es-shim-unscopables@1.0.0: 1240 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 1241 | dependencies: 1242 | has: 1.0.3 1243 | dev: true 1244 | 1245 | /es-to-primitive@1.2.1: 1246 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1247 | engines: {node: '>= 0.4'} 1248 | dependencies: 1249 | is-callable: 1.2.7 1250 | is-date-object: 1.0.5 1251 | is-symbol: 1.0.4 1252 | dev: true 1253 | 1254 | /escalade@3.1.1: 1255 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1256 | engines: {node: '>=6'} 1257 | dev: true 1258 | 1259 | /escape-string-regexp@1.0.5: 1260 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1261 | engines: {node: '>=0.8.0'} 1262 | dev: true 1263 | 1264 | /escape-string-regexp@4.0.0: 1265 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1266 | engines: {node: '>=10'} 1267 | dev: true 1268 | 1269 | /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.28.1)(eslint@8.50.0): 1270 | resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} 1271 | engines: {node: ^10.12.0 || >=12.0.0} 1272 | peerDependencies: 1273 | eslint: ^7.32.0 || ^8.2.0 1274 | eslint-plugin-import: ^2.25.2 1275 | dependencies: 1276 | confusing-browser-globals: 1.0.11 1277 | eslint: 8.50.0 1278 | eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) 1279 | object.assign: 4.1.4 1280 | object.entries: 1.1.7 1281 | semver: 6.3.1 1282 | dev: true 1283 | 1284 | /eslint-config-airbnb-typescript@17.1.0(@typescript-eslint/eslint-plugin@6.7.3)(@typescript-eslint/parser@6.7.3)(eslint-plugin-import@2.28.1)(eslint@8.50.0): 1285 | resolution: {integrity: sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==} 1286 | peerDependencies: 1287 | '@typescript-eslint/eslint-plugin': ^5.13.0 || ^6.0.0 1288 | '@typescript-eslint/parser': ^5.0.0 || ^6.0.0 1289 | eslint: ^7.32.0 || ^8.2.0 1290 | eslint-plugin-import: ^2.25.3 1291 | dependencies: 1292 | '@typescript-eslint/eslint-plugin': 6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2) 1293 | '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) 1294 | eslint: 8.50.0 1295 | eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.28.1)(eslint@8.50.0) 1296 | eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) 1297 | dev: true 1298 | 1299 | /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.28.1)(eslint-plugin-jsx-a11y@6.7.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.33.2)(eslint@8.50.0): 1300 | resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} 1301 | engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} 1302 | peerDependencies: 1303 | eslint: ^7.32.0 || ^8.2.0 1304 | eslint-plugin-import: ^2.25.3 1305 | eslint-plugin-jsx-a11y: ^6.5.1 1306 | eslint-plugin-react: ^7.28.0 1307 | eslint-plugin-react-hooks: ^4.3.0 1308 | dependencies: 1309 | eslint: 8.50.0 1310 | eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.28.1)(eslint@8.50.0) 1311 | eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) 1312 | eslint-plugin-jsx-a11y: 6.7.1(eslint@8.50.0) 1313 | eslint-plugin-react: 7.33.2(eslint@8.50.0) 1314 | eslint-plugin-react-hooks: 4.6.0(eslint@8.50.0) 1315 | object.assign: 4.1.4 1316 | object.entries: 1.1.7 1317 | dev: true 1318 | 1319 | /eslint-config-next@13.5.3(eslint@8.50.0)(typescript@5.2.2): 1320 | resolution: {integrity: sha512-VN2qbCpq2DMWgs7SVF8KTmc8bVaWz3s4nmcFqRLs7PNBt5AXejOhJuZ4zg2sCEHOvz5RvqdwLeI++NSCV6qHVg==} 1321 | peerDependencies: 1322 | eslint: ^7.23.0 || ^8.0.0 1323 | typescript: '>=3.3.1' 1324 | peerDependenciesMeta: 1325 | typescript: 1326 | optional: true 1327 | dependencies: 1328 | '@next/eslint-plugin-next': 13.5.3 1329 | '@rushstack/eslint-patch': 1.4.0 1330 | '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) 1331 | eslint: 8.50.0 1332 | eslint-import-resolver-node: 0.3.9 1333 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.50.0) 1334 | eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) 1335 | eslint-plugin-jsx-a11y: 6.7.1(eslint@8.50.0) 1336 | eslint-plugin-react: 7.33.2(eslint@8.50.0) 1337 | eslint-plugin-react-hooks: 4.6.0(eslint@8.50.0) 1338 | typescript: 5.2.2 1339 | transitivePeerDependencies: 1340 | - eslint-import-resolver-webpack 1341 | - supports-color 1342 | dev: true 1343 | 1344 | /eslint-config-prettier@8.10.0(eslint@8.50.0): 1345 | resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} 1346 | hasBin: true 1347 | peerDependencies: 1348 | eslint: '>=7.0.0' 1349 | dependencies: 1350 | eslint: 8.50.0 1351 | dev: true 1352 | 1353 | /eslint-config-react@1.1.7: 1354 | resolution: {integrity: sha512-P4Z6u68wf0BvIvZNu+U8uQsk3DcZ1CcCI1XpUkJlG6vOa+iVcSQLgE01f2DB2kXlKRcT8/3dsH+wveLgvEgbkQ==} 1355 | dev: true 1356 | 1357 | /eslint-import-resolver-node@0.3.9: 1358 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 1359 | dependencies: 1360 | debug: 3.2.7 1361 | is-core-module: 2.13.0 1362 | resolve: 1.22.6 1363 | transitivePeerDependencies: 1364 | - supports-color 1365 | dev: true 1366 | 1367 | /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.50.0): 1368 | resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} 1369 | engines: {node: ^14.18.0 || >=16.0.0} 1370 | peerDependencies: 1371 | eslint: '*' 1372 | eslint-plugin-import: '*' 1373 | dependencies: 1374 | debug: 4.3.4 1375 | enhanced-resolve: 5.15.0 1376 | eslint: 8.50.0 1377 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) 1378 | eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) 1379 | fast-glob: 3.3.1 1380 | get-tsconfig: 4.7.2 1381 | is-core-module: 2.13.0 1382 | is-glob: 4.0.3 1383 | transitivePeerDependencies: 1384 | - '@typescript-eslint/parser' 1385 | - eslint-import-resolver-node 1386 | - eslint-import-resolver-webpack 1387 | - supports-color 1388 | dev: true 1389 | 1390 | /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0): 1391 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} 1392 | engines: {node: '>=4'} 1393 | peerDependencies: 1394 | '@typescript-eslint/parser': '*' 1395 | eslint: '*' 1396 | eslint-import-resolver-node: '*' 1397 | eslint-import-resolver-typescript: '*' 1398 | eslint-import-resolver-webpack: '*' 1399 | peerDependenciesMeta: 1400 | '@typescript-eslint/parser': 1401 | optional: true 1402 | eslint: 1403 | optional: true 1404 | eslint-import-resolver-node: 1405 | optional: true 1406 | eslint-import-resolver-typescript: 1407 | optional: true 1408 | eslint-import-resolver-webpack: 1409 | optional: true 1410 | dependencies: 1411 | '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) 1412 | debug: 3.2.7 1413 | eslint: 8.50.0 1414 | eslint-import-resolver-node: 0.3.9 1415 | eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.50.0) 1416 | transitivePeerDependencies: 1417 | - supports-color 1418 | dev: true 1419 | 1420 | /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0): 1421 | resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} 1422 | engines: {node: '>=4'} 1423 | peerDependencies: 1424 | '@typescript-eslint/parser': '*' 1425 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 1426 | peerDependenciesMeta: 1427 | '@typescript-eslint/parser': 1428 | optional: true 1429 | dependencies: 1430 | '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) 1431 | array-includes: 3.1.7 1432 | array.prototype.findlastindex: 1.2.3 1433 | array.prototype.flat: 1.3.2 1434 | array.prototype.flatmap: 1.3.2 1435 | debug: 3.2.7 1436 | doctrine: 2.1.0 1437 | eslint: 8.50.0 1438 | eslint-import-resolver-node: 0.3.9 1439 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) 1440 | has: 1.0.3 1441 | is-core-module: 2.13.0 1442 | is-glob: 4.0.3 1443 | minimatch: 3.1.2 1444 | object.fromentries: 2.0.7 1445 | object.groupby: 1.0.1 1446 | object.values: 1.1.7 1447 | semver: 6.3.1 1448 | tsconfig-paths: 3.14.2 1449 | transitivePeerDependencies: 1450 | - eslint-import-resolver-typescript 1451 | - eslint-import-resolver-webpack 1452 | - supports-color 1453 | dev: true 1454 | 1455 | /eslint-plugin-jsx-a11y@6.7.1(eslint@8.50.0): 1456 | resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} 1457 | engines: {node: '>=4.0'} 1458 | peerDependencies: 1459 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 1460 | dependencies: 1461 | '@babel/runtime': 7.23.1 1462 | aria-query: 5.3.0 1463 | array-includes: 3.1.7 1464 | array.prototype.flatmap: 1.3.2 1465 | ast-types-flow: 0.0.7 1466 | axe-core: 4.8.2 1467 | axobject-query: 3.2.1 1468 | damerau-levenshtein: 1.0.8 1469 | emoji-regex: 9.2.2 1470 | eslint: 8.50.0 1471 | has: 1.0.3 1472 | jsx-ast-utils: 3.3.5 1473 | language-tags: 1.0.5 1474 | minimatch: 3.1.2 1475 | object.entries: 1.1.7 1476 | object.fromentries: 2.0.7 1477 | semver: 6.3.1 1478 | dev: true 1479 | 1480 | /eslint-plugin-prettier@5.0.0(eslint-config-prettier@8.10.0)(eslint@8.50.0)(prettier@3.0.3): 1481 | resolution: {integrity: sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==} 1482 | engines: {node: ^14.18.0 || >=16.0.0} 1483 | peerDependencies: 1484 | '@types/eslint': '>=8.0.0' 1485 | eslint: '>=8.0.0' 1486 | eslint-config-prettier: '*' 1487 | prettier: '>=3.0.0' 1488 | peerDependenciesMeta: 1489 | '@types/eslint': 1490 | optional: true 1491 | eslint-config-prettier: 1492 | optional: true 1493 | dependencies: 1494 | eslint: 8.50.0 1495 | eslint-config-prettier: 8.10.0(eslint@8.50.0) 1496 | prettier: 3.0.3 1497 | prettier-linter-helpers: 1.0.0 1498 | synckit: 0.8.5 1499 | dev: true 1500 | 1501 | /eslint-plugin-react-hooks@4.6.0(eslint@8.50.0): 1502 | resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} 1503 | engines: {node: '>=10'} 1504 | peerDependencies: 1505 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 1506 | dependencies: 1507 | eslint: 8.50.0 1508 | dev: true 1509 | 1510 | /eslint-plugin-react@7.33.2(eslint@8.50.0): 1511 | resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} 1512 | engines: {node: '>=4'} 1513 | peerDependencies: 1514 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 1515 | dependencies: 1516 | array-includes: 3.1.7 1517 | array.prototype.flatmap: 1.3.2 1518 | array.prototype.tosorted: 1.1.2 1519 | doctrine: 2.1.0 1520 | es-iterator-helpers: 1.0.15 1521 | eslint: 8.50.0 1522 | estraverse: 5.3.0 1523 | jsx-ast-utils: 3.3.5 1524 | minimatch: 3.1.2 1525 | object.entries: 1.1.7 1526 | object.fromentries: 2.0.7 1527 | object.hasown: 1.1.3 1528 | object.values: 1.1.7 1529 | prop-types: 15.8.1 1530 | resolve: 2.0.0-next.4 1531 | semver: 6.3.1 1532 | string.prototype.matchall: 4.0.10 1533 | dev: true 1534 | 1535 | /eslint-plugin-testing-library@5.11.1(eslint@8.50.0)(typescript@5.2.2): 1536 | resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} 1537 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} 1538 | peerDependencies: 1539 | eslint: ^7.5.0 || ^8.0.0 1540 | dependencies: 1541 | '@typescript-eslint/utils': 5.62.0(eslint@8.50.0)(typescript@5.2.2) 1542 | eslint: 8.50.0 1543 | transitivePeerDependencies: 1544 | - supports-color 1545 | - typescript 1546 | dev: true 1547 | 1548 | /eslint-scope@5.1.1: 1549 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1550 | engines: {node: '>=8.0.0'} 1551 | dependencies: 1552 | esrecurse: 4.3.0 1553 | estraverse: 4.3.0 1554 | dev: true 1555 | 1556 | /eslint-scope@7.2.2: 1557 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1558 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1559 | dependencies: 1560 | esrecurse: 4.3.0 1561 | estraverse: 5.3.0 1562 | dev: true 1563 | 1564 | /eslint-visitor-keys@1.3.0: 1565 | resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} 1566 | engines: {node: '>=4'} 1567 | dev: true 1568 | 1569 | /eslint-visitor-keys@3.4.3: 1570 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1571 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1572 | dev: true 1573 | 1574 | /eslint@8.50.0: 1575 | resolution: {integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==} 1576 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1577 | hasBin: true 1578 | dependencies: 1579 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) 1580 | '@eslint-community/regexpp': 4.8.2 1581 | '@eslint/eslintrc': 2.1.2 1582 | '@eslint/js': 8.50.0 1583 | '@humanwhocodes/config-array': 0.11.11 1584 | '@humanwhocodes/module-importer': 1.0.1 1585 | '@nodelib/fs.walk': 1.2.8 1586 | ajv: 6.12.6 1587 | chalk: 4.1.2 1588 | cross-spawn: 7.0.3 1589 | debug: 4.3.4 1590 | doctrine: 3.0.0 1591 | escape-string-regexp: 4.0.0 1592 | eslint-scope: 7.2.2 1593 | eslint-visitor-keys: 3.4.3 1594 | espree: 9.6.1 1595 | esquery: 1.5.0 1596 | esutils: 2.0.3 1597 | fast-deep-equal: 3.1.3 1598 | file-entry-cache: 6.0.1 1599 | find-up: 5.0.0 1600 | glob-parent: 6.0.2 1601 | globals: 13.22.0 1602 | graphemer: 1.4.0 1603 | ignore: 5.2.4 1604 | imurmurhash: 0.1.4 1605 | is-glob: 4.0.3 1606 | is-path-inside: 3.0.3 1607 | js-yaml: 4.1.0 1608 | json-stable-stringify-without-jsonify: 1.0.1 1609 | levn: 0.4.1 1610 | lodash.merge: 4.6.2 1611 | minimatch: 3.1.2 1612 | natural-compare: 1.4.0 1613 | optionator: 0.9.3 1614 | strip-ansi: 6.0.1 1615 | text-table: 0.2.0 1616 | transitivePeerDependencies: 1617 | - supports-color 1618 | dev: true 1619 | 1620 | /espree@9.6.1: 1621 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1622 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1623 | dependencies: 1624 | acorn: 8.10.0 1625 | acorn-jsx: 5.3.2(acorn@8.10.0) 1626 | eslint-visitor-keys: 3.4.3 1627 | dev: true 1628 | 1629 | /esquery@1.5.0: 1630 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1631 | engines: {node: '>=0.10'} 1632 | dependencies: 1633 | estraverse: 5.3.0 1634 | dev: true 1635 | 1636 | /esrecurse@4.3.0: 1637 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1638 | engines: {node: '>=4.0'} 1639 | dependencies: 1640 | estraverse: 5.3.0 1641 | dev: true 1642 | 1643 | /estraverse@4.3.0: 1644 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1645 | engines: {node: '>=4.0'} 1646 | dev: true 1647 | 1648 | /estraverse@5.3.0: 1649 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1650 | engines: {node: '>=4.0'} 1651 | dev: true 1652 | 1653 | /esutils@2.0.3: 1654 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1655 | engines: {node: '>=0.10.0'} 1656 | dev: true 1657 | 1658 | /execa@5.1.1: 1659 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1660 | engines: {node: '>=10'} 1661 | dependencies: 1662 | cross-spawn: 7.0.3 1663 | get-stream: 6.0.1 1664 | human-signals: 2.1.0 1665 | is-stream: 2.0.1 1666 | merge-stream: 2.0.0 1667 | npm-run-path: 4.0.1 1668 | onetime: 5.1.2 1669 | signal-exit: 3.0.7 1670 | strip-final-newline: 2.0.0 1671 | dev: true 1672 | 1673 | /execa@7.2.0: 1674 | resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} 1675 | engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} 1676 | dependencies: 1677 | cross-spawn: 7.0.3 1678 | get-stream: 6.0.1 1679 | human-signals: 4.3.1 1680 | is-stream: 3.0.0 1681 | merge-stream: 2.0.0 1682 | npm-run-path: 5.1.0 1683 | onetime: 6.0.0 1684 | signal-exit: 3.0.7 1685 | strip-final-newline: 3.0.0 1686 | dev: true 1687 | 1688 | /fast-deep-equal@3.1.3: 1689 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1690 | dev: true 1691 | 1692 | /fast-diff@1.3.0: 1693 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 1694 | dev: true 1695 | 1696 | /fast-glob@3.3.1: 1697 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 1698 | engines: {node: '>=8.6.0'} 1699 | dependencies: 1700 | '@nodelib/fs.stat': 2.0.5 1701 | '@nodelib/fs.walk': 1.2.8 1702 | glob-parent: 5.1.2 1703 | merge2: 1.4.1 1704 | micromatch: 4.0.5 1705 | dev: true 1706 | 1707 | /fast-json-stable-stringify@2.1.0: 1708 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1709 | dev: true 1710 | 1711 | /fast-levenshtein@2.0.6: 1712 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1713 | dev: true 1714 | 1715 | /fastq@1.15.0: 1716 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1717 | dependencies: 1718 | reusify: 1.0.4 1719 | dev: true 1720 | 1721 | /file-entry-cache@6.0.1: 1722 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1723 | engines: {node: ^10.12.0 || >=12.0.0} 1724 | dependencies: 1725 | flat-cache: 3.1.0 1726 | dev: true 1727 | 1728 | /fill-range@7.0.1: 1729 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1730 | engines: {node: '>=8'} 1731 | dependencies: 1732 | to-regex-range: 5.0.1 1733 | dev: true 1734 | 1735 | /find-up@5.0.0: 1736 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1737 | engines: {node: '>=10'} 1738 | dependencies: 1739 | locate-path: 6.0.0 1740 | path-exists: 4.0.0 1741 | dev: true 1742 | 1743 | /flat-cache@3.1.0: 1744 | resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} 1745 | engines: {node: '>=12.0.0'} 1746 | dependencies: 1747 | flatted: 3.2.9 1748 | keyv: 4.5.3 1749 | rimraf: 3.0.2 1750 | dev: true 1751 | 1752 | /flatted@3.2.9: 1753 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 1754 | dev: true 1755 | 1756 | /for-each@0.3.3: 1757 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1758 | dependencies: 1759 | is-callable: 1.2.7 1760 | dev: true 1761 | 1762 | /fraction.js@4.3.6: 1763 | resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==} 1764 | dev: true 1765 | 1766 | /fs.realpath@1.0.0: 1767 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1768 | dev: true 1769 | 1770 | /fsevents@2.3.3: 1771 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1772 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1773 | os: [darwin] 1774 | requiresBuild: true 1775 | dev: true 1776 | optional: true 1777 | 1778 | /function-bind@1.1.1: 1779 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1780 | dev: true 1781 | 1782 | /function.prototype.name@1.1.6: 1783 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 1784 | engines: {node: '>= 0.4'} 1785 | dependencies: 1786 | call-bind: 1.0.2 1787 | define-properties: 1.2.1 1788 | es-abstract: 1.22.2 1789 | functions-have-names: 1.2.3 1790 | dev: true 1791 | 1792 | /functions-have-names@1.2.3: 1793 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1794 | dev: true 1795 | 1796 | /get-intrinsic@1.2.1: 1797 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} 1798 | dependencies: 1799 | function-bind: 1.1.1 1800 | has: 1.0.3 1801 | has-proto: 1.0.1 1802 | has-symbols: 1.0.3 1803 | dev: true 1804 | 1805 | /get-stream@6.0.1: 1806 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1807 | engines: {node: '>=10'} 1808 | dev: true 1809 | 1810 | /get-symbol-description@1.0.0: 1811 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1812 | engines: {node: '>= 0.4'} 1813 | dependencies: 1814 | call-bind: 1.0.2 1815 | get-intrinsic: 1.2.1 1816 | dev: true 1817 | 1818 | /get-tsconfig@4.7.2: 1819 | resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} 1820 | dependencies: 1821 | resolve-pkg-maps: 1.0.0 1822 | dev: true 1823 | 1824 | /glob-parent@5.1.2: 1825 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1826 | engines: {node: '>= 6'} 1827 | dependencies: 1828 | is-glob: 4.0.3 1829 | dev: true 1830 | 1831 | /glob-parent@6.0.2: 1832 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1833 | engines: {node: '>=10.13.0'} 1834 | dependencies: 1835 | is-glob: 4.0.3 1836 | dev: true 1837 | 1838 | /glob-to-regexp@0.4.1: 1839 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 1840 | dev: false 1841 | 1842 | /glob@7.1.6: 1843 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 1844 | dependencies: 1845 | fs.realpath: 1.0.0 1846 | inflight: 1.0.6 1847 | inherits: 2.0.4 1848 | minimatch: 3.1.2 1849 | once: 1.4.0 1850 | path-is-absolute: 1.0.1 1851 | dev: true 1852 | 1853 | /glob@7.1.7: 1854 | resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} 1855 | dependencies: 1856 | fs.realpath: 1.0.0 1857 | inflight: 1.0.6 1858 | inherits: 2.0.4 1859 | minimatch: 3.1.2 1860 | once: 1.4.0 1861 | path-is-absolute: 1.0.1 1862 | dev: true 1863 | 1864 | /glob@7.2.3: 1865 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1866 | dependencies: 1867 | fs.realpath: 1.0.0 1868 | inflight: 1.0.6 1869 | inherits: 2.0.4 1870 | minimatch: 3.1.2 1871 | once: 1.4.0 1872 | path-is-absolute: 1.0.1 1873 | dev: true 1874 | 1875 | /globals@11.12.0: 1876 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1877 | engines: {node: '>=4'} 1878 | dev: true 1879 | 1880 | /globals@13.22.0: 1881 | resolution: {integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==} 1882 | engines: {node: '>=8'} 1883 | dependencies: 1884 | type-fest: 0.20.2 1885 | dev: true 1886 | 1887 | /globalthis@1.0.3: 1888 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1889 | engines: {node: '>= 0.4'} 1890 | dependencies: 1891 | define-properties: 1.2.1 1892 | dev: true 1893 | 1894 | /globby@11.1.0: 1895 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1896 | engines: {node: '>=10'} 1897 | dependencies: 1898 | array-union: 2.1.0 1899 | dir-glob: 3.0.1 1900 | fast-glob: 3.3.1 1901 | ignore: 5.2.4 1902 | merge2: 1.4.1 1903 | slash: 3.0.0 1904 | dev: true 1905 | 1906 | /gopd@1.0.1: 1907 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1908 | dependencies: 1909 | get-intrinsic: 1.2.1 1910 | dev: true 1911 | 1912 | /graceful-fs@4.2.11: 1913 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1914 | 1915 | /graphemer@1.4.0: 1916 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1917 | dev: true 1918 | 1919 | /has-bigints@1.0.2: 1920 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1921 | dev: true 1922 | 1923 | /has-flag@3.0.0: 1924 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1925 | engines: {node: '>=4'} 1926 | dev: true 1927 | 1928 | /has-flag@4.0.0: 1929 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1930 | engines: {node: '>=8'} 1931 | dev: true 1932 | 1933 | /has-property-descriptors@1.0.0: 1934 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1935 | dependencies: 1936 | get-intrinsic: 1.2.1 1937 | dev: true 1938 | 1939 | /has-proto@1.0.1: 1940 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1941 | engines: {node: '>= 0.4'} 1942 | dev: true 1943 | 1944 | /has-symbols@1.0.3: 1945 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1946 | engines: {node: '>= 0.4'} 1947 | dev: true 1948 | 1949 | /has-tostringtag@1.0.0: 1950 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1951 | engines: {node: '>= 0.4'} 1952 | dependencies: 1953 | has-symbols: 1.0.3 1954 | dev: true 1955 | 1956 | /has@1.0.3: 1957 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1958 | engines: {node: '>= 0.4.0'} 1959 | dependencies: 1960 | function-bind: 1.1.1 1961 | dev: true 1962 | 1963 | /human-signals@2.1.0: 1964 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1965 | engines: {node: '>=10.17.0'} 1966 | dev: true 1967 | 1968 | /human-signals@4.3.1: 1969 | resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} 1970 | engines: {node: '>=14.18.0'} 1971 | dev: true 1972 | 1973 | /ignore@5.2.4: 1974 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1975 | engines: {node: '>= 4'} 1976 | dev: true 1977 | 1978 | /import-fresh@3.3.0: 1979 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1980 | engines: {node: '>=6'} 1981 | dependencies: 1982 | parent-module: 1.0.1 1983 | resolve-from: 4.0.0 1984 | dev: true 1985 | 1986 | /imurmurhash@0.1.4: 1987 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1988 | engines: {node: '>=0.8.19'} 1989 | dev: true 1990 | 1991 | /inflight@1.0.6: 1992 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1993 | dependencies: 1994 | once: 1.4.0 1995 | wrappy: 1.0.2 1996 | dev: true 1997 | 1998 | /inherits@2.0.4: 1999 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 2000 | dev: true 2001 | 2002 | /internal-slot@1.0.5: 2003 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} 2004 | engines: {node: '>= 0.4'} 2005 | dependencies: 2006 | get-intrinsic: 1.2.1 2007 | has: 1.0.3 2008 | side-channel: 1.0.4 2009 | dev: true 2010 | 2011 | /is-array-buffer@3.0.2: 2012 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 2013 | dependencies: 2014 | call-bind: 1.0.2 2015 | get-intrinsic: 1.2.1 2016 | is-typed-array: 1.1.12 2017 | dev: true 2018 | 2019 | /is-async-function@2.0.0: 2020 | resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} 2021 | engines: {node: '>= 0.4'} 2022 | dependencies: 2023 | has-tostringtag: 1.0.0 2024 | dev: true 2025 | 2026 | /is-bigint@1.0.4: 2027 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 2028 | dependencies: 2029 | has-bigints: 1.0.2 2030 | dev: true 2031 | 2032 | /is-binary-path@2.1.0: 2033 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 2034 | engines: {node: '>=8'} 2035 | dependencies: 2036 | binary-extensions: 2.2.0 2037 | dev: true 2038 | 2039 | /is-boolean-object@1.1.2: 2040 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 2041 | engines: {node: '>= 0.4'} 2042 | dependencies: 2043 | call-bind: 1.0.2 2044 | has-tostringtag: 1.0.0 2045 | dev: true 2046 | 2047 | /is-callable@1.2.7: 2048 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 2049 | engines: {node: '>= 0.4'} 2050 | dev: true 2051 | 2052 | /is-core-module@2.13.0: 2053 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} 2054 | dependencies: 2055 | has: 1.0.3 2056 | dev: true 2057 | 2058 | /is-date-object@1.0.5: 2059 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 2060 | engines: {node: '>= 0.4'} 2061 | dependencies: 2062 | has-tostringtag: 1.0.0 2063 | dev: true 2064 | 2065 | /is-docker@2.2.1: 2066 | resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} 2067 | engines: {node: '>=8'} 2068 | hasBin: true 2069 | dev: true 2070 | 2071 | /is-docker@3.0.0: 2072 | resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} 2073 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2074 | hasBin: true 2075 | dev: true 2076 | 2077 | /is-extglob@2.1.1: 2078 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 2079 | engines: {node: '>=0.10.0'} 2080 | dev: true 2081 | 2082 | /is-finalizationregistry@1.0.2: 2083 | resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} 2084 | dependencies: 2085 | call-bind: 1.0.2 2086 | dev: true 2087 | 2088 | /is-generator-function@1.0.10: 2089 | resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} 2090 | engines: {node: '>= 0.4'} 2091 | dependencies: 2092 | has-tostringtag: 1.0.0 2093 | dev: true 2094 | 2095 | /is-glob@4.0.3: 2096 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2097 | engines: {node: '>=0.10.0'} 2098 | dependencies: 2099 | is-extglob: 2.1.1 2100 | dev: true 2101 | 2102 | /is-inside-container@1.0.0: 2103 | resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} 2104 | engines: {node: '>=14.16'} 2105 | hasBin: true 2106 | dependencies: 2107 | is-docker: 3.0.0 2108 | dev: true 2109 | 2110 | /is-map@2.0.2: 2111 | resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} 2112 | dev: true 2113 | 2114 | /is-negative-zero@2.0.2: 2115 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 2116 | engines: {node: '>= 0.4'} 2117 | dev: true 2118 | 2119 | /is-number-object@1.0.7: 2120 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 2121 | engines: {node: '>= 0.4'} 2122 | dependencies: 2123 | has-tostringtag: 1.0.0 2124 | dev: true 2125 | 2126 | /is-number@7.0.0: 2127 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 2128 | engines: {node: '>=0.12.0'} 2129 | dev: true 2130 | 2131 | /is-path-inside@3.0.3: 2132 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 2133 | engines: {node: '>=8'} 2134 | dev: true 2135 | 2136 | /is-regex@1.1.4: 2137 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 2138 | engines: {node: '>= 0.4'} 2139 | dependencies: 2140 | call-bind: 1.0.2 2141 | has-tostringtag: 1.0.0 2142 | dev: true 2143 | 2144 | /is-set@2.0.2: 2145 | resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} 2146 | dev: true 2147 | 2148 | /is-shared-array-buffer@1.0.2: 2149 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 2150 | dependencies: 2151 | call-bind: 1.0.2 2152 | dev: true 2153 | 2154 | /is-stream@2.0.1: 2155 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 2156 | engines: {node: '>=8'} 2157 | dev: true 2158 | 2159 | /is-stream@3.0.0: 2160 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 2161 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2162 | dev: true 2163 | 2164 | /is-string@1.0.7: 2165 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 2166 | engines: {node: '>= 0.4'} 2167 | dependencies: 2168 | has-tostringtag: 1.0.0 2169 | dev: true 2170 | 2171 | /is-symbol@1.0.4: 2172 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 2173 | engines: {node: '>= 0.4'} 2174 | dependencies: 2175 | has-symbols: 1.0.3 2176 | dev: true 2177 | 2178 | /is-typed-array@1.1.12: 2179 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} 2180 | engines: {node: '>= 0.4'} 2181 | dependencies: 2182 | which-typed-array: 1.1.11 2183 | dev: true 2184 | 2185 | /is-weakmap@2.0.1: 2186 | resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} 2187 | dev: true 2188 | 2189 | /is-weakref@1.0.2: 2190 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 2191 | dependencies: 2192 | call-bind: 1.0.2 2193 | dev: true 2194 | 2195 | /is-weakset@2.0.2: 2196 | resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} 2197 | dependencies: 2198 | call-bind: 1.0.2 2199 | get-intrinsic: 1.2.1 2200 | dev: true 2201 | 2202 | /is-wsl@2.2.0: 2203 | resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} 2204 | engines: {node: '>=8'} 2205 | dependencies: 2206 | is-docker: 2.2.1 2207 | dev: true 2208 | 2209 | /isarray@2.0.5: 2210 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 2211 | dev: true 2212 | 2213 | /isexe@2.0.0: 2214 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 2215 | dev: true 2216 | 2217 | /iterator.prototype@1.1.2: 2218 | resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} 2219 | dependencies: 2220 | define-properties: 1.2.1 2221 | get-intrinsic: 1.2.1 2222 | has-symbols: 1.0.3 2223 | reflect.getprototypeof: 1.0.4 2224 | set-function-name: 2.0.1 2225 | dev: true 2226 | 2227 | /jiti@1.20.0: 2228 | resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} 2229 | hasBin: true 2230 | dev: true 2231 | 2232 | /js-tokens@4.0.0: 2233 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 2234 | 2235 | /js-yaml@4.1.0: 2236 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 2237 | hasBin: true 2238 | dependencies: 2239 | argparse: 2.0.1 2240 | dev: true 2241 | 2242 | /jsesc@2.5.2: 2243 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 2244 | engines: {node: '>=4'} 2245 | hasBin: true 2246 | dev: true 2247 | 2248 | /json-buffer@3.0.1: 2249 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 2250 | dev: true 2251 | 2252 | /json-schema-traverse@0.4.1: 2253 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 2254 | dev: true 2255 | 2256 | /json-stable-stringify-without-jsonify@1.0.1: 2257 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 2258 | dev: true 2259 | 2260 | /json5@1.0.2: 2261 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 2262 | hasBin: true 2263 | dependencies: 2264 | minimist: 1.2.8 2265 | dev: true 2266 | 2267 | /jsx-ast-utils@3.3.5: 2268 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 2269 | engines: {node: '>=4.0'} 2270 | dependencies: 2271 | array-includes: 3.1.7 2272 | array.prototype.flat: 1.3.2 2273 | object.assign: 4.1.4 2274 | object.values: 1.1.7 2275 | dev: true 2276 | 2277 | /keyv@4.5.3: 2278 | resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} 2279 | dependencies: 2280 | json-buffer: 3.0.1 2281 | dev: true 2282 | 2283 | /language-subtag-registry@0.3.22: 2284 | resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} 2285 | dev: true 2286 | 2287 | /language-tags@1.0.5: 2288 | resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} 2289 | dependencies: 2290 | language-subtag-registry: 0.3.22 2291 | dev: true 2292 | 2293 | /levn@0.4.1: 2294 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 2295 | engines: {node: '>= 0.8.0'} 2296 | dependencies: 2297 | prelude-ls: 1.2.1 2298 | type-check: 0.4.0 2299 | dev: true 2300 | 2301 | /lilconfig@2.1.0: 2302 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 2303 | engines: {node: '>=10'} 2304 | dev: true 2305 | 2306 | /lines-and-columns@1.2.4: 2307 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 2308 | dev: true 2309 | 2310 | /locate-path@6.0.0: 2311 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 2312 | engines: {node: '>=10'} 2313 | dependencies: 2314 | p-locate: 5.0.0 2315 | dev: true 2316 | 2317 | /lodash.merge@4.6.2: 2318 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 2319 | dev: true 2320 | 2321 | /loose-envify@1.4.0: 2322 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 2323 | hasBin: true 2324 | dependencies: 2325 | js-tokens: 4.0.0 2326 | 2327 | /lru-cache@6.0.0: 2328 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 2329 | engines: {node: '>=10'} 2330 | dependencies: 2331 | yallist: 4.0.0 2332 | dev: true 2333 | 2334 | /merge-stream@2.0.0: 2335 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 2336 | dev: true 2337 | 2338 | /merge2@1.4.1: 2339 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 2340 | engines: {node: '>= 8'} 2341 | dev: true 2342 | 2343 | /micromatch@4.0.5: 2344 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 2345 | engines: {node: '>=8.6'} 2346 | dependencies: 2347 | braces: 3.0.2 2348 | picomatch: 2.3.1 2349 | dev: true 2350 | 2351 | /mimic-fn@2.1.0: 2352 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 2353 | engines: {node: '>=6'} 2354 | dev: true 2355 | 2356 | /mimic-fn@4.0.0: 2357 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 2358 | engines: {node: '>=12'} 2359 | dev: true 2360 | 2361 | /minimatch@3.1.2: 2362 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2363 | dependencies: 2364 | brace-expansion: 1.1.11 2365 | dev: true 2366 | 2367 | /minimist@1.2.8: 2368 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 2369 | dev: true 2370 | 2371 | /ms@2.1.2: 2372 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2373 | dev: true 2374 | 2375 | /ms@2.1.3: 2376 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2377 | dev: true 2378 | 2379 | /mz@2.7.0: 2380 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 2381 | dependencies: 2382 | any-promise: 1.3.0 2383 | object-assign: 4.1.1 2384 | thenify-all: 1.6.0 2385 | dev: true 2386 | 2387 | /nanoid@3.3.6: 2388 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 2389 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2390 | hasBin: true 2391 | 2392 | /natural-compare@1.4.0: 2393 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2394 | dev: true 2395 | 2396 | /next@13.5.3(react-dom@18.2.0)(react@18.2.0): 2397 | resolution: {integrity: sha512-4Nt4HRLYDW/yRpJ/QR2t1v63UOMS55A38dnWv3UDOWGezuY0ZyFO1ABNbD7mulVzs9qVhgy2+ppjdsANpKP1mg==} 2398 | engines: {node: '>=16.14.0'} 2399 | hasBin: true 2400 | peerDependencies: 2401 | '@opentelemetry/api': ^1.1.0 2402 | react: ^18.2.0 2403 | react-dom: ^18.2.0 2404 | sass: ^1.3.0 2405 | peerDependenciesMeta: 2406 | '@opentelemetry/api': 2407 | optional: true 2408 | sass: 2409 | optional: true 2410 | dependencies: 2411 | '@next/env': 13.5.3 2412 | '@swc/helpers': 0.5.2 2413 | busboy: 1.6.0 2414 | caniuse-lite: 1.0.30001539 2415 | postcss: 8.4.14 2416 | react: 18.2.0 2417 | react-dom: 18.2.0(react@18.2.0) 2418 | styled-jsx: 5.1.1(react@18.2.0) 2419 | watchpack: 2.4.0 2420 | zod: 3.21.4 2421 | optionalDependencies: 2422 | '@next/swc-darwin-arm64': 13.5.3 2423 | '@next/swc-darwin-x64': 13.5.3 2424 | '@next/swc-linux-arm64-gnu': 13.5.3 2425 | '@next/swc-linux-arm64-musl': 13.5.3 2426 | '@next/swc-linux-x64-gnu': 13.5.3 2427 | '@next/swc-linux-x64-musl': 13.5.3 2428 | '@next/swc-win32-arm64-msvc': 13.5.3 2429 | '@next/swc-win32-ia32-msvc': 13.5.3 2430 | '@next/swc-win32-x64-msvc': 13.5.3 2431 | transitivePeerDependencies: 2432 | - '@babel/core' 2433 | - babel-plugin-macros 2434 | dev: false 2435 | 2436 | /node-releases@2.0.13: 2437 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} 2438 | dev: true 2439 | 2440 | /normalize-path@3.0.0: 2441 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2442 | engines: {node: '>=0.10.0'} 2443 | dev: true 2444 | 2445 | /normalize-range@0.1.2: 2446 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 2447 | engines: {node: '>=0.10.0'} 2448 | dev: true 2449 | 2450 | /npm-run-path@4.0.1: 2451 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 2452 | engines: {node: '>=8'} 2453 | dependencies: 2454 | path-key: 3.1.1 2455 | dev: true 2456 | 2457 | /npm-run-path@5.1.0: 2458 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} 2459 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2460 | dependencies: 2461 | path-key: 4.0.0 2462 | dev: true 2463 | 2464 | /object-assign@4.1.1: 2465 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 2466 | engines: {node: '>=0.10.0'} 2467 | dev: true 2468 | 2469 | /object-hash@3.0.0: 2470 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 2471 | engines: {node: '>= 6'} 2472 | dev: true 2473 | 2474 | /object-inspect@1.12.3: 2475 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 2476 | dev: true 2477 | 2478 | /object-keys@1.1.1: 2479 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 2480 | engines: {node: '>= 0.4'} 2481 | dev: true 2482 | 2483 | /object.assign@4.1.4: 2484 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 2485 | engines: {node: '>= 0.4'} 2486 | dependencies: 2487 | call-bind: 1.0.2 2488 | define-properties: 1.2.1 2489 | has-symbols: 1.0.3 2490 | object-keys: 1.1.1 2491 | dev: true 2492 | 2493 | /object.entries@1.1.7: 2494 | resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} 2495 | engines: {node: '>= 0.4'} 2496 | dependencies: 2497 | call-bind: 1.0.2 2498 | define-properties: 1.2.1 2499 | es-abstract: 1.22.2 2500 | dev: true 2501 | 2502 | /object.fromentries@2.0.7: 2503 | resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} 2504 | engines: {node: '>= 0.4'} 2505 | dependencies: 2506 | call-bind: 1.0.2 2507 | define-properties: 1.2.1 2508 | es-abstract: 1.22.2 2509 | dev: true 2510 | 2511 | /object.groupby@1.0.1: 2512 | resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} 2513 | dependencies: 2514 | call-bind: 1.0.2 2515 | define-properties: 1.2.1 2516 | es-abstract: 1.22.2 2517 | get-intrinsic: 1.2.1 2518 | dev: true 2519 | 2520 | /object.hasown@1.1.3: 2521 | resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} 2522 | dependencies: 2523 | define-properties: 1.2.1 2524 | es-abstract: 1.22.2 2525 | dev: true 2526 | 2527 | /object.values@1.1.7: 2528 | resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} 2529 | engines: {node: '>= 0.4'} 2530 | dependencies: 2531 | call-bind: 1.0.2 2532 | define-properties: 1.2.1 2533 | es-abstract: 1.22.2 2534 | dev: true 2535 | 2536 | /once@1.4.0: 2537 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2538 | dependencies: 2539 | wrappy: 1.0.2 2540 | dev: true 2541 | 2542 | /onetime@5.1.2: 2543 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 2544 | engines: {node: '>=6'} 2545 | dependencies: 2546 | mimic-fn: 2.1.0 2547 | dev: true 2548 | 2549 | /onetime@6.0.0: 2550 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 2551 | engines: {node: '>=12'} 2552 | dependencies: 2553 | mimic-fn: 4.0.0 2554 | dev: true 2555 | 2556 | /open@9.1.0: 2557 | resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} 2558 | engines: {node: '>=14.16'} 2559 | dependencies: 2560 | default-browser: 4.0.0 2561 | define-lazy-prop: 3.0.0 2562 | is-inside-container: 1.0.0 2563 | is-wsl: 2.2.0 2564 | dev: true 2565 | 2566 | /optionator@0.9.3: 2567 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2568 | engines: {node: '>= 0.8.0'} 2569 | dependencies: 2570 | '@aashutoshrathi/word-wrap': 1.2.6 2571 | deep-is: 0.1.4 2572 | fast-levenshtein: 2.0.6 2573 | levn: 0.4.1 2574 | prelude-ls: 1.2.1 2575 | type-check: 0.4.0 2576 | dev: true 2577 | 2578 | /p-limit@3.1.0: 2579 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2580 | engines: {node: '>=10'} 2581 | dependencies: 2582 | yocto-queue: 0.1.0 2583 | dev: true 2584 | 2585 | /p-locate@5.0.0: 2586 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2587 | engines: {node: '>=10'} 2588 | dependencies: 2589 | p-limit: 3.1.0 2590 | dev: true 2591 | 2592 | /parent-module@1.0.1: 2593 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2594 | engines: {node: '>=6'} 2595 | dependencies: 2596 | callsites: 3.1.0 2597 | dev: true 2598 | 2599 | /path-exists@4.0.0: 2600 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2601 | engines: {node: '>=8'} 2602 | dev: true 2603 | 2604 | /path-is-absolute@1.0.1: 2605 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2606 | engines: {node: '>=0.10.0'} 2607 | dev: true 2608 | 2609 | /path-key@3.1.1: 2610 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2611 | engines: {node: '>=8'} 2612 | dev: true 2613 | 2614 | /path-key@4.0.0: 2615 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 2616 | engines: {node: '>=12'} 2617 | dev: true 2618 | 2619 | /path-parse@1.0.7: 2620 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2621 | dev: true 2622 | 2623 | /path-type@4.0.0: 2624 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2625 | engines: {node: '>=8'} 2626 | dev: true 2627 | 2628 | /picocolors@1.0.0: 2629 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2630 | 2631 | /picomatch@2.3.1: 2632 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2633 | engines: {node: '>=8.6'} 2634 | dev: true 2635 | 2636 | /pify@2.3.0: 2637 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 2638 | engines: {node: '>=0.10.0'} 2639 | dev: true 2640 | 2641 | /pirates@4.0.6: 2642 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 2643 | engines: {node: '>= 6'} 2644 | dev: true 2645 | 2646 | /postcss-import@15.1.0(postcss@8.4.30): 2647 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 2648 | engines: {node: '>=14.0.0'} 2649 | peerDependencies: 2650 | postcss: ^8.0.0 2651 | dependencies: 2652 | postcss: 8.4.30 2653 | postcss-value-parser: 4.2.0 2654 | read-cache: 1.0.0 2655 | resolve: 1.22.6 2656 | dev: true 2657 | 2658 | /postcss-js@4.0.1(postcss@8.4.30): 2659 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 2660 | engines: {node: ^12 || ^14 || >= 16} 2661 | peerDependencies: 2662 | postcss: ^8.4.21 2663 | dependencies: 2664 | camelcase-css: 2.0.1 2665 | postcss: 8.4.30 2666 | dev: true 2667 | 2668 | /postcss-load-config@4.0.1(postcss@8.4.30): 2669 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} 2670 | engines: {node: '>= 14'} 2671 | peerDependencies: 2672 | postcss: '>=8.0.9' 2673 | ts-node: '>=9.0.0' 2674 | peerDependenciesMeta: 2675 | postcss: 2676 | optional: true 2677 | ts-node: 2678 | optional: true 2679 | dependencies: 2680 | lilconfig: 2.1.0 2681 | postcss: 8.4.30 2682 | yaml: 2.3.2 2683 | dev: true 2684 | 2685 | /postcss-nested@6.0.1(postcss@8.4.30): 2686 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 2687 | engines: {node: '>=12.0'} 2688 | peerDependencies: 2689 | postcss: ^8.2.14 2690 | dependencies: 2691 | postcss: 8.4.30 2692 | postcss-selector-parser: 6.0.13 2693 | dev: true 2694 | 2695 | /postcss-selector-parser@6.0.13: 2696 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 2697 | engines: {node: '>=4'} 2698 | dependencies: 2699 | cssesc: 3.0.0 2700 | util-deprecate: 1.0.2 2701 | dev: true 2702 | 2703 | /postcss-value-parser@4.2.0: 2704 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 2705 | dev: true 2706 | 2707 | /postcss@8.4.14: 2708 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} 2709 | engines: {node: ^10 || ^12 || >=14} 2710 | dependencies: 2711 | nanoid: 3.3.6 2712 | picocolors: 1.0.0 2713 | source-map-js: 1.0.2 2714 | dev: false 2715 | 2716 | /postcss@8.4.30: 2717 | resolution: {integrity: sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==} 2718 | engines: {node: ^10 || ^12 || >=14} 2719 | dependencies: 2720 | nanoid: 3.3.6 2721 | picocolors: 1.0.0 2722 | source-map-js: 1.0.2 2723 | dev: true 2724 | 2725 | /prelude-ls@1.2.1: 2726 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2727 | engines: {node: '>= 0.8.0'} 2728 | dev: true 2729 | 2730 | /prettier-linter-helpers@1.0.0: 2731 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 2732 | engines: {node: '>=6.0.0'} 2733 | dependencies: 2734 | fast-diff: 1.3.0 2735 | dev: true 2736 | 2737 | /prettier@3.0.3: 2738 | resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} 2739 | engines: {node: '>=14'} 2740 | hasBin: true 2741 | dev: true 2742 | 2743 | /prop-types@15.8.1: 2744 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 2745 | dependencies: 2746 | loose-envify: 1.4.0 2747 | object-assign: 4.1.1 2748 | react-is: 16.13.1 2749 | dev: true 2750 | 2751 | /punycode@2.3.0: 2752 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2753 | engines: {node: '>=6'} 2754 | dev: true 2755 | 2756 | /queue-microtask@1.2.3: 2757 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2758 | dev: true 2759 | 2760 | /react-dom@18.2.0(react@18.2.0): 2761 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 2762 | peerDependencies: 2763 | react: ^18.2.0 2764 | dependencies: 2765 | loose-envify: 1.4.0 2766 | react: 18.2.0 2767 | scheduler: 0.23.0 2768 | dev: false 2769 | 2770 | /react-is@16.13.1: 2771 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 2772 | dev: true 2773 | 2774 | /react@18.2.0: 2775 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 2776 | engines: {node: '>=0.10.0'} 2777 | dependencies: 2778 | loose-envify: 1.4.0 2779 | dev: false 2780 | 2781 | /read-cache@1.0.0: 2782 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 2783 | dependencies: 2784 | pify: 2.3.0 2785 | dev: true 2786 | 2787 | /readdirp@3.6.0: 2788 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2789 | engines: {node: '>=8.10.0'} 2790 | dependencies: 2791 | picomatch: 2.3.1 2792 | dev: true 2793 | 2794 | /reflect.getprototypeof@1.0.4: 2795 | resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} 2796 | engines: {node: '>= 0.4'} 2797 | dependencies: 2798 | call-bind: 1.0.2 2799 | define-properties: 1.2.1 2800 | es-abstract: 1.22.2 2801 | get-intrinsic: 1.2.1 2802 | globalthis: 1.0.3 2803 | which-builtin-type: 1.1.3 2804 | dev: true 2805 | 2806 | /regenerator-runtime@0.14.0: 2807 | resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} 2808 | dev: true 2809 | 2810 | /regexp.prototype.flags@1.5.1: 2811 | resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} 2812 | engines: {node: '>= 0.4'} 2813 | dependencies: 2814 | call-bind: 1.0.2 2815 | define-properties: 1.2.1 2816 | set-function-name: 2.0.1 2817 | dev: true 2818 | 2819 | /resolve-from@4.0.0: 2820 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2821 | engines: {node: '>=4'} 2822 | dev: true 2823 | 2824 | /resolve-pkg-maps@1.0.0: 2825 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 2826 | dev: true 2827 | 2828 | /resolve@1.22.6: 2829 | resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} 2830 | hasBin: true 2831 | dependencies: 2832 | is-core-module: 2.13.0 2833 | path-parse: 1.0.7 2834 | supports-preserve-symlinks-flag: 1.0.0 2835 | dev: true 2836 | 2837 | /resolve@2.0.0-next.4: 2838 | resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} 2839 | hasBin: true 2840 | dependencies: 2841 | is-core-module: 2.13.0 2842 | path-parse: 1.0.7 2843 | supports-preserve-symlinks-flag: 1.0.0 2844 | dev: true 2845 | 2846 | /reusify@1.0.4: 2847 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2848 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2849 | dev: true 2850 | 2851 | /rimraf@3.0.2: 2852 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2853 | hasBin: true 2854 | dependencies: 2855 | glob: 7.2.3 2856 | dev: true 2857 | 2858 | /run-applescript@5.0.0: 2859 | resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} 2860 | engines: {node: '>=12'} 2861 | dependencies: 2862 | execa: 5.1.1 2863 | dev: true 2864 | 2865 | /run-parallel@1.2.0: 2866 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2867 | dependencies: 2868 | queue-microtask: 1.2.3 2869 | dev: true 2870 | 2871 | /safe-array-concat@1.0.1: 2872 | resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} 2873 | engines: {node: '>=0.4'} 2874 | dependencies: 2875 | call-bind: 1.0.2 2876 | get-intrinsic: 1.2.1 2877 | has-symbols: 1.0.3 2878 | isarray: 2.0.5 2879 | dev: true 2880 | 2881 | /safe-regex-test@1.0.0: 2882 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 2883 | dependencies: 2884 | call-bind: 1.0.2 2885 | get-intrinsic: 1.2.1 2886 | is-regex: 1.1.4 2887 | dev: true 2888 | 2889 | /scheduler@0.23.0: 2890 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 2891 | dependencies: 2892 | loose-envify: 1.4.0 2893 | dev: false 2894 | 2895 | /semver@6.3.1: 2896 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 2897 | hasBin: true 2898 | dev: true 2899 | 2900 | /semver@7.5.4: 2901 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 2902 | engines: {node: '>=10'} 2903 | hasBin: true 2904 | dependencies: 2905 | lru-cache: 6.0.0 2906 | dev: true 2907 | 2908 | /set-function-name@2.0.1: 2909 | resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} 2910 | engines: {node: '>= 0.4'} 2911 | dependencies: 2912 | define-data-property: 1.1.0 2913 | functions-have-names: 1.2.3 2914 | has-property-descriptors: 1.0.0 2915 | dev: true 2916 | 2917 | /shebang-command@2.0.0: 2918 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2919 | engines: {node: '>=8'} 2920 | dependencies: 2921 | shebang-regex: 3.0.0 2922 | dev: true 2923 | 2924 | /shebang-regex@3.0.0: 2925 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2926 | engines: {node: '>=8'} 2927 | dev: true 2928 | 2929 | /side-channel@1.0.4: 2930 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 2931 | dependencies: 2932 | call-bind: 1.0.2 2933 | get-intrinsic: 1.2.1 2934 | object-inspect: 1.12.3 2935 | dev: true 2936 | 2937 | /signal-exit@3.0.7: 2938 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 2939 | dev: true 2940 | 2941 | /slash@3.0.0: 2942 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2943 | engines: {node: '>=8'} 2944 | dev: true 2945 | 2946 | /source-map-js@1.0.2: 2947 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2948 | engines: {node: '>=0.10.0'} 2949 | 2950 | /streamsearch@1.1.0: 2951 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 2952 | engines: {node: '>=10.0.0'} 2953 | dev: false 2954 | 2955 | /string.prototype.matchall@4.0.10: 2956 | resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} 2957 | dependencies: 2958 | call-bind: 1.0.2 2959 | define-properties: 1.2.1 2960 | es-abstract: 1.22.2 2961 | get-intrinsic: 1.2.1 2962 | has-symbols: 1.0.3 2963 | internal-slot: 1.0.5 2964 | regexp.prototype.flags: 1.5.1 2965 | set-function-name: 2.0.1 2966 | side-channel: 1.0.4 2967 | dev: true 2968 | 2969 | /string.prototype.trim@1.2.8: 2970 | resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} 2971 | engines: {node: '>= 0.4'} 2972 | dependencies: 2973 | call-bind: 1.0.2 2974 | define-properties: 1.2.1 2975 | es-abstract: 1.22.2 2976 | dev: true 2977 | 2978 | /string.prototype.trimend@1.0.7: 2979 | resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} 2980 | dependencies: 2981 | call-bind: 1.0.2 2982 | define-properties: 1.2.1 2983 | es-abstract: 1.22.2 2984 | dev: true 2985 | 2986 | /string.prototype.trimstart@1.0.7: 2987 | resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} 2988 | dependencies: 2989 | call-bind: 1.0.2 2990 | define-properties: 1.2.1 2991 | es-abstract: 1.22.2 2992 | dev: true 2993 | 2994 | /strip-ansi@6.0.1: 2995 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2996 | engines: {node: '>=8'} 2997 | dependencies: 2998 | ansi-regex: 5.0.1 2999 | dev: true 3000 | 3001 | /strip-bom@3.0.0: 3002 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 3003 | engines: {node: '>=4'} 3004 | dev: true 3005 | 3006 | /strip-final-newline@2.0.0: 3007 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 3008 | engines: {node: '>=6'} 3009 | dev: true 3010 | 3011 | /strip-final-newline@3.0.0: 3012 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 3013 | engines: {node: '>=12'} 3014 | dev: true 3015 | 3016 | /strip-json-comments@3.1.1: 3017 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 3018 | engines: {node: '>=8'} 3019 | dev: true 3020 | 3021 | /styled-jsx@5.1.1(react@18.2.0): 3022 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} 3023 | engines: {node: '>= 12.0.0'} 3024 | peerDependencies: 3025 | '@babel/core': '*' 3026 | babel-plugin-macros: '*' 3027 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' 3028 | peerDependenciesMeta: 3029 | '@babel/core': 3030 | optional: true 3031 | babel-plugin-macros: 3032 | optional: true 3033 | dependencies: 3034 | client-only: 0.0.1 3035 | react: 18.2.0 3036 | dev: false 3037 | 3038 | /sucrase@3.34.0: 3039 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} 3040 | engines: {node: '>=8'} 3041 | hasBin: true 3042 | dependencies: 3043 | '@jridgewell/gen-mapping': 0.3.3 3044 | commander: 4.1.1 3045 | glob: 7.1.6 3046 | lines-and-columns: 1.2.4 3047 | mz: 2.7.0 3048 | pirates: 4.0.6 3049 | ts-interface-checker: 0.1.13 3050 | dev: true 3051 | 3052 | /supports-color@5.5.0: 3053 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 3054 | engines: {node: '>=4'} 3055 | dependencies: 3056 | has-flag: 3.0.0 3057 | dev: true 3058 | 3059 | /supports-color@7.2.0: 3060 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 3061 | engines: {node: '>=8'} 3062 | dependencies: 3063 | has-flag: 4.0.0 3064 | dev: true 3065 | 3066 | /supports-preserve-symlinks-flag@1.0.0: 3067 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 3068 | engines: {node: '>= 0.4'} 3069 | dev: true 3070 | 3071 | /synckit@0.8.5: 3072 | resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} 3073 | engines: {node: ^14.18.0 || >=16.0.0} 3074 | dependencies: 3075 | '@pkgr/utils': 2.4.2 3076 | tslib: 2.6.2 3077 | dev: true 3078 | 3079 | /tailwindcss@3.3.3: 3080 | resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} 3081 | engines: {node: '>=14.0.0'} 3082 | hasBin: true 3083 | dependencies: 3084 | '@alloc/quick-lru': 5.2.0 3085 | arg: 5.0.2 3086 | chokidar: 3.5.3 3087 | didyoumean: 1.2.2 3088 | dlv: 1.1.3 3089 | fast-glob: 3.3.1 3090 | glob-parent: 6.0.2 3091 | is-glob: 4.0.3 3092 | jiti: 1.20.0 3093 | lilconfig: 2.1.0 3094 | micromatch: 4.0.5 3095 | normalize-path: 3.0.0 3096 | object-hash: 3.0.0 3097 | picocolors: 1.0.0 3098 | postcss: 8.4.30 3099 | postcss-import: 15.1.0(postcss@8.4.30) 3100 | postcss-js: 4.0.1(postcss@8.4.30) 3101 | postcss-load-config: 4.0.1(postcss@8.4.30) 3102 | postcss-nested: 6.0.1(postcss@8.4.30) 3103 | postcss-selector-parser: 6.0.13 3104 | resolve: 1.22.6 3105 | sucrase: 3.34.0 3106 | transitivePeerDependencies: 3107 | - ts-node 3108 | dev: true 3109 | 3110 | /tapable@2.2.1: 3111 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 3112 | engines: {node: '>=6'} 3113 | dev: true 3114 | 3115 | /text-table@0.2.0: 3116 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 3117 | dev: true 3118 | 3119 | /thenify-all@1.6.0: 3120 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 3121 | engines: {node: '>=0.8'} 3122 | dependencies: 3123 | thenify: 3.3.1 3124 | dev: true 3125 | 3126 | /thenify@3.3.1: 3127 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 3128 | dependencies: 3129 | any-promise: 1.3.0 3130 | dev: true 3131 | 3132 | /titleize@3.0.0: 3133 | resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} 3134 | engines: {node: '>=12'} 3135 | dev: true 3136 | 3137 | /to-fast-properties@2.0.0: 3138 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 3139 | engines: {node: '>=4'} 3140 | dev: true 3141 | 3142 | /to-regex-range@5.0.1: 3143 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 3144 | engines: {node: '>=8.0'} 3145 | dependencies: 3146 | is-number: 7.0.0 3147 | dev: true 3148 | 3149 | /ts-api-utils@1.0.3(typescript@5.2.2): 3150 | resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} 3151 | engines: {node: '>=16.13.0'} 3152 | peerDependencies: 3153 | typescript: '>=4.2.0' 3154 | dependencies: 3155 | typescript: 5.2.2 3156 | dev: true 3157 | 3158 | /ts-interface-checker@0.1.13: 3159 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 3160 | dev: true 3161 | 3162 | /tsconfig-paths@3.14.2: 3163 | resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} 3164 | dependencies: 3165 | '@types/json5': 0.0.29 3166 | json5: 1.0.2 3167 | minimist: 1.2.8 3168 | strip-bom: 3.0.0 3169 | dev: true 3170 | 3171 | /tslib@1.14.1: 3172 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 3173 | dev: true 3174 | 3175 | /tslib@2.6.2: 3176 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 3177 | 3178 | /tsutils@3.21.0(typescript@5.2.2): 3179 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 3180 | engines: {node: '>= 6'} 3181 | peerDependencies: 3182 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 3183 | dependencies: 3184 | tslib: 1.14.1 3185 | typescript: 5.2.2 3186 | dev: true 3187 | 3188 | /type-check@0.4.0: 3189 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 3190 | engines: {node: '>= 0.8.0'} 3191 | dependencies: 3192 | prelude-ls: 1.2.1 3193 | dev: true 3194 | 3195 | /type-fest@0.20.2: 3196 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 3197 | engines: {node: '>=10'} 3198 | dev: true 3199 | 3200 | /typed-array-buffer@1.0.0: 3201 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} 3202 | engines: {node: '>= 0.4'} 3203 | dependencies: 3204 | call-bind: 1.0.2 3205 | get-intrinsic: 1.2.1 3206 | is-typed-array: 1.1.12 3207 | dev: true 3208 | 3209 | /typed-array-byte-length@1.0.0: 3210 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} 3211 | engines: {node: '>= 0.4'} 3212 | dependencies: 3213 | call-bind: 1.0.2 3214 | for-each: 0.3.3 3215 | has-proto: 1.0.1 3216 | is-typed-array: 1.1.12 3217 | dev: true 3218 | 3219 | /typed-array-byte-offset@1.0.0: 3220 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} 3221 | engines: {node: '>= 0.4'} 3222 | dependencies: 3223 | available-typed-arrays: 1.0.5 3224 | call-bind: 1.0.2 3225 | for-each: 0.3.3 3226 | has-proto: 1.0.1 3227 | is-typed-array: 1.1.12 3228 | dev: true 3229 | 3230 | /typed-array-length@1.0.4: 3231 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 3232 | dependencies: 3233 | call-bind: 1.0.2 3234 | for-each: 0.3.3 3235 | is-typed-array: 1.1.12 3236 | dev: true 3237 | 3238 | /typescript@5.2.2: 3239 | resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} 3240 | engines: {node: '>=14.17'} 3241 | hasBin: true 3242 | dev: true 3243 | 3244 | /unbox-primitive@1.0.2: 3245 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 3246 | dependencies: 3247 | call-bind: 1.0.2 3248 | has-bigints: 1.0.2 3249 | has-symbols: 1.0.3 3250 | which-boxed-primitive: 1.0.2 3251 | dev: true 3252 | 3253 | /untildify@4.0.0: 3254 | resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} 3255 | engines: {node: '>=8'} 3256 | dev: true 3257 | 3258 | /update-browserslist-db@1.0.13(browserslist@4.21.11): 3259 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 3260 | hasBin: true 3261 | peerDependencies: 3262 | browserslist: '>= 4.21.0' 3263 | dependencies: 3264 | browserslist: 4.21.11 3265 | escalade: 3.1.1 3266 | picocolors: 1.0.0 3267 | dev: true 3268 | 3269 | /uri-js@4.4.1: 3270 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 3271 | dependencies: 3272 | punycode: 2.3.0 3273 | dev: true 3274 | 3275 | /util-deprecate@1.0.2: 3276 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 3277 | dev: true 3278 | 3279 | /watchpack@2.4.0: 3280 | resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} 3281 | engines: {node: '>=10.13.0'} 3282 | dependencies: 3283 | glob-to-regexp: 0.4.1 3284 | graceful-fs: 4.2.11 3285 | dev: false 3286 | 3287 | /which-boxed-primitive@1.0.2: 3288 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 3289 | dependencies: 3290 | is-bigint: 1.0.4 3291 | is-boolean-object: 1.1.2 3292 | is-number-object: 1.0.7 3293 | is-string: 1.0.7 3294 | is-symbol: 1.0.4 3295 | dev: true 3296 | 3297 | /which-builtin-type@1.1.3: 3298 | resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} 3299 | engines: {node: '>= 0.4'} 3300 | dependencies: 3301 | function.prototype.name: 1.1.6 3302 | has-tostringtag: 1.0.0 3303 | is-async-function: 2.0.0 3304 | is-date-object: 1.0.5 3305 | is-finalizationregistry: 1.0.2 3306 | is-generator-function: 1.0.10 3307 | is-regex: 1.1.4 3308 | is-weakref: 1.0.2 3309 | isarray: 2.0.5 3310 | which-boxed-primitive: 1.0.2 3311 | which-collection: 1.0.1 3312 | which-typed-array: 1.1.11 3313 | dev: true 3314 | 3315 | /which-collection@1.0.1: 3316 | resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} 3317 | dependencies: 3318 | is-map: 2.0.2 3319 | is-set: 2.0.2 3320 | is-weakmap: 2.0.1 3321 | is-weakset: 2.0.2 3322 | dev: true 3323 | 3324 | /which-typed-array@1.1.11: 3325 | resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} 3326 | engines: {node: '>= 0.4'} 3327 | dependencies: 3328 | available-typed-arrays: 1.0.5 3329 | call-bind: 1.0.2 3330 | for-each: 0.3.3 3331 | gopd: 1.0.1 3332 | has-tostringtag: 1.0.0 3333 | dev: true 3334 | 3335 | /which@2.0.2: 3336 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 3337 | engines: {node: '>= 8'} 3338 | hasBin: true 3339 | dependencies: 3340 | isexe: 2.0.0 3341 | dev: true 3342 | 3343 | /wrappy@1.0.2: 3344 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3345 | dev: true 3346 | 3347 | /yallist@4.0.0: 3348 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3349 | dev: true 3350 | 3351 | /yaml@2.3.2: 3352 | resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} 3353 | engines: {node: '>= 14'} 3354 | dev: true 3355 | 3356 | /yocto-queue@0.1.0: 3357 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3358 | engines: {node: '>=10'} 3359 | dev: true 3360 | 3361 | /zod@3.21.4: 3362 | resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} 3363 | dev: false 3364 | -------------------------------------------------------------------------------- /assignment-4/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /assignment-4/public/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assignment-4/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assignment-4/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwarvesf/df-frontend-2023/3ec9e6c4b2e429ddc21b2640823f97085d79f67f/assignment-4/src/app/favicon.ico -------------------------------------------------------------------------------- /assignment-4/src/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --foreground-rgb: 0, 0, 0; 7 | --background-start-rgb: 214, 219, 220; 8 | --background-end-rgb: 255, 255, 255; 9 | } 10 | 11 | @media (prefers-color-scheme: dark) { 12 | :root { 13 | --foreground-rgb: 255, 255, 255; 14 | --background-start-rgb: 0, 0, 0; 15 | --background-end-rgb: 0, 0, 0; 16 | } 17 | } 18 | 19 | body { 20 | color: rgb(var(--foreground-rgb)); 21 | background: linear-gradient( 22 | to bottom, 23 | transparent, 24 | rgb(var(--background-end-rgb)) 25 | ) 26 | rgb(var(--background-start-rgb)); 27 | } 28 | -------------------------------------------------------------------------------- /assignment-4/src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import './globals.css' 2 | import type { Metadata } from 'next' 3 | import { Inter } from 'next/font/google' 4 | 5 | const inter = Inter({ subsets: ['latin'] }) 6 | 7 | export const metadata: Metadata = { 8 | title: 'Create Next App', 9 | description: 'Generated by create next app', 10 | } 11 | 12 | export default function RootLayout({ 13 | children, 14 | }: { 15 | children: React.ReactNode 16 | }) { 17 | return ( 18 | 19 | {children} 20 | 21 | ) 22 | } 23 | -------------------------------------------------------------------------------- /assignment-4/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Image from 'next/image' 3 | 4 | export default function Home() { 5 | return ( 6 |
7 |
8 |

9 | Get started by editing  10 | src/app/page.tsx 11 |

12 | 30 |
31 | 32 |
33 | Next.js Logo 41 |
42 | 43 |
44 | 50 |

51 | Docs{' '} 52 | 53 | -> 54 | 55 |

56 |

57 | Find in-depth information about Next.js features and API. 58 |

59 |
60 | 61 | 67 |

68 | Learn{' '} 69 | 70 | -> 71 | 72 |

73 |

74 | Learn about Next.js in an interactive course with quizzes! 75 |

76 |
77 | 78 | 84 |

85 | Templates{' '} 86 | 87 | -> 88 | 89 |

90 |

91 | Explore the Next.js 13 playground. 92 |

93 |
94 | 95 | 101 |

102 | Deploy{' '} 103 | 104 | -> 105 | 106 |

107 |

108 | Instantly deploy your Next.js site to a shareable URL with Vercel. 109 |

110 |
111 |
112 |
113 | ) 114 | } 115 | -------------------------------------------------------------------------------- /assignment-4/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'tailwindcss' 2 | 3 | const config: Config = { 4 | content: [ 5 | './src/pages/**/*.{js,ts,jsx,tsx,mdx}', 6 | './src/components/**/*.{js,ts,jsx,tsx,mdx}', 7 | './src/app/**/*.{js,ts,jsx,tsx,mdx}', 8 | ], 9 | theme: { 10 | extend: { 11 | backgroundImage: { 12 | 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', 13 | 'gradient-conic': 14 | 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', 15 | }, 16 | }, 17 | }, 18 | plugins: [], 19 | } 20 | export default config 21 | -------------------------------------------------------------------------------- /assignment-4/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "allowSyntheticDefaultImports": true, 17 | "types": ["node"], 18 | "noUnusedLocals": false, 19 | "noUnusedParameters": true, 20 | "forceConsistentCasingInFileNames": false, 21 | "noImplicitAny": false, 22 | "checkJs": false, 23 | "strictNullChecks": true, 24 | "strictFunctionTypes": true, 25 | "strictPropertyInitialization": true, 26 | "useUnknownInCatchVariables": false, 27 | "noImplicitThis": true, 28 | "plugins": [ 29 | { 30 | "name": "next" 31 | } 32 | ] 33 | }, 34 | "include": [ 35 | "next-env.d.ts", 36 | ".next/types/**/*.ts", 37 | "**/*.ts", 38 | "**/*.tsx", 39 | "**/*.d.ts", 40 | "**/*.js", 41 | "**/*.jsx" 42 | ], 43 | "exclude": ["node_modules"] 44 | } 45 | -------------------------------------------------------------------------------- /assignment-5/README.md: -------------------------------------------------------------------------------- 1 | # Form Handling 2 | 3 | Improve our [Assignment 04's Next.js application](../assignment-4/) application by adding an "Edit" feature for book details. Also, integrate a user-friendly and secure login page while ensuring a rigorous form validation system throughout the application. This enhancement aims to bolster the user experience and the overall security of the platform. 4 | 5 |

6 | 7 |

8 | 9 | ## Requirements 10 | 11 | 1. Use the functionalities from [Assignment 04](../assignment-4/) as a foundation. 12 | 2. Augment the book details page with an "Edit" button. 13 | 3. The 'Edit' button should trigger a modal window containing a pre-filled form with the current book details. This allows users to update the information and save changes. 14 | 4. Introduce a login page with a form that captures: 15 | - Email 16 | - Password 17 | 5. All forms should have validation and user-friendly error indicators. 18 | 19 | ### Validation rules 20 | 21 | **Book Creation/Editing:** 22 | 23 | - Book name: Minimum of 5 characters, required. 24 | - Author name: Only letters and spaces, required. 25 | - Book topic: Must select from available options, required. 26 | 27 | **Login Form:** 28 | 29 | - Email: Valid email pattern, required. 30 | - Password: Minimum of 8 characters with at least 1 uppercase and 1 symbol, required. 31 | 32 | ### Deliverables 33 | 34 | - Well-crafted Typescript NextJS Project with fully formatted, all the necessary components, functionalities, and error-free. 35 | - Ensure that form UI reflect an error state and display an appropriate message when an error occurs. 36 | - Ensure your code is fully formatted and adheres to comprehensive coding conventions. 37 | - Ensure the project is deployable and provide a demo link for review. 38 | - **Bonus**: Implement a [Password Strength Meter](https://www.passwordmonster.com/). For password fields, display a dynamic strength meter that updates based on password complexity. 39 | 40 | ### What Are We Looking For? 41 | 42 | - Effective use of form hooks and robust validation techniques. 43 | - Full implementation of all features listed in the requirements. 44 | - Demonstrated improvement and incorporation of feedback received from previous assignments. 45 | 46 | ## Submission 47 | 48 | - Ensure all assignment code is placed within the **`/assignment-5`** directory. You should transfer all of the application code from your Assignment 04 and relocate it to this folder. 49 | - The final submission deadline is **08/10/2023**. 50 | - After finalizing and ensuring a deployable demo, open a Github issue in your forked repository titled "**Submission for Assignment 5.**" Include the demo link in the description. 51 | -------------------------------------------------------------------------------- /assignment-6/README.md: -------------------------------------------------------------------------------- 1 | # Authentication & API Integration 2 | 3 | With your foundational work from Assignments 04 & 05, it's time to turn your Next.js application into a dynamic powerhouse by integrating with a backend API. The goal for this assignment is to introduce the integration of backend services, understand protected routes, and API caching mechanism. 4 | 5 | Refer to the API documentation at: [**Bookstore API Docs**](https://develop-api.bookstore.dwarvesf.com/swagger/index.html). 6 | 7 | ## **Requirements** 8 | 9 | - Begin by incorporating the functionalities already built in the Next.js application from [Assignment 05](../assignment-5/). 10 | - Seamlessly integrate the APIs into the UI. 11 | - Protect all routes, exempting the `/login` route. Unauthorized access to protected routes should redirect the user back to the login page. 12 | - Incorporate a "Log out" button prominently within the application header. This button should effectively log out the user and redirect to the login page. 13 | - Implement caching for the responses obtained from GET APIs. The intention is to provide an almost instantaneous loading experience for the end user. 14 | 15 | **Create account to authorize APIs** 16 | 17 | - Head to API swagger documentation at: [**Bookstore API Docs**.](https://develop-api.bookstore.dwarvesf.com/swagger/index.html#/Auth/signup) 18 | - Expand the accordion row [POST] `auth/signup`. 19 | - Next, click on `Try it out` button, and input the account information into the body data. 20 | - After that, click on the `Execute` button to make the API call. 21 | - If you receive the status below, it means your account has been successfully created. 22 | 23 | ![success-created-account](../assets/bookstore-api/../bookstore-api-account.png) 24 | 25 | ### **Deliverables** 26 | 27 | - Ensure that the form, authentication mechanisms, data caching, and protected routes correctly represent their intended states. 28 | - Assure that the code is thoroughly formatted and aligns with comprehensive coding conventions. 29 | - Confirm the project's deployability and, as proof, provide a working demo link for review and assessment. 30 | - **Bonus:** Revoke access if an API responds 401 error code. 31 | - **Bonus:** Elevate your application's security and performance by storing user credentials securely using cookies and implementing Server Side Rendering (SSR) for all the pages. 32 | 33 | ### **What Are We Looking For?** 34 | 35 | - Proficiently leveraging data fetching, SWR, and navigating protected routes with authentication. 36 | - Completing the implementation of all the features outlined in the requirements. 37 | - Demonstrating clear improvement and the successful integration of feedback received from previous assignments. 38 | 39 | ## **Submission** 40 | 41 | - Ensure all assignment code is neatly contained within the **`/assignment-6`** directory. Transfer any necessary application code from your previous assignments into this directory. 42 | - The last date to ensure your submission is **13/10/2023**. 43 | - Upon finalizing your work and ensuring that your demo is deployable, initiate a Github issue in your forked repository titled "**Submission for Assignment 6**." Remember to include the demo link within the issue's description for easy accessibility. 44 | -------------------------------------------------------------------------------- /assignment-7/README.md: -------------------------------------------------------------------------------- 1 | # Type-safe client server 2 | 3 | Building on the momentum from [Assignment 06](../assignment-6/), this assignment emphasizes the importance of type-safety between the frontend and backend. By ensuring that both ends speak the same **"type"** language, we mitigate risks, reduce potential bugs, and enhance the robustness of our applications. 4 | 5 | ## **Requirements** 6 | 7 | 1. Start with the Next.js project you developed in [Assignment 06](../assignment-6/). 8 | 2. Make use of [Orval](https://orval.dev/) to pull the schema documentation from the [**Bookstore API**](https://develop-api.bookstore.dwarvesf.com/swagger/index.html). This tool will allow you to ensure type-safety by generating client-side types based on the server's API schema. 9 | 3. With the schema in hand, leverage SWR to fetch data and ensure that the frontend correctly interprets and displays the Bookstore API responses. 10 | 4. For guidance on setting up **`Orval`** within your Next.js project, consider referencing the [Next.js Boilerplate](https://github.com/dwarvesf/nextjs-boilerplate). This resource offers a structured way to integrate type-safe practices into your project. 11 | 12 | ### **Deliverables** 13 | 14 | - Ensure your codebase is clean, readable, and strictly adheres to type-safe practices. Your client-side code should seamlessly match the server-side schema, minimizing type mismatches and potential errors. 15 | - Confirm the project's deployability. Ensure that there's a smooth data flow between the backend and frontend, with API responses accurately represented in the UI. 16 | 17 | ### **What We Are Looking For?** 18 | 19 | - Mastery in integrating type-safe practices into your application. This isn't just about using tools but understanding the principle behind type-safety and its advantages. 20 | - Successful implementation of all listed requirements. 21 | - Clear progression from the previous assignments. We're keen to see how you've incorporated feedback and elevated the quality of your project. 22 | 23 | ## **Submission** 24 | 25 | - All assignment-related code should reside in the **`/assignment-7`** directory. Please migrate necessary codes from prior assignments into this directory, ensuring a clear distinction between projects. 26 | - The submission deadline is **`15/10/2023`**. 27 | - Once you've finalized your work and confirmed its deployability, raise a Github issue in your forked repository titled "**Submission for Assignment 7**". Within the issue's description, include the demo link for easy access and review. 28 | -------------------------------------------------------------------------------- /final-project/README.md: -------------------------------------------------------------------------------- 1 | # Final Project 2 | 3 | Your final project will consist of creating an app that takes advantage of ChatGPT and LLMs. We have a list of possible application ideas listed in our [Google Sheets](https://docs.google.com/spreadsheets/d/11DjfMCVNNgEGEKZ2jhNWenjMdQnaTQ3cXtA72KxGQgU/edit#gid=286807029). Please submit any other ideas you may have to the team and we will assign one of our engineers to help and support you with your project. 4 | 5 | Some ideas will include, but are not limited to: 6 | 7 | 1. **Code review**: A process of reviewing a software codebase to identify bugs, increase code quality, and help developers learn the source code. An important step in the software development process to get a second opinion on the solution and implementation before it’s merged into an upstream branch like a feature branch or the main branch. 8 | 9 | 2. **Chess game**: A board game for two players, either with Chinese or Western chess, each controlling an army of chess pieces, with the objective to checkmate the opponent's king. Have ChatGPT evaluate positions on the board and create an optimal strategy and path to win the game. 10 | 11 | 3. **Interview training app**: An app that helps candidates and students practice interviews through customized interviews, instant feedback, questions prepared, answer guide, and other features. Use case is to provide powerful insight on how you perform and boosts your confidence by receiving instant feedback on your answers and learn from your mistakes during every interview. 12 | 13 | 4. **i18n helper app**: An app that helps developers prepare their software for multilingual support (i18n) and align internationalized software with particular cultures' needs (l10n) by translating and generating JSON files. 14 | 15 | 5. **Social media manager**: A tool that helps businesses manage their social media accounts by scheduling posts, analyzing performance metrics, monitoring mentions of their brand or products, and engaging with their audience. It can help businesses save time and streamline their social media marketing efforts. 16 | 17 | 6. **Resume builder**: A tool that helps job seekers create professional resumes quickly and easily by providing templates, tips, and suggestions for content based on the job seeker's experience and skills. It can help job seekers stand out from other applicants by presenting their qualifications in a clear and concise manner. 18 | 19 | 7. **Mermaid chart generator**: A tool that generates diagrams and flowcharts using text-based syntax called Mermaid. It allows users to create diagrams quickly without having to use a graphical user interface (GUI). Mermaid supports various types of diagrams such as flowcharts, sequence diagrams, Gantt charts, class diagrams, state diagrams, pie charts, ER diagrams, etc. 20 | 21 | 8. **Storybook GPT**: A tool that generates component stories using ChatGPT. It allows developers to create component stories without having to write them by hand. It can help developers save time and effort by automating the process of creating component stories. 22 | 23 | 9. **Language learning app**: An app that helps users learn a new language by providing lessons on grammar, vocabulary, pronunciation, etc., through interactive exercises such as quizzes, games, flashcards, etc., Users can track their progress over time and receive feedback on their performance to improve their language skills effectively. Some popular language learning apps include Duolingo, Babbel, Rosetta Stone, etc. 24 | 25 | ## Dwarves Chat API 26 | 27 | We have a simple chat API that allows users to send and receive messages. We've hosted our API to be a clone of OpenAI's [chat completions](https://platform.openai.com/docs/api-reference/chat) API. If you have any issues with our API, please open an issue in our `#frontend-23` channel on Discord. 28 | 29 | - https://openrouter-api.dwarvesf.com/api/v1/docs 30 | - https://openrouter-api.dwarvesf.com/api/v1/openapi.json 31 | 32 | ![](https://i.imgur.com/yVyZpd1.png) 33 | 34 | ### Generating the types in your frontend app 35 | 36 | If you haven't cloned our boilerplate, refer to it here and clone it to get started: https://github.com/dwarvesf/nextjs-boilerplate. This project uses PNPM, so be sure to install it. 37 | 38 | Once you've cloned the project, you can run `pnpm install` to install all the dependencies. 39 | 40 | Edit your `orval.config.js` file and update the target OpenAPI document to the `openapi.json` file from our API server: 41 | 42 | ```diff 43 | ... 44 | input: { 45 | - target: 'https://demo-api.dwarvesf.com/swagger/doc.json', 46 | + target: 'https://openrouter-api.dwarvesf.com/api/v1/openapi.json', 47 | validation: false, 48 | }, 49 | ... 50 | ``` 51 | 52 | Then run the `generate:api` command we've added in the `package.json` with PNPM: 53 | 54 | ```sh 55 | pnpm run generate:api 56 | ``` 57 | 58 | You will be able to see your types and code generated from our API: 59 | 60 | ![](https://i.imgur.com/hzZQza1.png) 61 | 62 | ### API Usage 63 | 64 | Our base URL for our API lives at `https://openrouter-api.dwarvesf.com/api/v1`. In our API, we have essentially 2 routes: 65 | 66 | - `/auth/login` 67 | 68 | This API is used to authenticate the user. It takes in a username and password and returns an access token. 69 | 70 | There are a few things you need to be aware before using this API: 71 | 72 | 1. Your username is your `Discord's name` you've specified in the [Google Sheets](https://docs.google.com/spreadsheets/d/11DjfMCVNNgEGEKZ2jhNWenjMdQnaTQ3cXtA72KxGQgU/edit?usp=sharing). 73 | 2. Your password will provided for you. Ask our engineers on our `#frontend-23` channel, and we'll PM your your pass. 74 | 3. **You will need to acquire an access token from this API to use the chat completions API.** 75 | 76 | ![](https://i.imgur.com/eP61LNl.png) 77 | 78 | Example curl request: 79 | ```sh 80 | curl -X 'POST' \ 81 | 'https://https://openrouter-api.dwarvesf.com/api/v1/auth/login' \ 82 | -H 'accept: application/json' \ 83 | -H 'Content-Type: application/json' \ 84 | -d '{ 85 | "username": "monotykamary", 86 | "password": "---" 87 | }' 88 | ``` 89 | 90 | Example response: 91 | ```sh 92 | { 93 | "data": { 94 | "id": 1, 95 | "username": "monotykamary", 96 | "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJtb25vdHlrYW1hcnkiLCJhcGlLZXkiOiJzay1vci12MS0uLi4iLCJhbGciOiJIUzI1NiJ9.77-977-977-9R--_vT7vv707Ve-_vdWIHy7vv73vv70P77-9J0Vu77-9ae-_vXTvv73vv71yGu-_vUkK.vF2e8-ZI_81Yo43omG8HWNy1wgyqxDVtXEsjzMyv8ks" 97 | } 98 | } 99 | ``` 100 | 101 | The access token will be used in the `Authorization` Header for the chat completions API. 102 | 103 | - `/chat/completions` 104 | 105 | This API mimics OpenAI's [chat completions](https://platform.openai.com/docs/api-reference/chat) API. You can refer to their [docs](https://platform.openai.com/docs/guides/gpt/chat-completions-api) for reference on how to use this API in depth. 106 | 107 | The `accessToken` you acquire from the `/auth/login` API will be used in the `Authorization` header. Take note that this **this API supports both POST and SSE requests.** 108 | 109 | Example curl request: 110 | ```sh 111 | curl -X 'POST' \ 112 | 'https://openrouter-api.dwarvesf.com/api/v1/chat/completions' \ 113 | -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJtb25vdHlrYW1' \ 114 | -H 'accept: application/json' \ 115 | -H 'Content-Type: application/json' \ 116 | -d '{ 117 | "model": "openai/gpt-3.5-turbo", 118 | "messages": [ 119 | {"role": "system", "content": "You are a helpful assistant."}, 120 | {"role": "user", "content": "Explain the Great Gatsby in 200 words."} 121 | ] 122 | }' 123 | ``` 124 | 125 | Example response: 126 | ```sh 127 | { 128 | "id": "gen-41dd85g17iuKzKcxMxZeMLSoOoGA", 129 | "model": "openai/gpt-3.5-turbo", 130 | "choices": [ 131 | { 132 | "message": { 133 | "role": "assistant", 134 | "content": "The Great Gatsby is a novel written by F. Scott Fitzgerald, published in 1925. It is set in the summer of 1922 in Long Island, New York, and follows the lives of several wealthy characters as they navigate love, ambition, and social status.\n\nThe main character, Jay Gatsby, is a mysterious millionaire who throws lavish parties in hopes of winning back his lost love, Daisy Buchanan. Daisy is married to a man named Tom, who is having an affair with a woman named Myrtle.\n\nAs the story unfolds, the characters' secrets and desires are revealed, leading to tragic consequences. The novel explores themes of the American Dream, wealth, love, and social class, and is considered a classic of American literature.\n\nThe Great Gatsby is known for its vivid descriptions of the Roaring Twenties, including the extravagant parties and glamorous lifestyles of the wealthy. It is also known for its complex characters and their struggles with identity, desire, and the pursuit of happiness." 135 | } 136 | } 137 | ] 138 | } 139 | ``` 140 | 141 | You can also run this on our API to see the response: https://openrouter-api.dwarvesf.com/api/v1/chat/completions. 142 | 143 | ![](https://i.imgur.com/gSv3Zl2.png) 144 | 145 | ![](https://i.imgur.com/eup03Av.png) 146 | 147 | To stream with the API, update your curl request to include the header `Accept: text/event-stream` and in your body, add `stream: true`: 148 | 149 | ```sh 150 | curl -X 'POST' \ 151 | 'https://openrouter-api.dwarvesf.com/api/v1/chat/completions' \ 152 | -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJtb25vdHlrYW1' \ 153 | -H 'accept: application/json' \ 154 | -H 'Content-Type: application/json' \ 155 | -H 'Accept: text/event-stream' \ 156 | -d '{ 157 | "model": "openai/gpt-3.5-turbo", 158 | "messages": [ 159 | {"role": "system", "content": "You are a helpful assistant."}, 160 | {"role": "user", "content": "Explain the Great Gatsby in 200 words."} 161 | ], 162 | "stream": true 163 | }' 164 | ``` 165 | 166 | You will get a **stream** of responses as the API processes your message. You can use this message stream to append your messages in real-time. 167 | ``` 168 | ... 169 | 170 | data: {"id": "gen-xGt1Nyy2WbqG7RgOCqbgMwsnAosJ", "choices": [{"index": 0, "delta": {"role": "assistant", "content": "\n"}}]} 171 | 172 | ... 173 | ``` 174 | 175 | #### CORS 176 | 177 | When using CORS, we advise you add the `Origin` and the `Access-Control-Request-Headers` headers to your request. 178 | 179 | ```sh 180 | curl -X 'POST' \ 181 | 'https://openrouter-api.dwarvesf.com/api/v1/chat/completions' \ 182 | -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJtb25vdHlrYW1' \ 183 | -H 'accept: application/json' \ 184 | -H 'Origin: http://localhost'\ 185 | -H 'Access-Control-Request-Method: POST' \ 186 | -H 'Content-Type: application/json' \ 187 | -d '{ 188 | "model": "openai/gpt-3.5-turbo", 189 | "messages": [ 190 | {"role": "system", "content": "You are a helpful assistant."}, 191 | {"role": "user", "content": "Explain the Great Gatsby in 200 words."} 192 | ] 193 | }' 194 | ``` 195 | 196 | When using our API, you will see that you can select your chat model. We support any models hosted on [OpenRouter](https://openrouter.ai/docs#quick-start). However, we highly recommend you use the following models for your application: 197 | 198 | - `openai/gpt-3.5-turbo` 199 | - `openai/gpt-3.5-turbo-16k` 200 | - `openai/gpt-4` 201 | - `openai/gpt-4-32k` 202 | - `openai/gpt-3.5-turbo-instruct` 203 | 204 | Also take note that your access token will have a credit limit to how many tokens you can request on our server. If you need more credits, contact our engineers on our `#frontend-23` channel. 205 | --------------------------------------------------------------------------------