├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── images ├── Code_Vyzc5YbawL.gif ├── new-screenshot.png └── screenshot.png ├── index.html ├── package.json ├── postcss.config.js ├── src ├── App.test.tsx ├── App.tsx ├── components │ ├── Header.tsx │ ├── Instructions.tsx │ ├── Keyboard.tsx │ └── WordRow.tsx ├── hooks │ ├── useGuess.tsx │ └── usePrevious.tsx ├── index.css ├── main.tsx ├── store.ts ├── test │ ├── test-setup.ts │ └── test-utils.tsx ├── vite-env.d.ts ├── word-bank.json ├── word-utils.test.ts └── word-utils.ts ├── tailwind.config.js ├── tsconfig.json ├── tsconfig.node.json ├── vite.config.ts └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .vscode/ -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "useTabs": false, 4 | "trailingComma": "none" 5 | } 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2022 Shoubhit Dash 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

nexdle

2 | 3 | ![screenshot](https://github.com/nexxeln/nexdle/blob/main/images/new-screenshot.png?raw=true) 4 | 5 |

6 | CodeFactor 7 | license 8 |

9 |

Play here!

10 |

If you're finding the game difficult you can always use the wordle solver I made :)

11 | 12 | ## Overview 13 | 14 | A [wordle](https://www.nytimes.com/games/wordle/index.html) clone made with [React](https://reactjs.org/), [TypeScript](https://www.typescriptlang.org/), [TailwindCSS](https://tailwindcss.com/), [Vite](https://vitejs.dev/) and [Zustand](https://github.com/pmndrs/zustand). This project was a great learning experience for me, I learnt a lot about CSS grids, custom hooks in React, using state management libraries like Zustand, and how to use testing tools ([Vitest](https://vitest.dev/) in this case). 15 | 16 | ## Run locally 17 | 18 | - Clone the repository 19 | 20 | ```bash 21 | git clone https://github.com/nexxeln/nexdle.git 22 | ``` 23 | 24 | - Install dependencies 25 | 26 | ```bash 27 | cd nexdle 28 | yarn 29 | ``` 30 | 31 | - Run the app 32 | 33 | ```bash 34 | yarn dev 35 | ``` 36 | 37 | - To run tests 38 | 39 | ```bash 40 | yarn test 41 | ``` 42 | 43 | - To run tests using the insane vitest ui feature 44 | 45 | ```bash 46 | yarn test:ui 47 | ``` 48 | 49 | ![vitest-ui](https://github.com/nexxeln/nexdle/blob/main/images/Code_Vyzc5YbawL.gif?raw=true) 50 | 51 | ## Contributing 52 | 53 | Contributions are welcome! 54 | 55 | ## License 56 | 57 | This repository is licensed under the [Apache 2.0 license](https://github.com/nexxeln/nexdle/blob/main/LICENSE), generated by [gen-license](https://github.com/nexxeln/license-generator). 58 | -------------------------------------------------------------------------------- /images/Code_Vyzc5YbawL.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nexxeln/nexdle/20fa2b15717ff56b71607df97663445a42abe708/images/Code_Vyzc5YbawL.gif -------------------------------------------------------------------------------- /images/new-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nexxeln/nexdle/20fa2b15717ff56b71607df97663445a42abe708/images/new-screenshot.png -------------------------------------------------------------------------------- /images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nexxeln/nexdle/20fa2b15717ff56b71607df97663445a42abe708/images/screenshot.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 14 | 18 | 19 | 23 | 24 | nexdle 25 | 26 | 27 |
28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ui", 3 | "private": true, 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "tsc && vite build", 8 | "preview": "vite preview", 9 | "test": "vitest", 10 | "coverage": "vitest run --coverage", 11 | "test:ui": "vitest --ui" 12 | }, 13 | "dependencies": { 14 | "react": "18", 15 | "react-dom": "18", 16 | "react-icons": "^4.3.1", 17 | "zustand": "^3.7.1" 18 | }, 19 | "devDependencies": { 20 | "@testing-library/jest-dom": "^5.16.2", 21 | "@testing-library/react": "^12.1.4", 22 | "@testing-library/react-hooks": "^7.0.2", 23 | "@testing-library/user-event": "^13.5.0", 24 | "@types/node": "^17.0.21", 25 | "@types/react": "^17.0.33", 26 | "@types/react-dom": "^17.0.10", 27 | "@vitejs/plugin-react": "^1.0.7", 28 | "@vitest/ui": "^0.7.4", 29 | "autoprefixer": "^10.4.4", 30 | "jsdom": "^19.0.0", 31 | "postcss": "^8.4.12", 32 | "tailwindcss": "^3.0.23", 33 | "typescript": "^4.5.4", 34 | "vite": "^2.8.0", 35 | "vitest": "^0.7.4" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /src/App.test.tsx: -------------------------------------------------------------------------------- 1 | import { describe, expect, test } from "vitest"; 2 | import App from "./App"; 3 | import { useStore } from "./store"; 4 | import { render, screen, userEvent } from "./test/test-utils"; 5 | 6 | describe("Simple working test", () => { 7 | test("the title is visible", () => { 8 | render(); 9 | expect(screen.getByText(/nexdle/i)).toBeInTheDocument(); 10 | }); 11 | 12 | test("shows empty state", () => { 13 | useStore.getState().newGame([]); 14 | render(); 15 | expect(screen.queryByText("Game Over!")).toBeNull(); 16 | expect(document.querySelectorAll("main div")).toHaveLength(6); 17 | expect(document.querySelector("main")?.textContent).toEqual(""); 18 | }); 19 | 20 | test("shows one row of guesses", () => { 21 | useStore.getState().newGame(["touch"]); 22 | render(); 23 | expect(document.querySelector("main")?.textContent).toEqual("touch"); 24 | }); 25 | 26 | test("shows lost game over state", () => { 27 | useStore.getState().newGame(Array(6).fill("grass")); 28 | render(); 29 | expect(screen.getByText("Game Over!")).toBeInTheDocument(); 30 | }); 31 | 32 | test("shows won game over state", () => { 33 | useStore.getState().newGame(Array(2).fill("grass")); 34 | const answer = useStore.getState().answer; 35 | useStore.getState().addGuess(answer); 36 | render(); 37 | expect(screen.getByText("You Won!")).toBeInTheDocument(); 38 | }); 39 | 40 | test("able to start new game", () => { 41 | useStore.getState().newGame(Array(6).fill("grass")); 42 | render(); 43 | expect(screen.getByText("Game Over!")).toBeInTheDocument(); 44 | userEvent.click(screen.getByText("NEW GAME")); 45 | expect(document.querySelector("main")?.textContent).toEqual(""); 46 | }); 47 | 48 | test("able to see instructions modal", () => { 49 | render(); 50 | userEvent.click(screen.getByTestId("instructions")); 51 | expect(screen.getByText("HOW TO PLAY")).toBeInTheDocument(); 52 | }); 53 | 54 | test("able to close instructions modal", () => { 55 | render(); 56 | userEvent.click(screen.getByTestId("instructions")); 57 | userEvent.click(screen.getByTestId("close-instructions")); 58 | expect(screen.queryByText("HOW TO PLAY")).toBeNull(); 59 | }); 60 | }); 61 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import { useGuess } from "./hooks/useGuess"; 2 | import WordRow from "./components/WordRow"; 3 | import { useStore, GUESS_LENGTH } from "./store"; 4 | import { useEffect, useState } from "react"; 5 | import { usePrevious } from "./hooks/usePrevious"; 6 | import { isValidWord, LETTER_LENGTH } from "./word-utils"; 7 | import Keyboard from "./components/Keyboard"; 8 | import Header from "./components/Header"; 9 | 10 | const App = () => { 11 | const state = useStore(); 12 | const [guess, setGuess, addGuessLetter] = useGuess(); 13 | const addGuess = useStore((s) => s.addGuess); 14 | const previousGuess = usePrevious(guess); 15 | const [showInvalidGuess, setInvalidGuess] = useState(false); 16 | 17 | useEffect(() => { 18 | let id: NodeJS.Timeout; 19 | if (showInvalidGuess) { 20 | id = setTimeout(() => setInvalidGuess(false), 2000); 21 | } 22 | 23 | return () => { 24 | clearTimeout(id); 25 | }; 26 | }, [showInvalidGuess]); 27 | 28 | useEffect(() => { 29 | if (guess.length === 0 && previousGuess?.length === LETTER_LENGTH) { 30 | if (isValidWord(previousGuess)) { 31 | addGuess(previousGuess); 32 | setInvalidGuess(false); 33 | } else { 34 | setInvalidGuess(true); 35 | setGuess(previousGuess); 36 | } 37 | } 38 | }, [guess]); 39 | 40 | let rows = [...state.rows]; 41 | let currentRow = 0; 42 | 43 | if (rows.length < GUESS_LENGTH) { 44 | currentRow = rows.push({ guess }) - 1; 45 | } 46 | 47 | const numOfGuessesRemaining = GUESS_LENGTH - rows.length; 48 | 49 | const isGameOver = state.gameState !== "playing"; 50 | 51 | rows = rows.concat(Array(numOfGuessesRemaining).fill("")); 52 | 53 | return ( 54 |
55 |
56 |
57 | 58 |
59 | {rows.map(({ guess, result }, index) => ( 60 | 68 | ))} 69 |
70 | 71 | { 73 | addGuessLetter(letter); 74 | }} 75 | /> 76 | 77 | {isGameOver && ( 78 |
82 | {state.gameState === "won" ? ( 83 | 84 | You Won! 85 | 86 | ) : ( 87 | 88 | Game Over! 89 | 90 | )} 91 | 92 | {state.gameState === "lost" && ( 93 | 97 | )} 98 | 99 | 108 |
109 | )} 110 |
111 |
112 | ); 113 | }; 114 | 115 | export default App; 116 | -------------------------------------------------------------------------------- /src/components/Header.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from "react"; 2 | import { FaGithub } from "react-icons/fa"; 3 | import { BsPatchQuestion } from "react-icons/bs"; 4 | import Instructions from "./Instructions"; 5 | 6 | const Header = () => { 7 | const [isInstructionsOpen, setIsInstructionsOpen] = useState(false); 8 | 9 | const toggleInstructions = () => setIsInstructionsOpen(!isInstructionsOpen); 10 | 11 | return ( 12 |
13 | 16 | 17 | 18 | 19 |

20 | nexdle 21 |

22 | 23 | 24 | 25 | 26 |
27 | ); 28 | }; 29 | 30 | export default Header; 31 | -------------------------------------------------------------------------------- /src/components/Instructions.tsx: -------------------------------------------------------------------------------- 1 | import { AiOutlineCloseCircle } from "react-icons/ai"; 2 | 3 | interface InstructionsProps { 4 | isOpen: boolean; 5 | onClose: () => void; 6 | } 7 | 8 | const Instructions = ({ isOpen, onClose }: InstructionsProps) => { 9 | return isOpen ? ( 10 |
14 |
15 |

HOW TO PLAY

16 | 21 | 22 |

23 | The goal of the game is to guess the word within six{" "} 24 | tries. Each guess should be a valid five-letter word. 25 | Hit the enter button to submit your guess. After each guess the color 26 | of the tiles will change to indicate how close your guess was to the 27 | answer. 28 |
29 |
30 |

31 | 32 |
33 |
34 | 35 | W 36 | 37 | ={">"} 38 |

39 | The letter W is in the word and 40 | in the correct spot. 41 |

42 |
43 | 44 |
45 | 46 | W 47 | 48 | ={">"} 49 |

50 | The letter W is in the word but 51 | in the wrong spot. 52 |

53 |
54 | 55 |
56 | 57 | W 58 | 59 | ={">"} 60 |

61 | The letter W is not in the word 62 | in any spot. 63 |

64 |
65 |
66 |
67 |
68 | ) : null; 69 | }; 70 | 71 | export default Instructions; 72 | -------------------------------------------------------------------------------- /src/components/Keyboard.tsx: -------------------------------------------------------------------------------- 1 | import { useStore } from "../store"; 2 | import { LetterState } from "../word-utils"; 3 | import { BsFillBackspaceFill } from "react-icons/bs"; 4 | 5 | interface KeyboardProps { 6 | onClick: (key: string) => void; 7 | } 8 | export default function Keyboard({ onClick: onClickProps }: KeyboardProps) { 9 | const keyboardLetterState = useStore((s) => s.keyboardLetterState); 10 | 11 | const onClick = (e: React.MouseEvent) => { 12 | const { textContent, innerHTML } = e.currentTarget; 13 | 14 | let returnProps = textContent!; 15 | 16 | if (textContent !== innerHTML) { 17 | returnProps = "Backspace"; 18 | } 19 | 20 | onClickProps(returnProps); 21 | }; 22 | 23 | return ( 24 |
25 | {keyboardKeys.map((keyboardRow, rowIndex) => ( 26 |
30 | {keyboardRow.map((key, index) => { 31 | let styles = "rounded font-bold uppercase flex-1 py-2"; 32 | 33 | const letterState = keyStateStyles[keyboardLetterState[key]]; 34 | 35 | if (letterState) { 36 | styles += " text-white px-1 " + letterState; 37 | } else if (key !== "") { 38 | styles += " bg-gray-600"; 39 | } 40 | 41 | if (key === "") { 42 | styles += " pointer-events-none"; 43 | } else { 44 | styles += " px-1"; 45 | } 46 | 47 | return ( 48 | 51 | ); 52 | })} 53 |
54 | ))} 55 |
56 | ); 57 | } 58 | 59 | const keyStateStyles = { 60 | [LetterState.Miss]: "bg-gray-800", 61 | [LetterState.Present]: "bg-yellow-500", 62 | [LetterState.Match]: "bg-green-500" 63 | }; 64 | 65 | const keyboardKeys = [ 66 | ["q", "w", "e", "r", "t", "y", "u", "i", "o", "p"], 67 | ["", "a", "s", "d", "f", "g", "h", "j", "k", "l", ""], 68 | ["Enter", "z", "x", "c", "v", "b", "n", "m", "Backspace"] 69 | ]; 70 | 71 | const backspace = ( 72 | 79 | 85 | 86 | ); 87 | -------------------------------------------------------------------------------- /src/components/WordRow.tsx: -------------------------------------------------------------------------------- 1 | import { LetterState, LETTER_LENGTH } from "../word-utils"; 2 | 3 | interface WordRowProps { 4 | letters: string; 5 | result?: LetterState[]; 6 | className?: string; 7 | } 8 | 9 | const WordRow = ({ 10 | letters: lettersProp = "", 11 | result = [], 12 | className = "" 13 | }: WordRowProps) => { 14 | const lettersRemaining = LETTER_LENGTH - lettersProp.length; 15 | const letters = lettersProp 16 | .split("") 17 | .concat(Array(lettersRemaining).fill("")); 18 | 19 | return ( 20 |
21 | {letters.map((char, index) => ( 22 | 23 | ))} 24 |
25 | ); 26 | }; 27 | 28 | const characterStateStyles = { 29 | [LetterState.Miss]: "bg-gray-800 border-gray-800", 30 | [LetterState.Present]: "bg-yellow-500 border-yellow-500", 31 | [LetterState.Match]: "bg-green-500 border-green-500" 32 | }; 33 | 34 | interface CharacterBoxProps { 35 | value: string; 36 | state?: LetterState; 37 | } 38 | 39 | const CharacterBox = ({ value, state }: CharacterBoxProps) => { 40 | const stateStyles = state == null ? "" : characterStateStyles[state]; 41 | 42 | return ( 43 | 46 | {value} 47 | 48 | ); 49 | }; 50 | 51 | export default WordRow; 52 | -------------------------------------------------------------------------------- /src/hooks/useGuess.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | import { LETTER_LENGTH } from "../word-utils"; 3 | 4 | export function useGuess(): [ 5 | string, 6 | React.Dispatch>, 7 | (letter: string) => void 8 | ] { 9 | const guessState = useState(""); 10 | const [guess, setGuess] = guessState; 11 | 12 | const addGuessLetter = (letter: string) => { 13 | setGuess((currentGuess) => { 14 | const newGuess = 15 | letter.length === 1 && currentGuess.length !== LETTER_LENGTH 16 | ? currentGuess + letter 17 | : currentGuess; 18 | 19 | switch (letter) { 20 | case "Backspace": 21 | return newGuess.slice(0, -1); 22 | 23 | case "Enter": 24 | if (newGuess.length === LETTER_LENGTH) { 25 | return ""; 26 | } 27 | } 28 | 29 | if (newGuess.length === LETTER_LENGTH) { 30 | return newGuess; 31 | } 32 | 33 | return newGuess; 34 | }); 35 | }; 36 | 37 | const handleKeyDown = (e: KeyboardEvent) => { 38 | let letter = e.key; 39 | addGuessLetter(letter); 40 | }; 41 | 42 | useEffect(() => { 43 | document.addEventListener("keydown", handleKeyDown); 44 | return () => { 45 | document.removeEventListener("keydown", handleKeyDown); 46 | }; 47 | }, []); 48 | 49 | return [guess, setGuess, addGuessLetter]; 50 | } 51 | -------------------------------------------------------------------------------- /src/hooks/usePrevious.tsx: -------------------------------------------------------------------------------- 1 | import { useRef, useEffect } from "react"; 2 | 3 | export function usePrevious(value: T): T | undefined { 4 | const ref: React.MutableRefObject = useRef(); 5 | 6 | useEffect(() => { 7 | ref.current = value; 8 | }, [value]); 9 | 10 | return ref.current; 11 | } 12 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | body { 6 | margin: 0; 7 | padding: 0; 8 | background-color: #191a19; 9 | } 10 | -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from "react"; 2 | import { createRoot } from "react-dom/client"; 3 | import "./index.css"; 4 | import App from "./App"; 5 | 6 | const container = document.getElementById("root") as HTMLElement; 7 | const root = createRoot(container); 8 | 9 | root.render( 10 | 11 | 12 | 13 | ); 14 | -------------------------------------------------------------------------------- /src/store.ts: -------------------------------------------------------------------------------- 1 | import create from "zustand"; 2 | import { persist } from "zustand/middleware"; 3 | import { computeGuess, getRandomWord, LetterState } from "./word-utils"; 4 | 5 | export const GUESS_LENGTH = 6; 6 | 7 | interface GuessRow { 8 | guess: string; 9 | result?: LetterState[]; 10 | } 11 | 12 | interface StoreState { 13 | answer: string; 14 | rows: GuessRow[]; 15 | gameState: "playing" | "won" | "lost"; 16 | keyboardLetterState: { [letter: string]: LetterState }; 17 | addGuess: (guess: string) => void; 18 | newGame: (initialGuess?: string[]) => void; 19 | } 20 | 21 | export const useStore = create( 22 | persist( 23 | (set, get) => { 24 | const addGuess = (guess: string) => { 25 | const result = computeGuess(guess, get().answer); 26 | 27 | const didWin = result.every((l) => l === LetterState.Match); 28 | 29 | const rows = [...get().rows, { guess, result }]; 30 | 31 | const keyboardLetterState = get().keyboardLetterState; 32 | 33 | result.forEach((r, index) => { 34 | const resultGuessLetter = guess[index]; 35 | 36 | const currentLetterState = keyboardLetterState[resultGuessLetter]; 37 | 38 | switch (currentLetterState) { 39 | case LetterState.Match: 40 | break; 41 | 42 | case LetterState.Present: 43 | if (r === LetterState.Miss) { 44 | break; 45 | } 46 | 47 | default: 48 | keyboardLetterState[resultGuessLetter] = r; 49 | break; 50 | } 51 | }); 52 | 53 | set(() => ({ 54 | rows, 55 | keyboardLetterState: keyboardLetterState, 56 | gameState: didWin 57 | ? "won" 58 | : rows.length === GUESS_LENGTH 59 | ? "lost" 60 | : "playing" 61 | })); 62 | }; 63 | 64 | return { 65 | answer: getRandomWord(), 66 | rows: [], 67 | keyboardLetterState: {}, 68 | gameState: "playing", 69 | addGuess, 70 | newGame: (initialRows = []) => { 71 | set({ 72 | answer: getRandomWord(), 73 | rows: [], 74 | keyboardLetterState: {}, 75 | gameState: "playing" 76 | }); 77 | 78 | initialRows.forEach(addGuess); 79 | } 80 | }; 81 | }, 82 | { 83 | name: "nexdle" // unique name 84 | } 85 | ) 86 | ); 87 | -------------------------------------------------------------------------------- /src/test/test-setup.ts: -------------------------------------------------------------------------------- 1 | import "@testing-library/jest-dom"; 2 | -------------------------------------------------------------------------------- /src/test/test-utils.tsx: -------------------------------------------------------------------------------- 1 | import { render } from "@testing-library/react"; 2 | 3 | const customRender = (ui: React.ReactElement, options = {}) => 4 | render(ui, { 5 | // wrap provider(s) here if needed 6 | wrapper: ({ children }) => children, 7 | ...options, 8 | }); 9 | 10 | export * from "@testing-library/react"; 11 | export { default as userEvent } from "@testing-library/user-event"; 12 | // override render export 13 | export { customRender as render }; 14 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /src/word-utils.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, test } from "vitest"; 2 | import { 3 | computeGuess, 4 | getRandomWord, 5 | LetterState, 6 | isValidWord 7 | } from "./word-utils"; 8 | 9 | describe("getRandomWord", () => { 10 | test("random word", () => { 11 | expect(getRandomWord()).toBeTruthy(); 12 | expect(getRandomWord().length).toEqual(5); 13 | }); 14 | }); 15 | 16 | describe("computeGuess", () => { 17 | test("works with match and present", () => { 18 | expect(computeGuess("great", "grass")).toEqual([ 19 | LetterState.Match, 20 | LetterState.Match, 21 | LetterState.Miss, 22 | LetterState.Present, 23 | LetterState.Miss 24 | ]); 25 | }); 26 | 27 | test("works with all matches", () => { 28 | expect(computeGuess("grass", "grass")).toEqual([ 29 | LetterState.Match, 30 | LetterState.Match, 31 | LetterState.Match, 32 | LetterState.Match, 33 | LetterState.Match 34 | ]); 35 | }); 36 | 37 | test("works with all misses", () => { 38 | expect(computeGuess("clone", "grass")).toEqual([ 39 | LetterState.Miss, 40 | LetterState.Miss, 41 | LetterState.Miss, 42 | LetterState.Miss, 43 | LetterState.Miss 44 | ]); 45 | }); 46 | 47 | test("only returns one match when two letters are present", () => { 48 | expect(computeGuess("guest", "grass")).toEqual([ 49 | LetterState.Match, 50 | LetterState.Miss, 51 | LetterState.Miss, 52 | LetterState.Match, 53 | LetterState.Miss 54 | ]); 55 | }); 56 | 57 | test("if a letter is guessed multiple times and is in the answer multiple times", () => { 58 | expect(computeGuess("reeds", "fever")).toEqual([ 59 | LetterState.Present, 60 | LetterState.Match, 61 | LetterState.Present, 62 | LetterState.Miss, 63 | LetterState.Miss 64 | ]); 65 | }); 66 | 67 | test("when two letters are present but the answer has only one of those letters", () => { 68 | expect(computeGuess("berry", "grass")).toEqual([ 69 | LetterState.Miss, 70 | LetterState.Miss, 71 | LetterState.Present, 72 | LetterState.Miss, 73 | LetterState.Miss 74 | ]); 75 | }); 76 | 77 | test("when one letter matches but the guess has more of that letter", () => { 78 | expect(computeGuess("berry", "birds")).toEqual([ 79 | LetterState.Match, 80 | LetterState.Miss, 81 | LetterState.Match, 82 | LetterState.Miss, 83 | LetterState.Miss 84 | ]); 85 | }); 86 | 87 | test("returns empty array when given incomplete word", () => { 88 | expect(computeGuess("g", "grass")).toEqual([]); 89 | }); 90 | }); 91 | 92 | describe("isValidWord", () => { 93 | test("works with a valid word in the word bank", () => { 94 | expect(isValidWord("grass")).toBe(true); 95 | }); 96 | 97 | test("works with an invalid word in the word bank", () => { 98 | expect(isValidWord("hduoh")).toBe(false); 99 | }); 100 | }); 101 | -------------------------------------------------------------------------------- /src/word-utils.ts: -------------------------------------------------------------------------------- 1 | import wordBank from "./word-bank.json"; 2 | 3 | export const getRandomWord = () => { 4 | const randomIndex = Math.floor(Math.random() * wordBank.valid.length); 5 | 6 | return wordBank.valid[randomIndex]; 7 | }; 8 | 9 | export const LETTER_LENGTH = 5; 10 | 11 | export enum LetterState { 12 | Miss, 13 | Present, 14 | Match 15 | } 16 | 17 | export const computeGuess = (guess: string, answer: string): LetterState[] => { 18 | const result: LetterState[] = []; 19 | 20 | if (guess.length !== answer.length) { 21 | return result; 22 | } 23 | 24 | const guessArray = guess.split(""); 25 | const answerArray = answer.split(""); 26 | 27 | const match = guessArray.map((letter) => ({ 28 | letter: letter, 29 | state: LetterState.Miss 30 | })); 31 | 32 | for (let i = guessArray.length - 1; i >= 0; i--) { 33 | if (answer[i] === guessArray[i]) { 34 | match[i].state = LetterState.Match; 35 | answerArray.splice(i, 1); 36 | } 37 | } 38 | 39 | guessArray.forEach((letter, i) => { 40 | if (answerArray.includes(letter) && match[i].state !== LetterState.Match) { 41 | match[i].state = LetterState.Present; 42 | answerArray.splice(answerArray.indexOf(letter), 1); 43 | } 44 | }); 45 | 46 | match.forEach((letter) => { 47 | result.push(letter.state); 48 | }); 49 | 50 | return result; 51 | }; 52 | 53 | export const isValidWord = (guess: string): boolean => { 54 | return wordBank.valid.concat(wordBank.invalid).includes(guess); 55 | }; 56 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: ["./index.html", "./src/**/*.{ts,tsx}"], 3 | theme: { 4 | extend: {} 5 | }, 6 | plugins: [] 7 | }; 8 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 6 | "allowJs": false, 7 | "skipLibCheck": false, 8 | "esModuleInterop": false, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "ESNext", 13 | "moduleResolution": "Node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react-jsx" 18 | }, 19 | "include": ["src"], 20 | "references": [{ "path": "./tsconfig.node.json" }] 21 | } 22 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "esnext", 5 | "moduleResolution": "node" 6 | }, 7 | "include": ["vite.config.ts"] 8 | } 9 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | import { defineConfig } from "vite"; 5 | import react from "@vitejs/plugin-react"; 6 | 7 | // https://vitejs.dev/config/ 8 | export default defineConfig({ 9 | plugins: [react()], 10 | test: { 11 | globals: true, 12 | environment: "jsdom", 13 | setupFiles: "./src/test/test-setup.ts" 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.1.0": 6 | version "2.1.2" 7 | resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz" 8 | integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== 9 | dependencies: 10 | "@jridgewell/trace-mapping" "^0.3.0" 11 | 12 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.7": 13 | version "7.16.7" 14 | resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz" 15 | integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== 16 | dependencies: 17 | "@babel/highlight" "^7.16.7" 18 | 19 | "@babel/compat-data@^7.17.7": 20 | version "7.17.7" 21 | resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz" 22 | integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== 23 | 24 | "@babel/core@^7.16.12": 25 | version "7.17.8" 26 | resolved "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz" 27 | integrity sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ== 28 | dependencies: 29 | "@ampproject/remapping" "^2.1.0" 30 | "@babel/code-frame" "^7.16.7" 31 | "@babel/generator" "^7.17.7" 32 | "@babel/helper-compilation-targets" "^7.17.7" 33 | "@babel/helper-module-transforms" "^7.17.7" 34 | "@babel/helpers" "^7.17.8" 35 | "@babel/parser" "^7.17.8" 36 | "@babel/template" "^7.16.7" 37 | "@babel/traverse" "^7.17.3" 38 | "@babel/types" "^7.17.0" 39 | convert-source-map "^1.7.0" 40 | debug "^4.1.0" 41 | gensync "^1.0.0-beta.2" 42 | json5 "^2.1.2" 43 | semver "^6.3.0" 44 | 45 | "@babel/generator@^7.17.3", "@babel/generator@^7.17.7": 46 | version "7.17.7" 47 | resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz" 48 | integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== 49 | dependencies: 50 | "@babel/types" "^7.17.0" 51 | jsesc "^2.5.1" 52 | source-map "^0.5.0" 53 | 54 | "@babel/helper-annotate-as-pure@^7.16.7": 55 | version "7.16.7" 56 | resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz" 57 | integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== 58 | dependencies: 59 | "@babel/types" "^7.16.7" 60 | 61 | "@babel/helper-compilation-targets@^7.17.7": 62 | version "7.17.7" 63 | resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz" 64 | integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== 65 | dependencies: 66 | "@babel/compat-data" "^7.17.7" 67 | "@babel/helper-validator-option" "^7.16.7" 68 | browserslist "^4.17.5" 69 | semver "^6.3.0" 70 | 71 | "@babel/helper-environment-visitor@^7.16.7": 72 | version "7.16.7" 73 | resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz" 74 | integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== 75 | dependencies: 76 | "@babel/types" "^7.16.7" 77 | 78 | "@babel/helper-function-name@^7.16.7": 79 | version "7.16.7" 80 | resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz" 81 | integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== 82 | dependencies: 83 | "@babel/helper-get-function-arity" "^7.16.7" 84 | "@babel/template" "^7.16.7" 85 | "@babel/types" "^7.16.7" 86 | 87 | "@babel/helper-get-function-arity@^7.16.7": 88 | version "7.16.7" 89 | resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz" 90 | integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== 91 | dependencies: 92 | "@babel/types" "^7.16.7" 93 | 94 | "@babel/helper-hoist-variables@^7.16.7": 95 | version "7.16.7" 96 | resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz" 97 | integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== 98 | dependencies: 99 | "@babel/types" "^7.16.7" 100 | 101 | "@babel/helper-module-imports@^7.16.7": 102 | version "7.16.7" 103 | resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz" 104 | integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== 105 | dependencies: 106 | "@babel/types" "^7.16.7" 107 | 108 | "@babel/helper-module-transforms@^7.17.7": 109 | version "7.17.7" 110 | resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz" 111 | integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== 112 | dependencies: 113 | "@babel/helper-environment-visitor" "^7.16.7" 114 | "@babel/helper-module-imports" "^7.16.7" 115 | "@babel/helper-simple-access" "^7.17.7" 116 | "@babel/helper-split-export-declaration" "^7.16.7" 117 | "@babel/helper-validator-identifier" "^7.16.7" 118 | "@babel/template" "^7.16.7" 119 | "@babel/traverse" "^7.17.3" 120 | "@babel/types" "^7.17.0" 121 | 122 | "@babel/helper-plugin-utils@^7.16.7": 123 | version "7.16.7" 124 | resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz" 125 | integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== 126 | 127 | "@babel/helper-simple-access@^7.17.7": 128 | version "7.17.7" 129 | resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz" 130 | integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== 131 | dependencies: 132 | "@babel/types" "^7.17.0" 133 | 134 | "@babel/helper-split-export-declaration@^7.16.7": 135 | version "7.16.7" 136 | resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz" 137 | integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== 138 | dependencies: 139 | "@babel/types" "^7.16.7" 140 | 141 | "@babel/helper-validator-identifier@^7.16.7": 142 | version "7.16.7" 143 | resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz" 144 | integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== 145 | 146 | "@babel/helper-validator-option@^7.16.7": 147 | version "7.16.7" 148 | resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz" 149 | integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== 150 | 151 | "@babel/helpers@^7.17.8": 152 | version "7.17.8" 153 | resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz" 154 | integrity sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw== 155 | dependencies: 156 | "@babel/template" "^7.16.7" 157 | "@babel/traverse" "^7.17.3" 158 | "@babel/types" "^7.17.0" 159 | 160 | "@babel/highlight@^7.16.7": 161 | version "7.16.10" 162 | resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz" 163 | integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== 164 | dependencies: 165 | "@babel/helper-validator-identifier" "^7.16.7" 166 | chalk "^2.0.0" 167 | js-tokens "^4.0.0" 168 | 169 | "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.8": 170 | version "7.17.8" 171 | resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz" 172 | integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== 173 | 174 | "@babel/plugin-syntax-jsx@^7.16.7": 175 | version "7.16.7" 176 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz" 177 | integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== 178 | dependencies: 179 | "@babel/helper-plugin-utils" "^7.16.7" 180 | 181 | "@babel/plugin-transform-react-jsx-development@^7.16.7": 182 | version "7.16.7" 183 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz" 184 | integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== 185 | dependencies: 186 | "@babel/plugin-transform-react-jsx" "^7.16.7" 187 | 188 | "@babel/plugin-transform-react-jsx-self@^7.16.7": 189 | version "7.16.7" 190 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz" 191 | integrity sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA== 192 | dependencies: 193 | "@babel/helper-plugin-utils" "^7.16.7" 194 | 195 | "@babel/plugin-transform-react-jsx-source@^7.16.7": 196 | version "7.16.7" 197 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz" 198 | integrity sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw== 199 | dependencies: 200 | "@babel/helper-plugin-utils" "^7.16.7" 201 | 202 | "@babel/plugin-transform-react-jsx@^7.16.7": 203 | version "7.17.3" 204 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz" 205 | integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== 206 | dependencies: 207 | "@babel/helper-annotate-as-pure" "^7.16.7" 208 | "@babel/helper-module-imports" "^7.16.7" 209 | "@babel/helper-plugin-utils" "^7.16.7" 210 | "@babel/plugin-syntax-jsx" "^7.16.7" 211 | "@babel/types" "^7.17.0" 212 | 213 | "@babel/runtime@^7.12.5", "@babel/runtime@^7.9.2": 214 | version "7.17.8" 215 | resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz" 216 | integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== 217 | dependencies: 218 | regenerator-runtime "^0.13.4" 219 | 220 | "@babel/template@^7.16.7": 221 | version "7.16.7" 222 | resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz" 223 | integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== 224 | dependencies: 225 | "@babel/code-frame" "^7.16.7" 226 | "@babel/parser" "^7.16.7" 227 | "@babel/types" "^7.16.7" 228 | 229 | "@babel/traverse@^7.17.3": 230 | version "7.17.3" 231 | resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz" 232 | integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== 233 | dependencies: 234 | "@babel/code-frame" "^7.16.7" 235 | "@babel/generator" "^7.17.3" 236 | "@babel/helper-environment-visitor" "^7.16.7" 237 | "@babel/helper-function-name" "^7.16.7" 238 | "@babel/helper-hoist-variables" "^7.16.7" 239 | "@babel/helper-split-export-declaration" "^7.16.7" 240 | "@babel/parser" "^7.17.3" 241 | "@babel/types" "^7.17.0" 242 | debug "^4.1.0" 243 | globals "^11.1.0" 244 | 245 | "@babel/types@^7.16.7", "@babel/types@^7.17.0": 246 | version "7.17.0" 247 | resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" 248 | integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== 249 | dependencies: 250 | "@babel/helper-validator-identifier" "^7.16.7" 251 | to-fast-properties "^2.0.0" 252 | 253 | "@jridgewell/resolve-uri@^3.0.3": 254 | version "3.0.5" 255 | resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz" 256 | integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== 257 | 258 | "@jridgewell/sourcemap-codec@^1.4.10": 259 | version "1.4.11" 260 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz" 261 | integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== 262 | 263 | "@jridgewell/trace-mapping@^0.3.0": 264 | version "0.3.4" 265 | resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz" 266 | integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== 267 | dependencies: 268 | "@jridgewell/resolve-uri" "^3.0.3" 269 | "@jridgewell/sourcemap-codec" "^1.4.10" 270 | 271 | "@nodelib/fs.scandir@2.1.5": 272 | version "2.1.5" 273 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 274 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 275 | dependencies: 276 | "@nodelib/fs.stat" "2.0.5" 277 | run-parallel "^1.1.9" 278 | 279 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 280 | version "2.0.5" 281 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 282 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 283 | 284 | "@nodelib/fs.walk@^1.2.3": 285 | version "1.2.8" 286 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 287 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 288 | dependencies: 289 | "@nodelib/fs.scandir" "2.1.5" 290 | fastq "^1.6.0" 291 | 292 | "@polka/url@^1.0.0-next.20": 293 | version "1.0.0-next.21" 294 | resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz" 295 | integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== 296 | 297 | "@rollup/pluginutils@^4.1.2": 298 | version "4.2.0" 299 | resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.0.tgz" 300 | integrity sha512-2WUyJNRkyH5p487pGnn4tWAsxhEFKN/pT8CMgHshd5H+IXkOnKvKZwsz5ZWz+YCXkleZRAU5kwbfgF8CPfDRqA== 301 | dependencies: 302 | estree-walker "^2.0.1" 303 | picomatch "^2.2.2" 304 | 305 | "@testing-library/dom@^8.0.0": 306 | version "8.11.3" 307 | resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-8.11.3.tgz" 308 | integrity sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA== 309 | dependencies: 310 | "@babel/code-frame" "^7.10.4" 311 | "@babel/runtime" "^7.12.5" 312 | "@types/aria-query" "^4.2.0" 313 | aria-query "^5.0.0" 314 | chalk "^4.1.0" 315 | dom-accessibility-api "^0.5.9" 316 | lz-string "^1.4.4" 317 | pretty-format "^27.0.2" 318 | 319 | "@testing-library/jest-dom@^5.16.2": 320 | version "5.16.2" 321 | resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.2.tgz" 322 | integrity sha512-6ewxs1MXWwsBFZXIk4nKKskWANelkdUehchEOokHsN8X7c2eKXGw+77aRV63UU8f/DTSVUPLaGxdrj4lN7D/ug== 323 | dependencies: 324 | "@babel/runtime" "^7.9.2" 325 | "@types/testing-library__jest-dom" "^5.9.1" 326 | aria-query "^5.0.0" 327 | chalk "^3.0.0" 328 | css "^3.0.0" 329 | css.escape "^1.5.1" 330 | dom-accessibility-api "^0.5.6" 331 | lodash "^4.17.15" 332 | redent "^3.0.0" 333 | 334 | "@testing-library/react-hooks@^7.0.2": 335 | version "7.0.2" 336 | resolved "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-7.0.2.tgz" 337 | integrity sha512-dYxpz8u9m4q1TuzfcUApqi8iFfR6R0FaMbr2hjZJy1uC8z+bO/K4v8Gs9eogGKYQop7QsrBTFkv/BCF7MzD2Cg== 338 | dependencies: 339 | "@babel/runtime" "^7.12.5" 340 | "@types/react" ">=16.9.0" 341 | "@types/react-dom" ">=16.9.0" 342 | "@types/react-test-renderer" ">=16.9.0" 343 | react-error-boundary "^3.1.0" 344 | 345 | "@testing-library/react@^12.1.4": 346 | version "12.1.4" 347 | resolved "https://registry.npmjs.org/@testing-library/react/-/react-12.1.4.tgz" 348 | integrity sha512-jiPKOm7vyUw311Hn/HlNQ9P8/lHNtArAx0PisXyFixDDvfl8DbD6EUdbshK5eqauvBSvzZd19itqQ9j3nferJA== 349 | dependencies: 350 | "@babel/runtime" "^7.12.5" 351 | "@testing-library/dom" "^8.0.0" 352 | "@types/react-dom" "*" 353 | 354 | "@testing-library/user-event@^13.5.0": 355 | version "13.5.0" 356 | resolved "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz" 357 | integrity sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg== 358 | dependencies: 359 | "@babel/runtime" "^7.12.5" 360 | 361 | "@tootallnate/once@2": 362 | version "2.0.0" 363 | resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" 364 | integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== 365 | 366 | "@types/aria-query@^4.2.0": 367 | version "4.2.2" 368 | resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz" 369 | integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== 370 | 371 | "@types/chai-subset@^1.3.3": 372 | version "1.3.3" 373 | resolved "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz" 374 | integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== 375 | dependencies: 376 | "@types/chai" "*" 377 | 378 | "@types/chai@*", "@types/chai@^4.3.0": 379 | version "4.3.0" 380 | resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz" 381 | integrity sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw== 382 | 383 | "@types/jest@*": 384 | version "27.4.1" 385 | resolved "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz" 386 | integrity sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw== 387 | dependencies: 388 | jest-matcher-utils "^27.0.0" 389 | pretty-format "^27.0.0" 390 | 391 | "@types/node@^17.0.21": 392 | version "17.0.21" 393 | resolved "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz" 394 | integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== 395 | 396 | "@types/parse-json@^4.0.0": 397 | version "4.0.0" 398 | resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" 399 | integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== 400 | 401 | "@types/prop-types@*": 402 | version "15.7.4" 403 | resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz" 404 | integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== 405 | 406 | "@types/react-dom@*", "@types/react-dom@>=16.9.0", "@types/react-dom@^17.0.10": 407 | version "17.0.13" 408 | resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.13.tgz" 409 | integrity sha512-wEP+B8hzvy6ORDv1QBhcQia4j6ea4SFIBttHYpXKPFZRviBvknq0FRh3VrIxeXUmsPkwuXVZrVGG7KUVONmXCQ== 410 | dependencies: 411 | "@types/react" "*" 412 | 413 | "@types/react-test-renderer@>=16.9.0": 414 | version "17.0.1" 415 | resolved "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-17.0.1.tgz" 416 | integrity sha512-3Fi2O6Zzq/f3QR9dRnlnHso9bMl7weKCviFmfF6B4LS1Uat6Hkm15k0ZAQuDz+UBq6B3+g+NM6IT2nr5QgPzCw== 417 | dependencies: 418 | "@types/react" "*" 419 | 420 | "@types/react@*", "@types/react@>=16.9.0", "@types/react@^17.0.33": 421 | version "17.0.40" 422 | resolved "https://registry.npmjs.org/@types/react/-/react-17.0.40.tgz" 423 | integrity sha512-UrXhD/JyLH+W70nNSufXqMZNuUD2cXHu6UjCllC6pmOQgBX4SGXOH8fjRka0O0Ee0HrFxapDD8Bwn81Kmiz6jQ== 424 | dependencies: 425 | "@types/prop-types" "*" 426 | "@types/scheduler" "*" 427 | csstype "^3.0.2" 428 | 429 | "@types/scheduler@*": 430 | version "0.16.2" 431 | resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" 432 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== 433 | 434 | "@types/testing-library__jest-dom@^5.9.1": 435 | version "5.14.3" 436 | resolved "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.3.tgz" 437 | integrity sha512-oKZe+Mf4ioWlMuzVBaXQ9WDnEm1+umLx0InILg+yvZVBBDmzV5KfZyLrCvadtWcx8+916jLmHafcmqqffl+iIw== 438 | dependencies: 439 | "@types/jest" "*" 440 | 441 | "@vitejs/plugin-react@^1.0.7": 442 | version "1.2.0" 443 | resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.2.0.tgz" 444 | integrity sha512-Rywwt0IXXg6yQ0hv3cMT3mtdDcGIw31mGaa+MMMAT651LhoXLF2yFy4LrakiTs7UKs7RPBo9eNgaS8pgl2A6Qw== 445 | dependencies: 446 | "@babel/core" "^7.16.12" 447 | "@babel/plugin-transform-react-jsx" "^7.16.7" 448 | "@babel/plugin-transform-react-jsx-development" "^7.16.7" 449 | "@babel/plugin-transform-react-jsx-self" "^7.16.7" 450 | "@babel/plugin-transform-react-jsx-source" "^7.16.7" 451 | "@rollup/pluginutils" "^4.1.2" 452 | react-refresh "^0.11.0" 453 | resolve "^1.22.0" 454 | 455 | "@vitest/ui@^0.7.4": 456 | version "0.7.4" 457 | resolved "https://registry.npmjs.org/@vitest/ui/-/ui-0.7.4.tgz" 458 | integrity sha512-FfUU1um8o+Cic44fTWxbGXv6sPMSiZxTysPxbR+2/K8t9+d0DzWsSa3lUjTRgiJQ1tiQpRP2sT4kkM/UO8XdzQ== 459 | dependencies: 460 | sirv "^2.0.2" 461 | 462 | abab@^2.0.3, abab@^2.0.5: 463 | version "2.0.5" 464 | resolved "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz" 465 | integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== 466 | 467 | acorn-globals@^6.0.0: 468 | version "6.0.0" 469 | resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" 470 | integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== 471 | dependencies: 472 | acorn "^7.1.1" 473 | acorn-walk "^7.1.1" 474 | 475 | acorn-node@^1.6.1: 476 | version "1.8.2" 477 | resolved "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz" 478 | integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== 479 | dependencies: 480 | acorn "^7.0.0" 481 | acorn-walk "^7.0.0" 482 | xtend "^4.0.2" 483 | 484 | acorn-walk@^7.0.0, acorn-walk@^7.1.1: 485 | version "7.2.0" 486 | resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" 487 | integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== 488 | 489 | acorn@^7.0.0, acorn@^7.1.1: 490 | version "7.4.1" 491 | resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" 492 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 493 | 494 | acorn@^8.5.0: 495 | version "8.7.0" 496 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz" 497 | integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== 498 | 499 | agent-base@6: 500 | version "6.0.2" 501 | resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" 502 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 503 | dependencies: 504 | debug "4" 505 | 506 | ansi-regex@^5.0.1: 507 | version "5.0.1" 508 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 509 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 510 | 511 | ansi-styles@^3.2.1: 512 | version "3.2.1" 513 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" 514 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 515 | dependencies: 516 | color-convert "^1.9.0" 517 | 518 | ansi-styles@^4.1.0: 519 | version "4.3.0" 520 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 521 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 522 | dependencies: 523 | color-convert "^2.0.1" 524 | 525 | ansi-styles@^5.0.0: 526 | version "5.2.0" 527 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" 528 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== 529 | 530 | anymatch@~3.1.2: 531 | version "3.1.2" 532 | resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" 533 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 534 | dependencies: 535 | normalize-path "^3.0.0" 536 | picomatch "^2.0.4" 537 | 538 | arg@^5.0.1: 539 | version "5.0.1" 540 | resolved "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz" 541 | integrity sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA== 542 | 543 | aria-query@^5.0.0: 544 | version "5.0.0" 545 | resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz" 546 | integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== 547 | 548 | assertion-error@^1.1.0: 549 | version "1.1.0" 550 | resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" 551 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 552 | 553 | asynckit@^0.4.0: 554 | version "0.4.0" 555 | resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" 556 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 557 | 558 | atob@^2.1.2: 559 | version "2.1.2" 560 | resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" 561 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== 562 | 563 | autoprefixer@^10.4.4: 564 | version "10.4.4" 565 | resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz" 566 | integrity sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA== 567 | dependencies: 568 | browserslist "^4.20.2" 569 | caniuse-lite "^1.0.30001317" 570 | fraction.js "^4.2.0" 571 | normalize-range "^0.1.2" 572 | picocolors "^1.0.0" 573 | postcss-value-parser "^4.2.0" 574 | 575 | binary-extensions@^2.0.0: 576 | version "2.2.0" 577 | resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" 578 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 579 | 580 | braces@^3.0.1, braces@~3.0.2: 581 | version "3.0.2" 582 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 583 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 584 | dependencies: 585 | fill-range "^7.0.1" 586 | 587 | browser-process-hrtime@^1.0.0: 588 | version "1.0.0" 589 | resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" 590 | integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== 591 | 592 | browserslist@^4.17.5, browserslist@^4.20.2: 593 | version "4.20.2" 594 | resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz" 595 | integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA== 596 | dependencies: 597 | caniuse-lite "^1.0.30001317" 598 | electron-to-chromium "^1.4.84" 599 | escalade "^3.1.1" 600 | node-releases "^2.0.2" 601 | picocolors "^1.0.0" 602 | 603 | callsites@^3.0.0: 604 | version "3.1.0" 605 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 606 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 607 | 608 | camelcase-css@^2.0.1: 609 | version "2.0.1" 610 | resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" 611 | integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== 612 | 613 | caniuse-lite@^1.0.30001317: 614 | version "1.0.30001319" 615 | resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001319.tgz" 616 | integrity sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw== 617 | 618 | chai@^4.3.6: 619 | version "4.3.6" 620 | resolved "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" 621 | integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== 622 | dependencies: 623 | assertion-error "^1.1.0" 624 | check-error "^1.0.2" 625 | deep-eql "^3.0.1" 626 | get-func-name "^2.0.0" 627 | loupe "^2.3.1" 628 | pathval "^1.1.1" 629 | type-detect "^4.0.5" 630 | 631 | chalk@^2.0.0: 632 | version "2.4.2" 633 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" 634 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 635 | dependencies: 636 | ansi-styles "^3.2.1" 637 | escape-string-regexp "^1.0.5" 638 | supports-color "^5.3.0" 639 | 640 | chalk@^3.0.0: 641 | version "3.0.0" 642 | resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" 643 | integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== 644 | dependencies: 645 | ansi-styles "^4.1.0" 646 | supports-color "^7.1.0" 647 | 648 | chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: 649 | version "4.1.2" 650 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 651 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 652 | dependencies: 653 | ansi-styles "^4.1.0" 654 | supports-color "^7.1.0" 655 | 656 | check-error@^1.0.2: 657 | version "1.0.2" 658 | resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" 659 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= 660 | 661 | chokidar@^3.5.3: 662 | version "3.5.3" 663 | resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" 664 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 665 | dependencies: 666 | anymatch "~3.1.2" 667 | braces "~3.0.2" 668 | glob-parent "~5.1.2" 669 | is-binary-path "~2.1.0" 670 | is-glob "~4.0.1" 671 | normalize-path "~3.0.0" 672 | readdirp "~3.6.0" 673 | optionalDependencies: 674 | fsevents "~2.3.2" 675 | 676 | color-convert@^1.9.0: 677 | version "1.9.3" 678 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" 679 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 680 | dependencies: 681 | color-name "1.1.3" 682 | 683 | color-convert@^2.0.1: 684 | version "2.0.1" 685 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 686 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 687 | dependencies: 688 | color-name "~1.1.4" 689 | 690 | color-name@1.1.3: 691 | version "1.1.3" 692 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" 693 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 694 | 695 | color-name@^1.1.4, color-name@~1.1.4: 696 | version "1.1.4" 697 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 698 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 699 | 700 | combined-stream@^1.0.8: 701 | version "1.0.8" 702 | resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" 703 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 704 | dependencies: 705 | delayed-stream "~1.0.0" 706 | 707 | convert-source-map@^1.7.0: 708 | version "1.8.0" 709 | resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" 710 | integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== 711 | dependencies: 712 | safe-buffer "~5.1.1" 713 | 714 | cosmiconfig@^7.0.1: 715 | version "7.0.1" 716 | resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" 717 | integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== 718 | dependencies: 719 | "@types/parse-json" "^4.0.0" 720 | import-fresh "^3.2.1" 721 | parse-json "^5.0.0" 722 | path-type "^4.0.0" 723 | yaml "^1.10.0" 724 | 725 | css.escape@^1.5.1: 726 | version "1.5.1" 727 | resolved "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz" 728 | integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= 729 | 730 | css@^3.0.0: 731 | version "3.0.0" 732 | resolved "https://registry.npmjs.org/css/-/css-3.0.0.tgz" 733 | integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== 734 | dependencies: 735 | inherits "^2.0.4" 736 | source-map "^0.6.1" 737 | source-map-resolve "^0.6.0" 738 | 739 | cssesc@^3.0.0: 740 | version "3.0.0" 741 | resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" 742 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 743 | 744 | cssom@^0.5.0: 745 | version "0.5.0" 746 | resolved "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz" 747 | integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== 748 | 749 | cssom@~0.3.6: 750 | version "0.3.8" 751 | resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" 752 | integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== 753 | 754 | cssstyle@^2.3.0: 755 | version "2.3.0" 756 | resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" 757 | integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== 758 | dependencies: 759 | cssom "~0.3.6" 760 | 761 | csstype@^3.0.2: 762 | version "3.0.11" 763 | resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz" 764 | integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== 765 | 766 | data-urls@^3.0.1: 767 | version "3.0.1" 768 | resolved "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz" 769 | integrity sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw== 770 | dependencies: 771 | abab "^2.0.3" 772 | whatwg-mimetype "^3.0.0" 773 | whatwg-url "^10.0.0" 774 | 775 | debug@4, debug@^4.1.0: 776 | version "4.3.4" 777 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 778 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 779 | dependencies: 780 | ms "2.1.2" 781 | 782 | decimal.js@^10.3.1: 783 | version "10.3.1" 784 | resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz" 785 | integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== 786 | 787 | decode-uri-component@^0.2.0: 788 | version "0.2.0" 789 | resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" 790 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= 791 | 792 | deep-eql@^3.0.1: 793 | version "3.0.1" 794 | resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" 795 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 796 | dependencies: 797 | type-detect "^4.0.0" 798 | 799 | deep-is@~0.1.3: 800 | version "0.1.4" 801 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" 802 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 803 | 804 | defined@^1.0.0: 805 | version "1.0.0" 806 | resolved "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" 807 | integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= 808 | 809 | delayed-stream@~1.0.0: 810 | version "1.0.0" 811 | resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" 812 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 813 | 814 | detective@^5.2.0: 815 | version "5.2.0" 816 | resolved "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz" 817 | integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== 818 | dependencies: 819 | acorn-node "^1.6.1" 820 | defined "^1.0.0" 821 | minimist "^1.1.1" 822 | 823 | didyoumean@^1.2.2: 824 | version "1.2.2" 825 | resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" 826 | integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== 827 | 828 | diff-sequences@^27.5.1: 829 | version "27.5.1" 830 | resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz" 831 | integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== 832 | 833 | dlv@^1.1.3: 834 | version "1.1.3" 835 | resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" 836 | integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== 837 | 838 | dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: 839 | version "0.5.13" 840 | resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.13.tgz" 841 | integrity sha512-R305kwb5CcMDIpSHUnLyIAp7SrSPBx6F0VfQFB3M75xVMHhXJJIdePYgbPPh1o57vCHNu5QztokWUPsLjWzFqw== 842 | 843 | domexception@^4.0.0: 844 | version "4.0.0" 845 | resolved "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz" 846 | integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== 847 | dependencies: 848 | webidl-conversions "^7.0.0" 849 | 850 | electron-to-chromium@^1.4.84: 851 | version "1.4.88" 852 | resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.88.tgz" 853 | integrity sha512-oA7mzccefkvTNi9u7DXmT0LqvhnOiN2BhSrKerta7HeUC1cLoIwtbf2wL+Ah2ozh5KQd3/1njrGrwDBXx6d14Q== 854 | 855 | error-ex@^1.3.1: 856 | version "1.3.2" 857 | resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" 858 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 859 | dependencies: 860 | is-arrayish "^0.2.1" 861 | 862 | esbuild-android-64@0.14.27: 863 | version "0.14.27" 864 | resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.27.tgz#b868bbd9955a92309c69df628d8dd1945478b45c" 865 | integrity sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ== 866 | 867 | esbuild-android-arm64@0.14.27: 868 | version "0.14.27" 869 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.27.tgz#e7d6430555e8e9c505fd87266bbc709f25f1825c" 870 | integrity sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ== 871 | 872 | esbuild-darwin-64@0.14.27: 873 | version "0.14.27" 874 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.27.tgz#4dc7484127564e89b4445c0a560a3cb50b3d68e1" 875 | integrity sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g== 876 | 877 | esbuild-darwin-arm64@0.14.27: 878 | version "0.14.27" 879 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.27.tgz#469e59c665f84a8ed323166624c5e7b9b2d22ac1" 880 | integrity sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ== 881 | 882 | esbuild-freebsd-64@0.14.27: 883 | version "0.14.27" 884 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.27.tgz#895df03bf5f87094a56c9a5815bf92e591903d70" 885 | integrity sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA== 886 | 887 | esbuild-freebsd-arm64@0.14.27: 888 | version "0.14.27" 889 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.27.tgz#0b72a41a6b8655e9a8c5608f2ec1afdcf6958441" 890 | integrity sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA== 891 | 892 | esbuild-linux-32@0.14.27: 893 | version "0.14.27" 894 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.27.tgz#43b8ba3803b0bbe7f051869c6a8bf6de1e95de28" 895 | integrity sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw== 896 | 897 | esbuild-linux-64@0.14.27: 898 | version "0.14.27" 899 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.27.tgz#dc8072097327ecfadba1735562824ce8c05dd0bd" 900 | integrity sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg== 901 | 902 | esbuild-linux-arm64@0.14.27: 903 | version "0.14.27" 904 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.27.tgz#c52b58cbe948426b1559910f521b0a3f396f10b8" 905 | integrity sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ== 906 | 907 | esbuild-linux-arm@0.14.27: 908 | version "0.14.27" 909 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.27.tgz#df869dbd67d4ee3a04b3c7273b6bd2b233e78a18" 910 | integrity sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw== 911 | 912 | esbuild-linux-mips64le@0.14.27: 913 | version "0.14.27" 914 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.27.tgz#a2b646d9df368b01aa970a7b8968be6dd6b01d19" 915 | integrity sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A== 916 | 917 | esbuild-linux-ppc64le@0.14.27: 918 | version "0.14.27" 919 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.27.tgz#9a21af766a0292578a3009c7408b8509cac7cefd" 920 | integrity sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA== 921 | 922 | esbuild-linux-riscv64@0.14.27: 923 | version "0.14.27" 924 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.27.tgz#344a27f91568056a5903ad5841b447e00e78d740" 925 | integrity sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg== 926 | 927 | esbuild-linux-s390x@0.14.27: 928 | version "0.14.27" 929 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.27.tgz#73a7309bd648a07ef58f069658f989a5096130db" 930 | integrity sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg== 931 | 932 | esbuild-netbsd-64@0.14.27: 933 | version "0.14.27" 934 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.27.tgz#482a587cdbd18a6c264a05136596927deb46c30a" 935 | integrity sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q== 936 | 937 | esbuild-openbsd-64@0.14.27: 938 | version "0.14.27" 939 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.27.tgz#e99f8cdc63f1628747b63edd124d53cf7796468d" 940 | integrity sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw== 941 | 942 | esbuild-sunos-64@0.14.27: 943 | version "0.14.27" 944 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.27.tgz#8611d825bcb8239c78d57452e83253a71942f45c" 945 | integrity sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg== 946 | 947 | esbuild-windows-32@0.14.27: 948 | version "0.14.27" 949 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.27.tgz#c06374206d4d92dd31d4fda299b09f51a35e82f6" 950 | integrity sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw== 951 | 952 | esbuild-windows-64@0.14.27: 953 | version "0.14.27" 954 | resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.27.tgz" 955 | integrity sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg== 956 | 957 | esbuild-windows-arm64@0.14.27: 958 | version "0.14.27" 959 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.27.tgz#ad7e187193dcd18768b16065a950f4441d7173f4" 960 | integrity sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg== 961 | 962 | esbuild@^0.14.14: 963 | version "0.14.27" 964 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.27.tgz" 965 | integrity sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q== 966 | optionalDependencies: 967 | esbuild-android-64 "0.14.27" 968 | esbuild-android-arm64 "0.14.27" 969 | esbuild-darwin-64 "0.14.27" 970 | esbuild-darwin-arm64 "0.14.27" 971 | esbuild-freebsd-64 "0.14.27" 972 | esbuild-freebsd-arm64 "0.14.27" 973 | esbuild-linux-32 "0.14.27" 974 | esbuild-linux-64 "0.14.27" 975 | esbuild-linux-arm "0.14.27" 976 | esbuild-linux-arm64 "0.14.27" 977 | esbuild-linux-mips64le "0.14.27" 978 | esbuild-linux-ppc64le "0.14.27" 979 | esbuild-linux-riscv64 "0.14.27" 980 | esbuild-linux-s390x "0.14.27" 981 | esbuild-netbsd-64 "0.14.27" 982 | esbuild-openbsd-64 "0.14.27" 983 | esbuild-sunos-64 "0.14.27" 984 | esbuild-windows-32 "0.14.27" 985 | esbuild-windows-64 "0.14.27" 986 | esbuild-windows-arm64 "0.14.27" 987 | 988 | escalade@^3.1.1: 989 | version "3.1.1" 990 | resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" 991 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 992 | 993 | escape-string-regexp@^1.0.5: 994 | version "1.0.5" 995 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 996 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 997 | 998 | escodegen@^2.0.0: 999 | version "2.0.0" 1000 | resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" 1001 | integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== 1002 | dependencies: 1003 | esprima "^4.0.1" 1004 | estraverse "^5.2.0" 1005 | esutils "^2.0.2" 1006 | optionator "^0.8.1" 1007 | optionalDependencies: 1008 | source-map "~0.6.1" 1009 | 1010 | esprima@^4.0.1: 1011 | version "4.0.1" 1012 | resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" 1013 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1014 | 1015 | estraverse@^5.2.0: 1016 | version "5.3.0" 1017 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 1018 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 1019 | 1020 | estree-walker@^2.0.1: 1021 | version "2.0.2" 1022 | resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" 1023 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 1024 | 1025 | esutils@^2.0.2: 1026 | version "2.0.3" 1027 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 1028 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1029 | 1030 | fast-glob@^3.2.11: 1031 | version "3.2.11" 1032 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" 1033 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== 1034 | dependencies: 1035 | "@nodelib/fs.stat" "^2.0.2" 1036 | "@nodelib/fs.walk" "^1.2.3" 1037 | glob-parent "^5.1.2" 1038 | merge2 "^1.3.0" 1039 | micromatch "^4.0.4" 1040 | 1041 | fast-levenshtein@~2.0.6: 1042 | version "2.0.6" 1043 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 1044 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 1045 | 1046 | fastq@^1.6.0: 1047 | version "1.13.0" 1048 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" 1049 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 1050 | dependencies: 1051 | reusify "^1.0.4" 1052 | 1053 | fill-range@^7.0.1: 1054 | version "7.0.1" 1055 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 1056 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1057 | dependencies: 1058 | to-regex-range "^5.0.1" 1059 | 1060 | form-data@^4.0.0: 1061 | version "4.0.0" 1062 | resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" 1063 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 1064 | dependencies: 1065 | asynckit "^0.4.0" 1066 | combined-stream "^1.0.8" 1067 | mime-types "^2.1.12" 1068 | 1069 | fraction.js@^4.2.0: 1070 | version "4.2.0" 1071 | resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" 1072 | integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== 1073 | 1074 | fsevents@~2.3.2: 1075 | version "2.3.2" 1076 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1077 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1078 | 1079 | function-bind@^1.1.1: 1080 | version "1.1.1" 1081 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 1082 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1083 | 1084 | gensync@^1.0.0-beta.2: 1085 | version "1.0.0-beta.2" 1086 | resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" 1087 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1088 | 1089 | get-func-name@^2.0.0: 1090 | version "2.0.0" 1091 | resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" 1092 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= 1093 | 1094 | glob-parent@^5.1.2, glob-parent@~5.1.2: 1095 | version "5.1.2" 1096 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 1097 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1098 | dependencies: 1099 | is-glob "^4.0.1" 1100 | 1101 | glob-parent@^6.0.2: 1102 | version "6.0.2" 1103 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" 1104 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1105 | dependencies: 1106 | is-glob "^4.0.3" 1107 | 1108 | globals@^11.1.0: 1109 | version "11.12.0" 1110 | resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" 1111 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1112 | 1113 | has-flag@^3.0.0: 1114 | version "3.0.0" 1115 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" 1116 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1117 | 1118 | has-flag@^4.0.0: 1119 | version "4.0.0" 1120 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 1121 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1122 | 1123 | has@^1.0.3: 1124 | version "1.0.3" 1125 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 1126 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1127 | dependencies: 1128 | function-bind "^1.1.1" 1129 | 1130 | html-encoding-sniffer@^3.0.0: 1131 | version "3.0.0" 1132 | resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz" 1133 | integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== 1134 | dependencies: 1135 | whatwg-encoding "^2.0.0" 1136 | 1137 | http-proxy-agent@^5.0.0: 1138 | version "5.0.0" 1139 | resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" 1140 | integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== 1141 | dependencies: 1142 | "@tootallnate/once" "2" 1143 | agent-base "6" 1144 | debug "4" 1145 | 1146 | https-proxy-agent@^5.0.0: 1147 | version "5.0.0" 1148 | resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" 1149 | integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== 1150 | dependencies: 1151 | agent-base "6" 1152 | debug "4" 1153 | 1154 | iconv-lite@0.6.3: 1155 | version "0.6.3" 1156 | resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" 1157 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== 1158 | dependencies: 1159 | safer-buffer ">= 2.1.2 < 3.0.0" 1160 | 1161 | import-fresh@^3.2.1: 1162 | version "3.3.0" 1163 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 1164 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1165 | dependencies: 1166 | parent-module "^1.0.0" 1167 | resolve-from "^4.0.0" 1168 | 1169 | indent-string@^4.0.0: 1170 | version "4.0.0" 1171 | resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" 1172 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 1173 | 1174 | inherits@^2.0.4: 1175 | version "2.0.4" 1176 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 1177 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1178 | 1179 | is-arrayish@^0.2.1: 1180 | version "0.2.1" 1181 | resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" 1182 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1183 | 1184 | is-binary-path@~2.1.0: 1185 | version "2.1.0" 1186 | resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" 1187 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1188 | dependencies: 1189 | binary-extensions "^2.0.0" 1190 | 1191 | is-core-module@^2.8.1: 1192 | version "2.8.1" 1193 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz" 1194 | integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== 1195 | dependencies: 1196 | has "^1.0.3" 1197 | 1198 | is-extglob@^2.1.1: 1199 | version "2.1.1" 1200 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 1201 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1202 | 1203 | is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 1204 | version "4.0.3" 1205 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 1206 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1207 | dependencies: 1208 | is-extglob "^2.1.1" 1209 | 1210 | is-number@^7.0.0: 1211 | version "7.0.0" 1212 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 1213 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1214 | 1215 | is-potential-custom-element-name@^1.0.1: 1216 | version "1.0.1" 1217 | resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" 1218 | integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== 1219 | 1220 | jest-diff@^27.5.1: 1221 | version "27.5.1" 1222 | resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz" 1223 | integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== 1224 | dependencies: 1225 | chalk "^4.0.0" 1226 | diff-sequences "^27.5.1" 1227 | jest-get-type "^27.5.1" 1228 | pretty-format "^27.5.1" 1229 | 1230 | jest-get-type@^27.5.1: 1231 | version "27.5.1" 1232 | resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz" 1233 | integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== 1234 | 1235 | jest-matcher-utils@^27.0.0: 1236 | version "27.5.1" 1237 | resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz" 1238 | integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== 1239 | dependencies: 1240 | chalk "^4.0.0" 1241 | jest-diff "^27.5.1" 1242 | jest-get-type "^27.5.1" 1243 | pretty-format "^27.5.1" 1244 | 1245 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1246 | version "4.0.0" 1247 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" 1248 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1249 | 1250 | jsdom@^19.0.0: 1251 | version "19.0.0" 1252 | resolved "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz" 1253 | integrity sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A== 1254 | dependencies: 1255 | abab "^2.0.5" 1256 | acorn "^8.5.0" 1257 | acorn-globals "^6.0.0" 1258 | cssom "^0.5.0" 1259 | cssstyle "^2.3.0" 1260 | data-urls "^3.0.1" 1261 | decimal.js "^10.3.1" 1262 | domexception "^4.0.0" 1263 | escodegen "^2.0.0" 1264 | form-data "^4.0.0" 1265 | html-encoding-sniffer "^3.0.0" 1266 | http-proxy-agent "^5.0.0" 1267 | https-proxy-agent "^5.0.0" 1268 | is-potential-custom-element-name "^1.0.1" 1269 | nwsapi "^2.2.0" 1270 | parse5 "6.0.1" 1271 | saxes "^5.0.1" 1272 | symbol-tree "^3.2.4" 1273 | tough-cookie "^4.0.0" 1274 | w3c-hr-time "^1.0.2" 1275 | w3c-xmlserializer "^3.0.0" 1276 | webidl-conversions "^7.0.0" 1277 | whatwg-encoding "^2.0.0" 1278 | whatwg-mimetype "^3.0.0" 1279 | whatwg-url "^10.0.0" 1280 | ws "^8.2.3" 1281 | xml-name-validator "^4.0.0" 1282 | 1283 | jsesc@^2.5.1: 1284 | version "2.5.2" 1285 | resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" 1286 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1287 | 1288 | json-parse-even-better-errors@^2.3.0: 1289 | version "2.3.1" 1290 | resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" 1291 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1292 | 1293 | json5@^2.1.2: 1294 | version "2.2.0" 1295 | resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" 1296 | integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== 1297 | dependencies: 1298 | minimist "^1.2.5" 1299 | 1300 | levn@~0.3.0: 1301 | version "0.3.0" 1302 | resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" 1303 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1304 | dependencies: 1305 | prelude-ls "~1.1.2" 1306 | type-check "~0.3.2" 1307 | 1308 | lilconfig@^2.0.4: 1309 | version "2.0.4" 1310 | resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz" 1311 | integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== 1312 | 1313 | lines-and-columns@^1.1.6: 1314 | version "1.2.4" 1315 | resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" 1316 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 1317 | 1318 | local-pkg@^0.4.1: 1319 | version "0.4.1" 1320 | resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.1.tgz" 1321 | integrity sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw== 1322 | 1323 | lodash@^4.17.15: 1324 | version "4.17.21" 1325 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 1326 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1327 | 1328 | loose-envify@^1.1.0: 1329 | version "1.4.0" 1330 | resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" 1331 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1332 | dependencies: 1333 | js-tokens "^3.0.0 || ^4.0.0" 1334 | 1335 | loupe@^2.3.1: 1336 | version "2.3.4" 1337 | resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" 1338 | integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== 1339 | dependencies: 1340 | get-func-name "^2.0.0" 1341 | 1342 | lz-string@^1.4.4: 1343 | version "1.4.4" 1344 | resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz" 1345 | integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= 1346 | 1347 | merge2@^1.3.0: 1348 | version "1.4.1" 1349 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 1350 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1351 | 1352 | micromatch@^4.0.4: 1353 | version "4.0.4" 1354 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" 1355 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 1356 | dependencies: 1357 | braces "^3.0.1" 1358 | picomatch "^2.2.3" 1359 | 1360 | mime-db@1.52.0: 1361 | version "1.52.0" 1362 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" 1363 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1364 | 1365 | mime-types@^2.1.12: 1366 | version "2.1.35" 1367 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" 1368 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1369 | dependencies: 1370 | mime-db "1.52.0" 1371 | 1372 | min-indent@^1.0.0: 1373 | version "1.0.1" 1374 | resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" 1375 | integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== 1376 | 1377 | minimist@^1.1.1, minimist@^1.2.5: 1378 | version "1.2.5" 1379 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" 1380 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1381 | 1382 | mrmime@^1.0.0: 1383 | version "1.0.0" 1384 | resolved "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz" 1385 | integrity sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ== 1386 | 1387 | ms@2.1.2: 1388 | version "2.1.2" 1389 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 1390 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1391 | 1392 | nanoid@^3.3.1: 1393 | version "3.3.1" 1394 | resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" 1395 | integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== 1396 | 1397 | node-releases@^2.0.2: 1398 | version "2.0.2" 1399 | resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz" 1400 | integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== 1401 | 1402 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1403 | version "3.0.0" 1404 | resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" 1405 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1406 | 1407 | normalize-range@^0.1.2: 1408 | version "0.1.2" 1409 | resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" 1410 | integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= 1411 | 1412 | nwsapi@^2.2.0: 1413 | version "2.2.0" 1414 | resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz" 1415 | integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== 1416 | 1417 | object-hash@^2.2.0: 1418 | version "2.2.0" 1419 | resolved "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz" 1420 | integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== 1421 | 1422 | optionator@^0.8.1: 1423 | version "0.8.3" 1424 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" 1425 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 1426 | dependencies: 1427 | deep-is "~0.1.3" 1428 | fast-levenshtein "~2.0.6" 1429 | levn "~0.3.0" 1430 | prelude-ls "~1.1.2" 1431 | type-check "~0.3.2" 1432 | word-wrap "~1.2.3" 1433 | 1434 | parent-module@^1.0.0: 1435 | version "1.0.1" 1436 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 1437 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1438 | dependencies: 1439 | callsites "^3.0.0" 1440 | 1441 | parse-json@^5.0.0: 1442 | version "5.2.0" 1443 | resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" 1444 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 1445 | dependencies: 1446 | "@babel/code-frame" "^7.0.0" 1447 | error-ex "^1.3.1" 1448 | json-parse-even-better-errors "^2.3.0" 1449 | lines-and-columns "^1.1.6" 1450 | 1451 | parse5@6.0.1: 1452 | version "6.0.1" 1453 | resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" 1454 | integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== 1455 | 1456 | path-parse@^1.0.7: 1457 | version "1.0.7" 1458 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" 1459 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1460 | 1461 | path-type@^4.0.0: 1462 | version "4.0.0" 1463 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" 1464 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1465 | 1466 | pathval@^1.1.1: 1467 | version "1.1.1" 1468 | resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" 1469 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 1470 | 1471 | picocolors@^1.0.0: 1472 | version "1.0.0" 1473 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" 1474 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1475 | 1476 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: 1477 | version "2.3.1" 1478 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 1479 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1480 | 1481 | postcss-js@^4.0.0: 1482 | version "4.0.0" 1483 | resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz" 1484 | integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== 1485 | dependencies: 1486 | camelcase-css "^2.0.1" 1487 | 1488 | postcss-load-config@^3.1.0: 1489 | version "3.1.3" 1490 | resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.3.tgz" 1491 | integrity sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw== 1492 | dependencies: 1493 | lilconfig "^2.0.4" 1494 | yaml "^1.10.2" 1495 | 1496 | postcss-nested@5.0.6: 1497 | version "5.0.6" 1498 | resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz" 1499 | integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA== 1500 | dependencies: 1501 | postcss-selector-parser "^6.0.6" 1502 | 1503 | postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9: 1504 | version "6.0.9" 1505 | resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz" 1506 | integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== 1507 | dependencies: 1508 | cssesc "^3.0.0" 1509 | util-deprecate "^1.0.2" 1510 | 1511 | postcss-value-parser@^4.2.0: 1512 | version "4.2.0" 1513 | resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" 1514 | integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== 1515 | 1516 | postcss@^8.4.12, postcss@^8.4.6: 1517 | version "8.4.12" 1518 | resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz" 1519 | integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg== 1520 | dependencies: 1521 | nanoid "^3.3.1" 1522 | picocolors "^1.0.0" 1523 | source-map-js "^1.0.2" 1524 | 1525 | prelude-ls@~1.1.2: 1526 | version "1.1.2" 1527 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" 1528 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1529 | 1530 | pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: 1531 | version "27.5.1" 1532 | resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" 1533 | integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== 1534 | dependencies: 1535 | ansi-regex "^5.0.1" 1536 | ansi-styles "^5.0.0" 1537 | react-is "^17.0.1" 1538 | 1539 | psl@^1.1.33: 1540 | version "1.8.0" 1541 | resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" 1542 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 1543 | 1544 | punycode@^2.1.1: 1545 | version "2.1.1" 1546 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" 1547 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1548 | 1549 | queue-microtask@^1.2.2: 1550 | version "1.2.3" 1551 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 1552 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1553 | 1554 | quick-lru@^5.1.1: 1555 | version "5.1.1" 1556 | resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" 1557 | integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== 1558 | 1559 | react-dom@18: 1560 | version "18.0.0" 1561 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.0.0.tgz#26b88534f8f1dbb80853e1eabe752f24100d8023" 1562 | integrity sha512-XqX7uzmFo0pUceWFCt7Gff6IyIMzFUn7QMZrbrQfGxtaxXZIcGQzoNpRLE3fQLnS4XzLLPMZX2T9TRcSrasicw== 1563 | dependencies: 1564 | loose-envify "^1.1.0" 1565 | scheduler "^0.21.0" 1566 | 1567 | react-error-boundary@^3.1.0: 1568 | version "3.1.4" 1569 | resolved "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz" 1570 | integrity sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA== 1571 | dependencies: 1572 | "@babel/runtime" "^7.12.5" 1573 | 1574 | react-icons@^4.3.1: 1575 | version "4.3.1" 1576 | resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.3.1.tgz#2fa92aebbbc71f43d2db2ed1aed07361124e91ca" 1577 | integrity sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ== 1578 | 1579 | react-is@^17.0.1: 1580 | version "17.0.2" 1581 | resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" 1582 | integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== 1583 | 1584 | react-refresh@^0.11.0: 1585 | version "0.11.0" 1586 | resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz" 1587 | integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== 1588 | 1589 | react@18: 1590 | version "18.0.0" 1591 | resolved "https://registry.yarnpkg.com/react/-/react-18.0.0.tgz#b468736d1f4a5891f38585ba8e8fb29f91c3cb96" 1592 | integrity sha512-x+VL6wbT4JRVPm7EGxXhZ8w8LTROaxPXOqhlGyVSrv0sB1jkyFGgXxJ8LVoPRLvPR6/CIZGFmfzqUa2NYeMr2A== 1593 | dependencies: 1594 | loose-envify "^1.1.0" 1595 | 1596 | readdirp@~3.6.0: 1597 | version "3.6.0" 1598 | resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" 1599 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1600 | dependencies: 1601 | picomatch "^2.2.1" 1602 | 1603 | redent@^3.0.0: 1604 | version "3.0.0" 1605 | resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" 1606 | integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== 1607 | dependencies: 1608 | indent-string "^4.0.0" 1609 | strip-indent "^3.0.0" 1610 | 1611 | regenerator-runtime@^0.13.4: 1612 | version "0.13.9" 1613 | resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" 1614 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== 1615 | 1616 | resolve-from@^4.0.0: 1617 | version "4.0.0" 1618 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 1619 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1620 | 1621 | resolve@^1.22.0: 1622 | version "1.22.0" 1623 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz" 1624 | integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== 1625 | dependencies: 1626 | is-core-module "^2.8.1" 1627 | path-parse "^1.0.7" 1628 | supports-preserve-symlinks-flag "^1.0.0" 1629 | 1630 | reusify@^1.0.4: 1631 | version "1.0.4" 1632 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 1633 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1634 | 1635 | rollup@^2.59.0: 1636 | version "2.70.1" 1637 | resolved "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz" 1638 | integrity sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA== 1639 | optionalDependencies: 1640 | fsevents "~2.3.2" 1641 | 1642 | run-parallel@^1.1.9: 1643 | version "1.2.0" 1644 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 1645 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1646 | dependencies: 1647 | queue-microtask "^1.2.2" 1648 | 1649 | safe-buffer@~5.1.1: 1650 | version "5.1.2" 1651 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" 1652 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1653 | 1654 | "safer-buffer@>= 2.1.2 < 3.0.0": 1655 | version "2.1.2" 1656 | resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" 1657 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1658 | 1659 | saxes@^5.0.1: 1660 | version "5.0.1" 1661 | resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" 1662 | integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== 1663 | dependencies: 1664 | xmlchars "^2.2.0" 1665 | 1666 | scheduler@^0.21.0: 1667 | version "0.21.0" 1668 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.21.0.tgz#6fd2532ff5a6d877b6edb12f00d8ab7e8f308820" 1669 | integrity sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ== 1670 | dependencies: 1671 | loose-envify "^1.1.0" 1672 | 1673 | semver@^6.3.0: 1674 | version "6.3.0" 1675 | resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" 1676 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1677 | 1678 | sirv@^2.0.2: 1679 | version "2.0.2" 1680 | resolved "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz" 1681 | integrity sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w== 1682 | dependencies: 1683 | "@polka/url" "^1.0.0-next.20" 1684 | mrmime "^1.0.0" 1685 | totalist "^3.0.0" 1686 | 1687 | source-map-js@^1.0.2: 1688 | version "1.0.2" 1689 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" 1690 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 1691 | 1692 | source-map-resolve@^0.6.0: 1693 | version "0.6.0" 1694 | resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz" 1695 | integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== 1696 | dependencies: 1697 | atob "^2.1.2" 1698 | decode-uri-component "^0.2.0" 1699 | 1700 | source-map@^0.5.0: 1701 | version "0.5.7" 1702 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" 1703 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1704 | 1705 | source-map@^0.6.1, source-map@~0.6.1: 1706 | version "0.6.1" 1707 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" 1708 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1709 | 1710 | strip-indent@^3.0.0: 1711 | version "3.0.0" 1712 | resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" 1713 | integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== 1714 | dependencies: 1715 | min-indent "^1.0.0" 1716 | 1717 | supports-color@^5.3.0: 1718 | version "5.5.0" 1719 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" 1720 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1721 | dependencies: 1722 | has-flag "^3.0.0" 1723 | 1724 | supports-color@^7.1.0: 1725 | version "7.2.0" 1726 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1727 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1728 | dependencies: 1729 | has-flag "^4.0.0" 1730 | 1731 | supports-preserve-symlinks-flag@^1.0.0: 1732 | version "1.0.0" 1733 | resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" 1734 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1735 | 1736 | symbol-tree@^3.2.4: 1737 | version "3.2.4" 1738 | resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" 1739 | integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== 1740 | 1741 | tailwindcss@^3.0.23: 1742 | version "3.0.23" 1743 | resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.23.tgz" 1744 | integrity sha512-+OZOV9ubyQ6oI2BXEhzw4HrqvgcARY38xv3zKcjnWtMIZstEsXdI9xftd1iB7+RbOnj2HOEzkA0OyB5BaSxPQA== 1745 | dependencies: 1746 | arg "^5.0.1" 1747 | chalk "^4.1.2" 1748 | chokidar "^3.5.3" 1749 | color-name "^1.1.4" 1750 | cosmiconfig "^7.0.1" 1751 | detective "^5.2.0" 1752 | didyoumean "^1.2.2" 1753 | dlv "^1.1.3" 1754 | fast-glob "^3.2.11" 1755 | glob-parent "^6.0.2" 1756 | is-glob "^4.0.3" 1757 | normalize-path "^3.0.0" 1758 | object-hash "^2.2.0" 1759 | postcss "^8.4.6" 1760 | postcss-js "^4.0.0" 1761 | postcss-load-config "^3.1.0" 1762 | postcss-nested "5.0.6" 1763 | postcss-selector-parser "^6.0.9" 1764 | postcss-value-parser "^4.2.0" 1765 | quick-lru "^5.1.1" 1766 | resolve "^1.22.0" 1767 | 1768 | tinypool@^0.1.2: 1769 | version "0.1.2" 1770 | resolved "https://registry.npmjs.org/tinypool/-/tinypool-0.1.2.tgz" 1771 | integrity sha512-fvtYGXoui2RpeMILfkvGIgOVkzJEGediv8UJt7TxdAOY8pnvUkFg/fkvqTfXG9Acc9S17Cnn1S4osDc2164guA== 1772 | 1773 | tinyspy@^0.3.0: 1774 | version "0.3.0" 1775 | resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-0.3.0.tgz" 1776 | integrity sha512-c5uFHqtUp74R2DJE3/Efg0mH5xicmgziaQXMm/LvuuZn3RdpADH32aEGDRyCzObXT1DNfwDMqRQ/Drh1MlO12g== 1777 | 1778 | to-fast-properties@^2.0.0: 1779 | version "2.0.0" 1780 | resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" 1781 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 1782 | 1783 | to-regex-range@^5.0.1: 1784 | version "5.0.1" 1785 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1786 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1787 | dependencies: 1788 | is-number "^7.0.0" 1789 | 1790 | totalist@^3.0.0: 1791 | version "3.0.0" 1792 | resolved "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz" 1793 | integrity sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw== 1794 | 1795 | tough-cookie@^4.0.0: 1796 | version "4.0.0" 1797 | resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz" 1798 | integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== 1799 | dependencies: 1800 | psl "^1.1.33" 1801 | punycode "^2.1.1" 1802 | universalify "^0.1.2" 1803 | 1804 | tr46@^3.0.0: 1805 | version "3.0.0" 1806 | resolved "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz" 1807 | integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== 1808 | dependencies: 1809 | punycode "^2.1.1" 1810 | 1811 | type-check@~0.3.2: 1812 | version "0.3.2" 1813 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" 1814 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 1815 | dependencies: 1816 | prelude-ls "~1.1.2" 1817 | 1818 | type-detect@^4.0.0, type-detect@^4.0.5: 1819 | version "4.0.8" 1820 | resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" 1821 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 1822 | 1823 | typescript@^4.5.4: 1824 | version "4.6.2" 1825 | resolved "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz" 1826 | integrity sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg== 1827 | 1828 | universalify@^0.1.2: 1829 | version "0.1.2" 1830 | resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" 1831 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 1832 | 1833 | util-deprecate@^1.0.2: 1834 | version "1.0.2" 1835 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 1836 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1837 | 1838 | vite@^2.7.10, vite@^2.8.0: 1839 | version "2.8.6" 1840 | resolved "https://registry.npmjs.org/vite/-/vite-2.8.6.tgz" 1841 | integrity sha512-e4H0QpludOVKkmOsRyqQ7LTcMUDF3mcgyNU4lmi0B5JUbe0ZxeBBl8VoZ8Y6Rfn9eFKYtdXNPcYK97ZwH+K2ug== 1842 | dependencies: 1843 | esbuild "^0.14.14" 1844 | postcss "^8.4.6" 1845 | resolve "^1.22.0" 1846 | rollup "^2.59.0" 1847 | optionalDependencies: 1848 | fsevents "~2.3.2" 1849 | 1850 | vitest@^0.7.4: 1851 | version "0.7.4" 1852 | resolved "https://registry.npmjs.org/vitest/-/vitest-0.7.4.tgz" 1853 | integrity sha512-6kyJ/YZJFVj/zEVVHFyvLvAZlbg05yAyJrk7oP+FOCFanGRYK7bBEz4qsIpNHxX+dlf5vRkbBDjpdXzGL7udeA== 1854 | dependencies: 1855 | "@types/chai" "^4.3.0" 1856 | "@types/chai-subset" "^1.3.3" 1857 | chai "^4.3.6" 1858 | local-pkg "^0.4.1" 1859 | tinypool "^0.1.2" 1860 | tinyspy "^0.3.0" 1861 | vite "^2.7.10" 1862 | 1863 | w3c-hr-time@^1.0.2: 1864 | version "1.0.2" 1865 | resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" 1866 | integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== 1867 | dependencies: 1868 | browser-process-hrtime "^1.0.0" 1869 | 1870 | w3c-xmlserializer@^3.0.0: 1871 | version "3.0.0" 1872 | resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz" 1873 | integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg== 1874 | dependencies: 1875 | xml-name-validator "^4.0.0" 1876 | 1877 | webidl-conversions@^7.0.0: 1878 | version "7.0.0" 1879 | resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" 1880 | integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== 1881 | 1882 | whatwg-encoding@^2.0.0: 1883 | version "2.0.0" 1884 | resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz" 1885 | integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== 1886 | dependencies: 1887 | iconv-lite "0.6.3" 1888 | 1889 | whatwg-mimetype@^3.0.0: 1890 | version "3.0.0" 1891 | resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz" 1892 | integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== 1893 | 1894 | whatwg-url@^10.0.0: 1895 | version "10.0.0" 1896 | resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz" 1897 | integrity sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w== 1898 | dependencies: 1899 | tr46 "^3.0.0" 1900 | webidl-conversions "^7.0.0" 1901 | 1902 | word-wrap@~1.2.3: 1903 | version "1.2.3" 1904 | resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" 1905 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1906 | 1907 | ws@^8.2.3: 1908 | version "8.5.0" 1909 | resolved "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz" 1910 | integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== 1911 | 1912 | xml-name-validator@^4.0.0: 1913 | version "4.0.0" 1914 | resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" 1915 | integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== 1916 | 1917 | xmlchars@^2.2.0: 1918 | version "2.2.0" 1919 | resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" 1920 | integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== 1921 | 1922 | xtend@^4.0.2: 1923 | version "4.0.2" 1924 | resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" 1925 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 1926 | 1927 | yaml@^1.10.0, yaml@^1.10.2: 1928 | version "1.10.2" 1929 | resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" 1930 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 1931 | 1932 | zustand@^3.7.1: 1933 | version "3.7.1" 1934 | resolved "https://registry.npmjs.org/zustand/-/zustand-3.7.1.tgz" 1935 | integrity sha512-wHBCZlKj+bg03/hP+Tzv24YhnqqP8MCeN9ECPDXoF01062SIbnfl3j9O0znkDw1lNTY0a8WN3F///a0UhhaEqg== 1936 | --------------------------------------------------------------------------------