├── .gitignore ├── README.md ├── index.html ├── package.json ├── public ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── logo192.png ├── logo512.png ├── manifest.json ├── mstile-150x150.png ├── robots.txt └── site.webmanifest ├── src ├── App.css ├── App.jsx ├── Icons │ └── GithubIcon.jsx ├── SortingVisualizer │ ├── SortingVisualizer.css │ ├── Visualizer.jsx │ └── colorCodes.js ├── algorithms │ ├── bubblesort.js │ ├── heapsort.js │ ├── insertion.js │ ├── mergesort.js │ ├── quicksort.js │ ├── selectionsort.js │ └── swap.js ├── index.css └── index.jsx ├── vite.config.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | *.log 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sorting Algorithm visualizer 🔥 2 | 3 | [![Netlify Status](https://api.netlify.com/api/v1/badges/7a70ca44-0cda-4189-bc0a-e7a13a4d7fbf/deploy-status)](https://app.netlify.com/sites/sortingvisualizerx/deploys) 4 |
5 |
6 | A tool to visualize sorting algorithms built using **ReactJS**
7 | Website is live [here](https://sortingvisualizerx.netlify.app/) 8 | 9 | ## Features 10 | :white_check_mark: Control Visualization Speed

11 | :white_check_mark: Change array size

12 | :white_check_mark: Randomize Input

13 | :white_check_mark: Choose various sorting algorithms

14 | 15 | ## Algorithms to Visualize 16 | :white_check_mark: Bubble Sort

17 | :white_check_mark: Insertion Sort

18 | :white_check_mark: Selection Sort

19 | :white_check_mark: Quick Sort

20 | :white_check_mark: Merge Sort

21 | :white_check_mark: Heap Sort

22 | 23 | ## Set it up locally 🚀 24 | - clone the repo
25 | `git https://github.com/ashirbad29/Sorting-Algorithm-Visualizer.git` 26 |
27 | 28 | - Navigate to that folder
29 | `cd Sorting-Algorithm-Visualizer` 30 |
31 | 32 | - install required dependencies
33 | `npm install` 34 |
35 | 36 | - start the project locally
37 | `npm start` 38 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | 15 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 35 | 39 | 40 | 41 | 45 | Sorting Visualizer 46 | 47 | 48 | 49 |
50 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sorting-algorithm-visualizer", 3 | "version": "0.1.0", 4 | "dependencies": { 5 | "react": "^16.13.1", 6 | "react-dom": "^16.13.1" 7 | }, 8 | "scripts": { 9 | "dev": "vite", 10 | "build": "vite build", 11 | "serve": "vite preview" 12 | }, 13 | "eslintConfig": { 14 | "extends": "react-app" 15 | }, 16 | "devDependencies": { 17 | "@vitejs/plugin-react-refresh": "^1.3.6", 18 | "vite": "^2.6.14", 19 | "vite-plugin-svgr": "^0.5.1" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashirbad29/Sorting-Algorithm-Visualizer/4daa21da3fd8d38af2ae579ad59200443176d799/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashirbad29/Sorting-Algorithm-Visualizer/4daa21da3fd8d38af2ae579ad59200443176d799/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashirbad29/Sorting-Algorithm-Visualizer/4daa21da3fd8d38af2ae579ad59200443176d799/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #00587A 7 | 8 | 9 | -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashirbad29/Sorting-Algorithm-Visualizer/4daa21da3fd8d38af2ae579ad59200443176d799/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashirbad29/Sorting-Algorithm-Visualizer/4daa21da3fd8d38af2ae579ad59200443176d799/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashirbad29/Sorting-Algorithm-Visualizer/4daa21da3fd8d38af2ae579ad59200443176d799/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashirbad29/Sorting-Algorithm-Visualizer/4daa21da3fd8d38af2ae579ad59200443176d799/public/logo512.png -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /public/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ashirbad29/Sorting-Algorithm-Visualizer/4daa21da3fd8d38af2ae579ad59200443176d799/public/mstile-150x150.png -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /public/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sorting visualizer", 3 | "short_name": "sorting visualizer", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#00587A", 17 | "background_color": "#00587A", 18 | "display": "standalone" 19 | } -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | *, 2 | html { 3 | margin: 0; 4 | padding: 0; 5 | background-color: #f7fbef; 6 | font-family: 'Roboto', sans-serif; 7 | } 8 | -------------------------------------------------------------------------------- /src/App.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './App.css'; 3 | import Visualizer from './SortingVisualizer/Visualizer'; 4 | 5 | function App() { 6 | return ( 7 | <> 8 | 9 | 10 | ); 11 | } 12 | 13 | export default App; 14 | -------------------------------------------------------------------------------- /src/Icons/GithubIcon.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import '../SortingVisualizer/SortingVisualizer.css'; 3 | function GithubIcon({ className }) { 4 | return ( 5 | { 7 | console.log('heloo'); 8 | window 9 | .open( 10 | 'https://github.com/ashirbad29/Sorting-Algorithm-Visualizer', 11 | '_blank' 12 | ) 13 | .focus(); 14 | }} 15 | className={className} 16 | style={{ 17 | backgroundColor: '#00303f', 18 | cursor: 'pointer', 19 | }} 20 | xmlns='http://www.w3.org/2000/svg' 21 | width='40' 22 | height='40' 23 | viewBox='0 0 24 24' 24 | > 25 | 26 | 27 | ); 28 | } 29 | 30 | export default GithubIcon; 31 | -------------------------------------------------------------------------------- /src/SortingVisualizer/SortingVisualizer.css: -------------------------------------------------------------------------------- 1 | .container { 2 | width: 100%; 3 | height: 100vh; 4 | display: flex; 5 | background-color: #d4e2d4; 6 | flex-direction: row-reverse; 7 | align-items: flex-end; 8 | overflow: hidden; 9 | } 10 | 11 | .visualizeContainer { 12 | margin: 0 5px 0 5px; 13 | width: 100%; 14 | min-width: 500px; 15 | height: 100%; 16 | min-height: 500px; 17 | display: flex; 18 | flex-direction: row; 19 | align-items: flex-end; 20 | justify-content: space-evenly; 21 | background-color: inherit; 22 | } 23 | 24 | .arrayBar { 25 | width: 80px; 26 | margin: 0px 1px 2px 1px; 27 | transition: height 0.2s; 28 | display: flex; 29 | flex-direction: column; 30 | justify-content: flex-start; 31 | align-items: center; 32 | border-top-left-radius: 4px; 33 | border-top-right-radius: 4px; 34 | } 35 | 36 | .arrayBar > span { 37 | background-color: inherit; 38 | margin-bottom: 5px; 39 | color: #fff; 40 | font-weight: 400; 41 | } 42 | 43 | .button { 44 | width: 12rem; 45 | height: 3rem; 46 | padding: 0.3rem 0rem; 47 | border: none; 48 | border-radius: 0.317rem; 49 | background-color: #008891; 50 | color: #fff; 51 | font-weight: 700; 52 | font-size: 1rem; 53 | cursor: pointer; 54 | } 55 | 56 | .button:hover { 57 | opacity: 0.85; 58 | } 59 | 60 | .sidebar { 61 | width: 25vw; 62 | min-width: 200px; 63 | height: 100%; 64 | min-height: 500px; 65 | padding: 0 1.5vw 0 1.5vw; 66 | background-color: #00303f; 67 | display: flex; 68 | flex-direction: column; 69 | justify-content: space-evenly; 70 | align-items: center; 71 | } 72 | 73 | .slider-container { 74 | height: 3rem; 75 | width: 12rem; 76 | display: flex; 77 | flex-direction: column; 78 | align-items: center; 79 | justify-content: space-between; 80 | background-color: inherit; 81 | } 82 | 83 | .slider-container > input { 84 | width: 100%; 85 | } 86 | 87 | label { 88 | color: #fff; 89 | background-color: inherit; 90 | font-size: 1.1rem; 91 | } 92 | 93 | .select-box { 94 | display: flex; 95 | flex-direction: column; 96 | align-items: center; 97 | width: 200px; 98 | background-color: inherit; 99 | font-size: 16px; 100 | } 101 | 102 | header { 103 | background-color: inherit; 104 | color: #e7d9ea; 105 | font-size: larger; 106 | text-align: center; 107 | line-height: 2rem; 108 | } 109 | 110 | #select { 111 | height: 35px; 112 | padding: 5px 7px; 113 | line-height: 20px; 114 | font-size: 18px; 115 | width: 100%; 116 | border: 2px solid green; 117 | border-radius: 6px; 118 | margin-top: 10px; 119 | } 120 | 121 | .select-box select:focus { 122 | border: 2px solid green; 123 | } 124 | -------------------------------------------------------------------------------- /src/SortingVisualizer/Visualizer.jsx: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect } from 'react'; 2 | import colors from './colorCodes'; 3 | import GithubIcon from '../Icons/GithubIcon'; 4 | import { mergeSortAnimation } from '../algorithms/mergesort'; 5 | import { insertionSort } from '../algorithms/insertion'; 6 | import { selectionSort } from '../algorithms/selectionsort'; 7 | import { bubbleSort } from '../algorithms/bubblesort'; 8 | import { quicksort } from '../algorithms/quicksort'; 9 | import { heapsort } from '../algorithms/heapsort'; 10 | // stylesheet 11 | import './SortingVisualizer.css'; 12 | 13 | // Random Number Genrator 14 | const generateRandomNumber = (i, j) => { 15 | return Math.floor(i + Math.random() * (j - i)); 16 | }; 17 | 18 | const Visualizer = () => { 19 | // state of the array 20 | const [mainArray, setMainArray] = useState([]); 21 | const [arrayLength, setArrayLength] = useState(70); 22 | const [animationSpeed, setAnimationSpeed] = useState(10); 23 | const [algo, setAlgo] = useState('mergesort'); 24 | const [able, setAble] = useState(true); 25 | 26 | //Render the Array Before DOM loades 27 | useEffect(() => { 28 | if (able) populateArray(arrayLength); 29 | // eslint-disable-next-line react-hooks/exhaustive-deps 30 | }, [arrayLength, algo]); 31 | 32 | // ABLE / DISABLE BUTTONS ETC. 33 | useEffect(() => { 34 | const items = document.getElementsByClassName('able'); 35 | 36 | if (!able) { 37 | for (let i = 0; i < items.length; i++) { 38 | items[i].style.pointerEvents = 'none'; 39 | items[i].disabled = true; 40 | } 41 | } else { 42 | for (let i = 0; i < items.length; i++) { 43 | items[i].style.pointerEvents = 'auto'; 44 | items[i].disabled = false; 45 | } 46 | } 47 | }, [able]); 48 | 49 | const populateArray = size => { 50 | const tempArr = []; 51 | for (let i = 0; i < size; i++) { 52 | const item = { 53 | idx: i, 54 | val: generateRandomNumber(25, 500), 55 | }; 56 | tempArr.push(item); 57 | if (document.getElementsByClassName('arrayBar')[i] != null) { 58 | document.getElementsByClassName('arrayBar')[i].style.backgroundColor = 59 | colors.primaryColor; 60 | } 61 | } 62 | if (able) setMainArray(tempArr); 63 | }; 64 | 65 | // colors every elements afte sorting 66 | const colorEveryElement = (arr, counter) => { 67 | setTimeout(() => { 68 | const sortedArray = []; 69 | for (let i = 0; i < arr.length; i++) { 70 | document.getElementsByClassName('arrayBar')[i].style.backgroundColor = 71 | colors.afterSortingColor; 72 | 73 | sortedArray.push({ 74 | idx: i, 75 | val: arr[i], 76 | }); 77 | } 78 | setMainArray(sortedArray); 79 | setAble(true); 80 | }, counter * animationSpeed); 81 | }; 82 | 83 | // BUBBLE SORT 84 | const bubbleSortAnimate = () => { 85 | setAble(false); 86 | const { arr, count } = bubbleSort(mainArray, animationSpeed); 87 | colorEveryElement(arr, count + 1); 88 | }; 89 | 90 | // MERGE SORT 91 | const mergeSort = () => { 92 | setAble(false); 93 | const { sortedArray, count } = mergeSortAnimation( 94 | mainArray, 95 | animationSpeed 96 | ); 97 | colorEveryElement(sortedArray, count + 5); 98 | }; 99 | 100 | // INSERTION SORT 101 | const insertionSortAnimate = () => { 102 | setAble(false); 103 | const { arr, count } = insertionSort(mainArray, animationSpeed); 104 | colorEveryElement(arr, count + 1); 105 | }; 106 | 107 | // SELECTION SORT 108 | const selectionSortAnimate = () => { 109 | setAble(false); 110 | const { arr, count } = selectionSort(mainArray, animationSpeed); 111 | colorEveryElement(arr, count + 2); 112 | }; 113 | 114 | //QUICK SORT 115 | const quicksortAnimate = () => { 116 | setAble(false); 117 | const { arr, count } = quicksort(mainArray, animationSpeed); 118 | colorEveryElement(arr, count + 1); 119 | }; 120 | 121 | // HEAP SORT 122 | const heapsortAnimate = () => { 123 | setAble(false); 124 | const { arr, count } = heapsort(mainArray, animationSpeed); 125 | colorEveryElement(arr, count + 1); 126 | }; 127 | const startSorting = algo => { 128 | switch (algo) { 129 | case 'bubblesort': 130 | bubbleSortAnimate(); 131 | break; 132 | 133 | case 'mergesort': 134 | mergeSort(); 135 | break; 136 | 137 | case 'selectionsort': 138 | selectionSortAnimate(); 139 | break; 140 | 141 | case 'insertionsort': 142 | insertionSortAnimate(); 143 | break; 144 | case 'quicksort': 145 | quicksortAnimate(); 146 | break; 147 | case 'heapsort': 148 | heapsortAnimate(); 149 | break; 150 | default: 151 | mergeSort(); 152 | break; 153 | } 154 | }; 155 | 156 | return ( 157 |
158 |
159 | {mainArray.map(item => { 160 | return ( 161 |
169 | {arrayLength < 29 && able && {item.val}} 170 |
171 | ); 172 | })} 173 |
174 |
175 |
176 | Sorting Algorithm
Visualizer 177 |
178 |
179 | 180 | 193 |
194 | 197 | 198 | 204 | 205 |
206 | 207 | setArrayLength(e.target.value)} 212 | min='7' 213 | max='150' 214 | /> 215 |
216 |
217 | 218 | setAnimationSpeed(500 - e.target.value)} 223 | min='350' 224 | max='499' 225 | /> 226 |
227 | 228 | 229 |
230 |
231 | ); 232 | }; 233 | 234 | export default Visualizer; 235 | -------------------------------------------------------------------------------- /src/SortingVisualizer/colorCodes.js: -------------------------------------------------------------------------------- 1 | const colors = { 2 | primaryColor: '#dd85e7', 3 | afterSortingColor: '#00587a', 4 | pivotActiveColor: '#ff2400', 5 | sortedElementColor: '#4cbb17', 6 | cyan: '#40E0D0', 7 | orange: '#FFA500', 8 | }; 9 | 10 | export default colors; 11 | -------------------------------------------------------------------------------- /src/algorithms/bubblesort.js: -------------------------------------------------------------------------------- 1 | import colors from '../SortingVisualizer/colorCodes'; 2 | 3 | export const bubbleSort = (tempArr, speed) => { 4 | const arr = tempArr.map(item => item.val); 5 | let count = 0; 6 | 7 | const arrayBars = document.getElementsByClassName('arrayBar'); 8 | 9 | for (let i = 0; i < arr.length - 1; i++) { 10 | let swapped = false; 11 | for (let j = 0; j < arr.length - i - 1; j++) { 12 | // colors it up to active 13 | setTimeout(() => { 14 | arrayBars[j].style.backgroundColor = colors.cyan; 15 | arrayBars[j + 1].style.backgroundColor = colors.cyan; 16 | }, count++ * speed); 17 | 18 | if (arr[j] > arr[j + 1]) { 19 | // swap the heights 20 | setTimeout(() => { 21 | arrayBars[j].style.backgroundColor = colors.pivotActiveColor; 22 | arrayBars[j + 1].style.backgroundColor = colors.pivotActiveColor; 23 | 24 | let temp = arrayBars[j].style.height; 25 | arrayBars[j].style.height = arrayBars[j + 1].style.height; 26 | arrayBars[j + 1].style.height = temp; 27 | }, count++ * speed); 28 | 29 | count += 1; 30 | swapped = true; 31 | 32 | let temp = arr[j]; 33 | arr[j] = arr[j + 1]; 34 | arr[j + 1] = temp; 35 | } 36 | // color back to normal 37 | setTimeout(() => { 38 | arrayBars[j].style.backgroundColor = colors.primaryColor; 39 | arrayBars[j + 1].style.backgroundColor = colors.primaryColor; 40 | }, count++ * speed); 41 | } 42 | setTimeout(() => { 43 | arrayBars[arr.length - i - 1].style.backgroundColor = 44 | colors.sortedElementColor; 45 | if (swapped === false) { 46 | for (let x = 0; x < i; x++) { 47 | arrayBars[x].style.backgroundColor = colors.sortedElementColor; 48 | } 49 | } 50 | }, count * speed); 51 | if (swapped === false) break; 52 | } 53 | 54 | return { arr, count }; 55 | }; 56 | -------------------------------------------------------------------------------- /src/algorithms/heapsort.js: -------------------------------------------------------------------------------- 1 | import { swap } from './swap'; 2 | import colors from '../SortingVisualizer/colorCodes'; 3 | 4 | let count = 0; 5 | 6 | const arrayBars = document.getElementsByClassName('arrayBar'); 7 | 8 | export const heapsort = (tempArr, speed) => { 9 | count = 0; 10 | const arr = tempArr.map(item => item.val); 11 | sort(arr, arr.length, speed); 12 | return { arr, count }; 13 | }; 14 | 15 | const setColor = (speed, color, i, j) => { 16 | if (i) { 17 | setTimeout(() => { 18 | arrayBars[i].style.backgroundColor = color; 19 | }, count * speed); 20 | } 21 | 22 | if (j) { 23 | setTimeout(() => { 24 | arrayBars[j].style.backgroundColor = color; 25 | }, count * speed); 26 | } 27 | count++; 28 | }; 29 | const swapHeights = (speed, color, i, j) => { 30 | setTimeout(() => { 31 | arrayBars[i].style.backgroundColor = color; 32 | arrayBars[j].style.backgroundColor = color; 33 | 34 | let temp = arrayBars[i].style.height; 35 | arrayBars[i].style.height = arrayBars[j].style.height; 36 | arrayBars[j].style.height = temp; 37 | }, count * speed); 38 | 39 | count++; 40 | }; 41 | // heapify 42 | const heapify = (arr, i, n, speed) => { 43 | let largest = i; 44 | let leftChild = i * 2 + 1; 45 | let rightChild = i * 2 + 2; 46 | 47 | if (leftChild < n && arr[leftChild] > arr[largest]) largest = leftChild; 48 | 49 | if (rightChild < n && arr[rightChild] > arr[largest]) largest = rightChild; 50 | 51 | if (largest !== i) { 52 | swap(i, largest, arr); 53 | 54 | // color 55 | swapHeights(speed, colors.pivotActiveColor, i, largest); 56 | setColor(speed, colors.primaryColor, i, largest); 57 | heapify(arr, largest, n, speed); 58 | } 59 | }; 60 | 61 | // sort 62 | const sort = (arr, n, speed) => { 63 | // arrange the array 64 | for (let i = Math.floor(n / 2) - 1; i >= 0; i--) { 65 | heapify(arr, i, n, speed); 66 | } 67 | 68 | count += 3; 69 | // one by one extract the element from heap 70 | // and put them at back 71 | for (let i = n - 1; i >= 0; i--) { 72 | swap(i, 0, arr); 73 | swapHeights(speed, colors.orange, i, 0); 74 | count += 2; 75 | 76 | setColor(speed, colors.sortedElementColor, i); 77 | heapify(arr, 0, i, speed); 78 | } 79 | }; 80 | -------------------------------------------------------------------------------- /src/algorithms/insertion.js: -------------------------------------------------------------------------------- 1 | import colors from '../SortingVisualizer/colorCodes'; 2 | import { swap } from './swap'; 3 | export const insertionSort = (tempArr, speed) => { 4 | let count = 0; 5 | 6 | const arrayBars = document.getElementsByClassName('arrayBar'); 7 | const arr = tempArr.map(item => item.val); 8 | 9 | for (let i = 1; i < arr.length; i++) { 10 | // color current comparing value 11 | setTimeout(() => { 12 | arrayBars[i].style.backgroundColor = colors.orange; 13 | arrayBars[i - 1].style.backgroundColor = colors.orange; 14 | }, count++ * speed); 15 | 16 | let j = i; 17 | while (j > 0 && arr[j] < arr[j - 1]) { 18 | let k = j; /* to avoid es line error */ 19 | 20 | setTimeout(() => { 21 | if (k !== i) 22 | arrayBars[k].style.backgroundColor = colors.sortedElementColor; 23 | arrayBars[k - 1].style.backgroundColor = colors.sortedElementColor; 24 | 25 | let temp = arrayBars[k].style.height; 26 | arrayBars[k].style.height = arrayBars[k - 1].style.height; 27 | arrayBars[k - 1].style.height = temp; 28 | }, count++ * speed); 29 | 30 | swap(j, j - 1, arr); 31 | 32 | setTimeout(() => { 33 | if (k !== i) arrayBars[k].style.backgroundColor = colors.primaryColor; 34 | arrayBars[k - 1].style.backgroundColor = colors.primaryColor; 35 | }, count++ * speed); 36 | j--; 37 | } 38 | // set the color to normal color 39 | setTimeout(() => { 40 | arrayBars[i].style.backgroundColor = colors.primaryColor; 41 | arrayBars[i - 1].style.backgroundColor = colors.primaryColor; 42 | }, count * speed); 43 | } 44 | return { arr, count }; 45 | }; 46 | -------------------------------------------------------------------------------- /src/algorithms/mergesort.js: -------------------------------------------------------------------------------- 1 | import colors from '../SortingVisualizer/colorCodes'; 2 | 3 | let count = 0; 4 | 5 | export const mergeSortAnimation = (tempArr, animationSpeed) => { 6 | const arr = tempArr.map(item => item.val); 7 | count = 0; 8 | const sortedArray = mergesort(arr, 0, arr.length - 1, animationSpeed); 9 | return { sortedArray, count }; 10 | }; 11 | 12 | const mergesort = (arr, low, high, animationSpeed) => { 13 | if (low > high) { 14 | return []; 15 | } 16 | 17 | if (low === high) { 18 | let aux = []; 19 | aux.push(arr[low]); 20 | return aux; 21 | } 22 | 23 | let mid = Math.floor((high + low) / 2); 24 | 25 | // recursively divide the array until its sorted 26 | // in the end it will only have a single item and sorted :) 27 | 28 | const right = mergesort(arr, low, mid, animationSpeed); 29 | const left = mergesort(arr, mid + 1, high, animationSpeed); 30 | 31 | const aux = []; 32 | let k = low; 33 | const arrayBars = document.getElementsByClassName('arrayBar'); 34 | 35 | let li = 0, 36 | ri = 0; // for left and right array respectively 37 | while (li < left.length && ri < right.length) { 38 | let counter = count; 39 | let barIdx = k; 40 | 41 | if (left[li] < right[ri]) { 42 | aux.push(left[li]); 43 | let i = li; 44 | setTimeout(() => { 45 | arrayBars[barIdx].style.backgroundColor = colors.cyan; 46 | arrayBars[barIdx].style.height = `${left[i]}px`; 47 | }, counter * animationSpeed); 48 | 49 | setTimeout(() => { 50 | arrayBars[barIdx].style.backgroundColor = colors.pivotActiveColor; 51 | }, (counter + 1) * animationSpeed); 52 | 53 | setTimeout(() => { 54 | arrayBars[barIdx].style.backgroundColor = colors.primaryColor; 55 | }, (counter + 1.5) * animationSpeed); 56 | li++; 57 | } else { 58 | aux.push(right[ri]); 59 | let i = ri; 60 | 61 | setTimeout(() => { 62 | arrayBars[barIdx].style.backgroundColor = colors.cyan; 63 | arrayBars[barIdx].style.height = `${right[i]}px`; 64 | }, counter * animationSpeed); 65 | 66 | setTimeout(() => { 67 | arrayBars[barIdx].style.backgroundColor = colors.pivotActiveColor; 68 | }, (counter + 1) * animationSpeed); 69 | 70 | setTimeout(() => { 71 | arrayBars[barIdx].style.backgroundColor = colors.primaryColor; 72 | }, (counter + 1.5) * animationSpeed); 73 | ri++; 74 | } 75 | k++; 76 | count++; 77 | } 78 | 79 | // left exhausted 80 | if (li === left.length) { 81 | while (ri < right.length) { 82 | aux.push(right[ri]); 83 | let barIdx = k; 84 | let i = ri; 85 | let counter = count; 86 | 87 | setTimeout(() => { 88 | arrayBars[barIdx].style.backgroundColor = colors.cyan; 89 | arrayBars[barIdx].style.height = `${right[i]}px`; 90 | }, counter * animationSpeed); 91 | 92 | setTimeout(() => { 93 | arrayBars[barIdx].style.backgroundColor = colors.pivotActiveColor; 94 | }, (counter + 1) * animationSpeed); 95 | 96 | setTimeout(() => { 97 | arrayBars[barIdx].style.backgroundColor = colors.primaryColor; 98 | }, (counter + 1.5) * animationSpeed); 99 | ri++; 100 | count++; 101 | k++; 102 | } 103 | } else if (ri === right.length) { 104 | while (li < left.length) { 105 | aux.push(left[li]); 106 | let barIdx = k; 107 | let i = li; 108 | let counter = count; 109 | 110 | setTimeout(() => { 111 | arrayBars[barIdx].style.backgroundColor = colors.cyan; 112 | arrayBars[barIdx].style.height = `${left[i]}px`; 113 | }, counter * animationSpeed); 114 | 115 | setTimeout(() => { 116 | arrayBars[barIdx].style.backgroundColor = colors.pivotActiveColor; 117 | }, (counter + 1) * animationSpeed); 118 | 119 | setTimeout(() => { 120 | arrayBars[barIdx].style.backgroundColor = colors.primaryColor; 121 | }, (counter + 1.5) * animationSpeed); 122 | li++; 123 | k++; 124 | count++; 125 | } 126 | } 127 | return aux; 128 | }; 129 | -------------------------------------------------------------------------------- /src/algorithms/quicksort.js: -------------------------------------------------------------------------------- 1 | import colors from '../SortingVisualizer/colorCodes'; 2 | import { swap } from './swap'; 3 | 4 | const arrayBars = document.getElementsByClassName('arrayBar'); 5 | let count = 0; 6 | 7 | export const quicksort = (tempArr, animationSpeed) => { 8 | const arr = tempArr.map(item => item.val); 9 | count = 0; 10 | let low = 0; 11 | let high = arr.length - 1; 12 | 13 | // main quicksort function 14 | quicksortHelper(arr, low, high, animationSpeed); 15 | count += 2; 16 | return { arr, count }; 17 | }; 18 | 19 | const quicksortHelper = (arr, low, high, speed) => { 20 | if (low > high) return; 21 | 22 | let pivot = partition(arr, low, high, speed); 23 | 24 | // Colors the element which is in its correct place 25 | setTimeout(() => { 26 | arrayBars[pivot].style.backgroundColor = colors.sortedElementColor; 27 | }, count * speed); 28 | count++; 29 | 30 | quicksortHelper(arr, low, pivot - 1, speed); 31 | quicksortHelper(arr, pivot + 1, high, speed); 32 | }; 33 | 34 | const partition = (arr, low, high, speed) => { 35 | let pivotElement = arr[high]; 36 | 37 | // Colors the current pivot index 38 | setTimeout(() => { 39 | arrayBars[high].style.backgroundColor = colors.pivotActiveColor; 40 | }, count * speed); 41 | count++; 42 | 43 | let i = low; 44 | for (let j = low; j < high; j++) { 45 | // animate the curr traversing element 46 | setTimeout(() => { 47 | arrayBars[j].style.backgroundColor = colors.cyan; 48 | }, count * speed); 49 | count += 2; 50 | 51 | // color primary to the curr traversing element 52 | setTimeout(() => { 53 | arrayBars[j].style.backgroundColor = colors.primaryColor; 54 | }, count * speed); 55 | count++; 56 | 57 | if (pivotElement > arr[j]) { 58 | let tempI = i; 59 | setTimeout(() => { 60 | arrayBars[tempI].style.backgroundColor = colors.orange; 61 | 62 | let temp = arrayBars[tempI].style.height; 63 | arrayBars[tempI].style.height = arrayBars[j].style.height; 64 | arrayBars[j].style.height = temp; 65 | }, count * speed); 66 | count++; 67 | 68 | setTimeout(() => { 69 | arrayBars[tempI].style.backgroundColor = colors.primaryColor; 70 | }, (count + 1) * speed); 71 | count++; 72 | 73 | swap(i, j, arr); 74 | i++; 75 | } 76 | } 77 | 78 | // resets the color of pivot element to primary 79 | setTimeout(() => { 80 | arrayBars[high].style.backgroundColor = colors.primaryColor; 81 | }, count * speed); 82 | count++; 83 | 84 | setTimeout(() => { 85 | let temp = arrayBars[i].style.height; 86 | arrayBars[i].style.height = arrayBars[high].style.height; 87 | arrayBars[high].style.height = temp; 88 | }, count * speed); 89 | count++; 90 | 91 | swap(i, high, arr); 92 | return i; 93 | }; 94 | -------------------------------------------------------------------------------- /src/algorithms/selectionsort.js: -------------------------------------------------------------------------------- 1 | import { swap } from './swap'; 2 | 3 | export const selectionSort = (tempArr, speed) => { 4 | const arr = tempArr.map(item => item.val); 5 | const arrayBars = document.getElementsByClassName('arrayBar'); 6 | 7 | let count = 0; 8 | for (let i = 0; i < arr.length; i++) { 9 | // initially minidx is set to i 10 | let minIdx = i; 11 | 12 | // change the color of the minIdx to red to identify 13 | setTimeout(() => { 14 | arrayBars[minIdx].style.backgroundColor = 'red'; 15 | }, count * speed); 16 | count++; 17 | 18 | // traverse for the next smallest item 19 | for (let j = i + 1; j < arr.length; j++) { 20 | // current item color to orange 21 | setTimeout(() => { 22 | arrayBars[j].style.backgroundColor = 'orange'; 23 | }, (count + 2) * speed); 24 | 25 | let oldMinIdx; 26 | if (arr[j] < arr[minIdx]) { 27 | oldMinIdx = minIdx; 28 | minIdx = j; 29 | 30 | // change the old minIdx to default color 31 | setTimeout(() => { 32 | arrayBars[oldMinIdx].style.backgroundColor = '#dd85e7'; 33 | }, (count + 3) * speed); 34 | } 35 | // changing the current item to default color 36 | setTimeout(() => { 37 | arrayBars[j].style.backgroundColor = '#dd85e7'; 38 | }, (count + 3) * speed); 39 | count++; 40 | } 41 | 42 | swap(i, minIdx, arr); 43 | 44 | // swap the heights and color the sorted item green 45 | setTimeout(() => { 46 | let temp = arrayBars[i].style.height; 47 | arrayBars[i].style.height = arrayBars[minIdx].style.height; 48 | arrayBars[minIdx].style.height = temp; 49 | arrayBars[i].style.backgroundColor = 'green'; 50 | }, (count + 3) * speed); 51 | count++; 52 | } 53 | return { arr, count }; 54 | }; 55 | -------------------------------------------------------------------------------- /src/algorithms/swap.js: -------------------------------------------------------------------------------- 1 | export function swap(i, j, arr = []) { 2 | let temp = arr[i]; 3 | arr[i] = arr[j]; 4 | arr[j] = temp; 5 | } 6 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /src/index.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | 6 | ReactDOM.render( 7 | 8 | 9 | , 10 | document.getElementById('root') 11 | ); 12 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import reactRefresh from '@vitejs/plugin-react-refresh'; 3 | import svgrPlugin from 'vite-plugin-svgr'; 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | build: { 8 | outDir: 'build', 9 | }, 10 | plugins: [reactRefresh(), svgrPlugin()], 11 | }); 12 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0": 6 | version "7.16.0" 7 | resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" 8 | integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== 9 | dependencies: 10 | "@babel/highlight" "^7.16.0" 11 | 12 | "@babel/compat-data@^7.16.0": 13 | version "7.16.0" 14 | resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz#ea269d7f78deb3a7826c39a4048eecda541ebdaa" 15 | integrity sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew== 16 | 17 | "@babel/core@^7.14.8", "@babel/core@^7.15.5": 18 | version "7.16.0" 19 | resolved "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" 20 | integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== 21 | dependencies: 22 | "@babel/code-frame" "^7.16.0" 23 | "@babel/generator" "^7.16.0" 24 | "@babel/helper-compilation-targets" "^7.16.0" 25 | "@babel/helper-module-transforms" "^7.16.0" 26 | "@babel/helpers" "^7.16.0" 27 | "@babel/parser" "^7.16.0" 28 | "@babel/template" "^7.16.0" 29 | "@babel/traverse" "^7.16.0" 30 | "@babel/types" "^7.16.0" 31 | convert-source-map "^1.7.0" 32 | debug "^4.1.0" 33 | gensync "^1.0.0-beta.2" 34 | json5 "^2.1.2" 35 | semver "^6.3.0" 36 | source-map "^0.5.0" 37 | 38 | "@babel/generator@^7.16.0": 39 | version "7.16.0" 40 | resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" 41 | integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== 42 | dependencies: 43 | "@babel/types" "^7.16.0" 44 | jsesc "^2.5.1" 45 | source-map "^0.5.0" 46 | 47 | "@babel/helper-compilation-targets@^7.16.0": 48 | version "7.16.3" 49 | resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" 50 | integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== 51 | dependencies: 52 | "@babel/compat-data" "^7.16.0" 53 | "@babel/helper-validator-option" "^7.14.5" 54 | browserslist "^4.17.5" 55 | semver "^6.3.0" 56 | 57 | "@babel/helper-function-name@^7.16.0": 58 | version "7.16.0" 59 | resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" 60 | integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== 61 | dependencies: 62 | "@babel/helper-get-function-arity" "^7.16.0" 63 | "@babel/template" "^7.16.0" 64 | "@babel/types" "^7.16.0" 65 | 66 | "@babel/helper-get-function-arity@^7.16.0": 67 | version "7.16.0" 68 | resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" 69 | integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== 70 | dependencies: 71 | "@babel/types" "^7.16.0" 72 | 73 | "@babel/helper-hoist-variables@^7.16.0": 74 | version "7.16.0" 75 | resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" 76 | integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== 77 | dependencies: 78 | "@babel/types" "^7.16.0" 79 | 80 | "@babel/helper-member-expression-to-functions@^7.16.0": 81 | version "7.16.0" 82 | resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" 83 | integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== 84 | dependencies: 85 | "@babel/types" "^7.16.0" 86 | 87 | "@babel/helper-module-imports@^7.16.0": 88 | version "7.16.0" 89 | resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" 90 | integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== 91 | dependencies: 92 | "@babel/types" "^7.16.0" 93 | 94 | "@babel/helper-module-transforms@^7.16.0": 95 | version "7.16.0" 96 | resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" 97 | integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== 98 | dependencies: 99 | "@babel/helper-module-imports" "^7.16.0" 100 | "@babel/helper-replace-supers" "^7.16.0" 101 | "@babel/helper-simple-access" "^7.16.0" 102 | "@babel/helper-split-export-declaration" "^7.16.0" 103 | "@babel/helper-validator-identifier" "^7.15.7" 104 | "@babel/template" "^7.16.0" 105 | "@babel/traverse" "^7.16.0" 106 | "@babel/types" "^7.16.0" 107 | 108 | "@babel/helper-optimise-call-expression@^7.16.0": 109 | version "7.16.0" 110 | resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" 111 | integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== 112 | dependencies: 113 | "@babel/types" "^7.16.0" 114 | 115 | "@babel/helper-plugin-utils@^7.14.5": 116 | version "7.14.5" 117 | resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" 118 | integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== 119 | 120 | "@babel/helper-replace-supers@^7.16.0": 121 | version "7.16.0" 122 | resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" 123 | integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== 124 | dependencies: 125 | "@babel/helper-member-expression-to-functions" "^7.16.0" 126 | "@babel/helper-optimise-call-expression" "^7.16.0" 127 | "@babel/traverse" "^7.16.0" 128 | "@babel/types" "^7.16.0" 129 | 130 | "@babel/helper-simple-access@^7.16.0": 131 | version "7.16.0" 132 | resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" 133 | integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== 134 | dependencies: 135 | "@babel/types" "^7.16.0" 136 | 137 | "@babel/helper-split-export-declaration@^7.16.0": 138 | version "7.16.0" 139 | resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" 140 | integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== 141 | dependencies: 142 | "@babel/types" "^7.16.0" 143 | 144 | "@babel/helper-validator-identifier@^7.15.7": 145 | version "7.15.7" 146 | resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" 147 | integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== 148 | 149 | "@babel/helper-validator-option@^7.14.5": 150 | version "7.14.5" 151 | resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" 152 | integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== 153 | 154 | "@babel/helpers@^7.16.0": 155 | version "7.16.3" 156 | resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz#27fc64f40b996e7074dc73128c3e5c3e7f55c43c" 157 | integrity sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w== 158 | dependencies: 159 | "@babel/template" "^7.16.0" 160 | "@babel/traverse" "^7.16.3" 161 | "@babel/types" "^7.16.0" 162 | 163 | "@babel/highlight@^7.16.0": 164 | version "7.16.0" 165 | resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" 166 | integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== 167 | dependencies: 168 | "@babel/helper-validator-identifier" "^7.15.7" 169 | chalk "^2.0.0" 170 | js-tokens "^4.0.0" 171 | 172 | "@babel/parser@^7.16.0", "@babel/parser@^7.16.3": 173 | version "7.16.3" 174 | resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.16.3.tgz#271bafcb811080905a119222edbc17909c82261d" 175 | integrity sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw== 176 | 177 | "@babel/plugin-transform-react-jsx-self@^7.14.5": 178 | version "7.16.0" 179 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.0.tgz#09202158abbc716a08330f392bfb98d6b9acfa0c" 180 | integrity sha512-97yCFY+2GvniqOThOSjPor8xUoDiQ0STVWAQMl3pjhJoFVe5DuXDLZCRSZxu9clx+oRCbTiXGgKEG/Yoyo6Y+w== 181 | dependencies: 182 | "@babel/helper-plugin-utils" "^7.14.5" 183 | 184 | "@babel/plugin-transform-react-jsx-source@^7.14.5": 185 | version "7.16.0" 186 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.0.tgz#d40c959d7803aae38224594585748693e84c0a22" 187 | integrity sha512-8yvbGGrHOeb/oyPc9tzNoe9/lmIjz3HLa9Nc5dMGDyNpGjfFrk8D2KdEq9NRkftZzeoQEW6yPQ29TMZtrLiUUA== 188 | dependencies: 189 | "@babel/helper-plugin-utils" "^7.14.5" 190 | 191 | "@babel/template@^7.16.0": 192 | version "7.16.0" 193 | resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" 194 | integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== 195 | dependencies: 196 | "@babel/code-frame" "^7.16.0" 197 | "@babel/parser" "^7.16.0" 198 | "@babel/types" "^7.16.0" 199 | 200 | "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3": 201 | version "7.16.3" 202 | resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" 203 | integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== 204 | dependencies: 205 | "@babel/code-frame" "^7.16.0" 206 | "@babel/generator" "^7.16.0" 207 | "@babel/helper-function-name" "^7.16.0" 208 | "@babel/helper-hoist-variables" "^7.16.0" 209 | "@babel/helper-split-export-declaration" "^7.16.0" 210 | "@babel/parser" "^7.16.3" 211 | "@babel/types" "^7.16.0" 212 | debug "^4.1.0" 213 | globals "^11.1.0" 214 | 215 | "@babel/types@^7.15.6", "@babel/types@^7.16.0": 216 | version "7.16.0" 217 | resolved "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" 218 | integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== 219 | dependencies: 220 | "@babel/helper-validator-identifier" "^7.15.7" 221 | to-fast-properties "^2.0.0" 222 | 223 | "@rollup/pluginutils@^4.1.1": 224 | version "4.1.1" 225 | resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz#1d4da86dd4eded15656a57d933fda2b9a08d47ec" 226 | integrity sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ== 227 | dependencies: 228 | estree-walker "^2.0.1" 229 | picomatch "^2.2.2" 230 | 231 | "@svgr/babel-plugin-add-jsx-attribute@^6.0.0-alpha.1": 232 | version "6.0.0-alpha.1" 233 | resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0-alpha.1.tgz#4b6a1ddff5a527819a64d8ccbf0f68b05e27a3ce" 234 | integrity sha512-nmQKOptngoL6PvVaqPmmU9P5TuhcXLOQPMstPNUKrYAUXDdVLFmRMkYIp34fme/7ntM8vuGZOkP7I92lrqgBVA== 235 | 236 | "@svgr/babel-plugin-remove-jsx-attribute@^6.0.0-alpha.1": 237 | version "6.0.0-alpha.1" 238 | resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0-alpha.1.tgz#1ad411c5782ca6b4397092ca6fb947e6d30f1143" 239 | integrity sha512-5hrpsNks29+s2XhzYVVhkLWdoiEEbaw3gRVeFrO7FzmIgVhKTbvdGywIOYHIhEFv6yzkc6lwTrlBULy2yyoKgQ== 240 | 241 | "@svgr/babel-plugin-remove-jsx-empty-expression@^6.0.0-alpha.1": 242 | version "6.0.0-alpha.1" 243 | resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0-alpha.1.tgz#2bea2f57b352a965cd9aee828dc2069a03d8298e" 244 | integrity sha512-Qgye0GTv7O08e0rofzAbVAfD/Jil6M/J5aTOksyRPW7TdppKa/yS2cbhKjT3BdHfzlei10zfpQ4auzsEK8YwCw== 245 | 246 | "@svgr/babel-plugin-replace-jsx-attribute-value@^6.0.0-alpha.1": 247 | version "6.0.0-alpha.1" 248 | resolved "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0-alpha.1.tgz#a202f634fa99e95ffed7ac0e22c050e6fa464f31" 249 | integrity sha512-AzQ4PXyvFEJ1rZxiuQChsk1z77iuOxoYG/bOmvvKQDmcjn8yCanWao+Ky4LLGfobtR5E3UxzFzErU/Ed0W69qA== 250 | 251 | "@svgr/babel-plugin-svg-dynamic-title@^6.0.0-alpha.1": 252 | version "6.0.0-alpha.1" 253 | resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0-alpha.1.tgz#dfa70807c9b8aea30a52294906762ca7157bd47b" 254 | integrity sha512-kg/HgXemkJNHZb1HCKHUEZTZIVsW3Yk9V/+J+UczM4fogYOSl9Q9wtJg9q3lOI/5FNDn1evmlBPjhQpfd0kcaQ== 255 | 256 | "@svgr/babel-plugin-svg-em-dimensions@^6.0.0-alpha.1": 257 | version "6.0.0-alpha.1" 258 | resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0-alpha.1.tgz#cb8a014c7e423471770eef1f54bba6a3ea478407" 259 | integrity sha512-dx82szoXCjXyN6dES8pVGNAJC9FbhtRJRwZJxHt5tZDGxC1JDIirSgAAwvs4GMzC2WFVTvuOPstWOS/e5pP4IA== 260 | 261 | "@svgr/babel-plugin-transform-react-native-svg@^6.0.0-alpha.1": 262 | version "6.0.0-alpha.1" 263 | resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0-alpha.1.tgz#d95da1433a61e661e4bb0a80f63d5b3f37886181" 264 | integrity sha512-OWiGmgUazKcFlLF4AzTMV7Wt+twR7P+Kwy3nM80PWdwjhGeGELQwQZ9F+pHpay6KvTSxdYoySCxemvPucrSfGg== 265 | 266 | "@svgr/babel-plugin-transform-svg-component@^6.0.0-alpha.2": 267 | version "6.0.0-alpha.2" 268 | resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.0.0-alpha.2.tgz#87d276d2b15bdc3fa8ef741390482e0255d2b7e6" 269 | integrity sha512-rJRoAW21VPcE+eXOiPjFL7C0Bj/Yqdupkrr2hx4zJyGEXbkVZNhMkh6BILHL2eE8VDWmBUHG7CdGlH4YQZQ5IA== 270 | 271 | "@svgr/babel-preset@^6.0.0-alpha.2": 272 | version "6.0.0-alpha.2" 273 | resolved "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.0.0-alpha.2.tgz#7376bd25c55489aaf2cb95a088d2206b097e3be3" 274 | integrity sha512-/yWYZrA0EBYyDRDRbk+D9e/x2iaNtQd/4tXpxzZT3fCj0oEMsT0AAuaKNFx/fEuAiwxy8usJrHLQWKSqhDvBsA== 275 | dependencies: 276 | "@svgr/babel-plugin-add-jsx-attribute" "^6.0.0-alpha.1" 277 | "@svgr/babel-plugin-remove-jsx-attribute" "^6.0.0-alpha.1" 278 | "@svgr/babel-plugin-remove-jsx-empty-expression" "^6.0.0-alpha.1" 279 | "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.0.0-alpha.1" 280 | "@svgr/babel-plugin-svg-dynamic-title" "^6.0.0-alpha.1" 281 | "@svgr/babel-plugin-svg-em-dimensions" "^6.0.0-alpha.1" 282 | "@svgr/babel-plugin-transform-react-native-svg" "^6.0.0-alpha.1" 283 | "@svgr/babel-plugin-transform-svg-component" "^6.0.0-alpha.2" 284 | 285 | "@svgr/core@^6.0.0-alpha.2": 286 | version "6.0.0-alpha.2" 287 | resolved "https://registry.npmjs.org/@svgr/core/-/core-6.0.0-alpha.2.tgz#d449e4e0ace9f32be1112a24599df0f3353c6427" 288 | integrity sha512-jkNWgZWbWWMz9sPx/tDWNR0dIJT4KuWZwEc9BWRPVBUD6a1lF+iLpi3ypQnp4EsYzIpNfLwUQTnabi7miCpFGA== 289 | dependencies: 290 | "@svgr/plugin-jsx" "^6.0.0-alpha.2" 291 | camelcase "^6.2.0" 292 | cosmiconfig "^7.0.1" 293 | 294 | "@svgr/hast-util-to-babel-ast@^6.0.0-alpha.1": 295 | version "6.0.0-alpha.1" 296 | resolved "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.0.0-alpha.1.tgz#92c7b0cc99817ae00ed8ea78bdb44132a49e929d" 297 | integrity sha512-6sQb+2B8To0W4mDIQAG0rAbNCWzVinaLlmShYHy38oHRJBaHLvnSHEqebGxBynO6nf8wgVfQjuTBLuUAR+awig== 298 | dependencies: 299 | "@babel/types" "^7.15.6" 300 | entities "^3.0.1" 301 | 302 | "@svgr/plugin-jsx@^6.0.0-alpha.2": 303 | version "6.0.0-alpha.2" 304 | resolved "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.0.0-alpha.2.tgz#681e34d578b843604bee693d967a11042c38096c" 305 | integrity sha512-hSljiEnq1tFF82/ec40wP6453mGNQ5BPsw+qXTJYd7DFqntBhz01/dQdzspGnkwSxJZXx831kFKm1Rim8c0hXg== 306 | dependencies: 307 | "@babel/core" "^7.15.5" 308 | "@svgr/babel-preset" "^6.0.0-alpha.2" 309 | "@svgr/hast-util-to-babel-ast" "^6.0.0-alpha.1" 310 | svg-parser "^2.0.2" 311 | 312 | "@types/parse-json@^4.0.0": 313 | version "4.0.0" 314 | resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" 315 | integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== 316 | 317 | "@vitejs/plugin-react-refresh@^1.3.6": 318 | version "1.3.6" 319 | resolved "https://registry.npmjs.org/@vitejs/plugin-react-refresh/-/plugin-react-refresh-1.3.6.tgz#19818392db01e81746cfeb04e096ab3010e79fe3" 320 | integrity sha512-iNR/UqhUOmFFxiezt0em9CgmiJBdWR+5jGxB2FihaoJfqGt76kiwaKoVOJVU5NYcDWMdN06LbyN2VIGIoYdsEA== 321 | dependencies: 322 | "@babel/core" "^7.14.8" 323 | "@babel/plugin-transform-react-jsx-self" "^7.14.5" 324 | "@babel/plugin-transform-react-jsx-source" "^7.14.5" 325 | "@rollup/pluginutils" "^4.1.1" 326 | react-refresh "^0.10.0" 327 | 328 | ansi-styles@^3.2.1: 329 | version "3.2.1" 330 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 331 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 332 | dependencies: 333 | color-convert "^1.9.0" 334 | 335 | browserslist@^4.17.5: 336 | version "4.17.6" 337 | resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d" 338 | integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw== 339 | dependencies: 340 | caniuse-lite "^1.0.30001274" 341 | electron-to-chromium "^1.3.886" 342 | escalade "^3.1.1" 343 | node-releases "^2.0.1" 344 | picocolors "^1.0.0" 345 | 346 | callsites@^3.0.0: 347 | version "3.1.0" 348 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 349 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 350 | 351 | camelcase@^6.2.0: 352 | version "6.2.0" 353 | resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" 354 | integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== 355 | 356 | caniuse-lite@^1.0.30001274: 357 | version "1.0.30001279" 358 | resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001279.tgz#eb06818da481ef5096a3b3760f43e5382ed6b0ce" 359 | integrity sha512-VfEHpzHEXj6/CxggTwSFoZBBYGQfQv9Cf42KPlO79sWXCD1QNKWKsKzFeWL7QpZHJQYAvocqV6Rty1yJMkqWLQ== 360 | 361 | chalk@^2.0.0: 362 | version "2.4.2" 363 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 364 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 365 | dependencies: 366 | ansi-styles "^3.2.1" 367 | escape-string-regexp "^1.0.5" 368 | supports-color "^5.3.0" 369 | 370 | color-convert@^1.9.0: 371 | version "1.9.3" 372 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 373 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 374 | dependencies: 375 | color-name "1.1.3" 376 | 377 | color-name@1.1.3: 378 | version "1.1.3" 379 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 380 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 381 | 382 | convert-source-map@^1.7.0: 383 | version "1.8.0" 384 | resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" 385 | integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== 386 | dependencies: 387 | safe-buffer "~5.1.1" 388 | 389 | cosmiconfig@^7.0.1: 390 | version "7.0.1" 391 | resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" 392 | integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== 393 | dependencies: 394 | "@types/parse-json" "^4.0.0" 395 | import-fresh "^3.2.1" 396 | parse-json "^5.0.0" 397 | path-type "^4.0.0" 398 | yaml "^1.10.0" 399 | 400 | debug@^4.1.0: 401 | version "4.3.2" 402 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" 403 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 404 | dependencies: 405 | ms "2.1.2" 406 | 407 | electron-to-chromium@^1.3.886: 408 | version "1.3.894" 409 | resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.894.tgz#54554ecb40d40ddac7241c4a42887e86180015d8" 410 | integrity sha512-WY8pA4irAZ4cm/Pr7YFPtPLVqj3nU6d0SbfoHF6M7HZNONfPdAnYAarumqQ75go2LuN72uO9wGuCEqnfya/ytg== 411 | 412 | entities@^3.0.1: 413 | version "3.0.1" 414 | resolved "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" 415 | integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== 416 | 417 | error-ex@^1.3.1: 418 | version "1.3.2" 419 | resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 420 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 421 | dependencies: 422 | is-arrayish "^0.2.1" 423 | 424 | esbuild-android-arm64@0.13.13: 425 | version "0.13.13" 426 | resolved "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.13.tgz#da07b5fb2daf7d83dcd725f7cf58a6758e6e702a" 427 | integrity sha512-T02aneWWguJrF082jZworjU6vm8f4UQ+IH2K3HREtlqoY9voiJUwHLRL6khRlsNLzVglqgqb7a3HfGx7hAADCQ== 428 | 429 | esbuild-darwin-64@0.13.13: 430 | version "0.13.13" 431 | resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.13.tgz#e94e9fd3b4b5455a2e675cd084a19a71b6904bbf" 432 | integrity sha512-wkaiGAsN/09X9kDlkxFfbbIgR78SNjMOfUhoel3CqKBDsi9uZhw7HBNHNxTzYUK8X8LAKFpbODgcRB3b/I8gHA== 433 | 434 | esbuild-darwin-arm64@0.13.13: 435 | version "0.13.13" 436 | resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.13.tgz#8c320eafbb3ba2c70d8062128c5b71503e342471" 437 | integrity sha512-b02/nNKGSV85Gw9pUCI5B48AYjk0vFggDeom0S6QMP/cEDtjSh1WVfoIFNAaLA0MHWfue8KBwoGVsN7rBshs4g== 438 | 439 | esbuild-freebsd-64@0.13.13: 440 | version "0.13.13" 441 | resolved "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.13.tgz#ce0ca5b8c4c274cfebc9326f9b316834bd9dd151" 442 | integrity sha512-ALgXYNYDzk9YPVk80A+G4vz2D22Gv4j4y25exDBGgqTcwrVQP8rf/rjwUjHoh9apP76oLbUZTmUmvCMuTI1V9A== 443 | 444 | esbuild-freebsd-arm64@0.13.13: 445 | version "0.13.13" 446 | resolved "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.13.tgz#463da17562fdcfdf03b3b94b28497d8d8dcc8f62" 447 | integrity sha512-uFvkCpsZ1yqWQuonw5T1WZ4j59xP/PCvtu6I4pbLejhNo4nwjW6YalqnBvBSORq5/Ifo9S/wsIlVHzkzEwdtlw== 448 | 449 | esbuild-linux-32@0.13.13: 450 | version "0.13.13" 451 | resolved "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.13.tgz#2035793160da2c4be48a929e5bafb14a31789acc" 452 | integrity sha512-yxR9BBwEPs9acVEwTrEE2JJNHYVuPQC9YGjRfbNqtyfK/vVBQYuw8JaeRFAvFs3pVJdQD0C2BNP4q9d62SCP4w== 453 | 454 | esbuild-linux-64@0.13.13: 455 | version "0.13.13" 456 | resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.13.tgz#fbe4802a8168c6d339d0749f977b099449b56f22" 457 | integrity sha512-kzhjlrlJ+6ESRB/n12WTGll94+y+HFeyoWsOrLo/Si0s0f+Vip4b8vlnG0GSiS6JTsWYAtGHReGczFOaETlKIw== 458 | 459 | esbuild-linux-arm64@0.13.13: 460 | version "0.13.13" 461 | resolved "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.13.tgz#f08d98df28d436ed4aad1529615822bb74d4d978" 462 | integrity sha512-KMrEfnVbmmJxT3vfTnPv/AiXpBFbbyExH13BsUGy1HZRPFMi5Gev5gk8kJIZCQSRfNR17aqq8sO5Crm2KpZkng== 463 | 464 | esbuild-linux-arm@0.13.13: 465 | version "0.13.13" 466 | resolved "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.13.tgz#6f968c3a98b64e30c80b212384192d0cfcb32e7f" 467 | integrity sha512-hXub4pcEds+U1TfvLp1maJ+GHRw7oizvzbGRdUvVDwtITtjq8qpHV5Q5hWNNn6Q+b3b2UxF03JcgnpzCw96nUQ== 468 | 469 | esbuild-linux-mips64le@0.13.13: 470 | version "0.13.13" 471 | resolved "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.13.tgz#690c78dc4725efe7d06a1431287966fbf7774c7f" 472 | integrity sha512-cJT9O1LYljqnnqlHaS0hdG73t7hHzF3zcN0BPsjvBq+5Ad47VJun+/IG4inPhk8ta0aEDK6LdP+F9299xa483w== 473 | 474 | esbuild-linux-ppc64le@0.13.13: 475 | version "0.13.13" 476 | resolved "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.13.tgz#7ec9048502de46754567e734aae7aebd2df6df02" 477 | integrity sha512-+rghW8st6/7O6QJqAjVK3eXzKkZqYAw6LgHv7yTMiJ6ASnNvghSeOcIvXFep3W2oaJc35SgSPf21Ugh0o777qQ== 478 | 479 | esbuild-netbsd-64@0.13.13: 480 | version "0.13.13" 481 | resolved "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.13.tgz#439bdaefffa03a8fa84324f5d83d636f548a2de3" 482 | integrity sha512-A/B7rwmzPdzF8c3mht5TukbnNwY5qMJqes09ou0RSzA5/jm7Jwl/8z853ofujTFOLhkNHUf002EAgokzSgEMpQ== 483 | 484 | esbuild-openbsd-64@0.13.13: 485 | version "0.13.13" 486 | resolved "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.13.tgz#c9958e5291a00a3090c1ec482d6bcdf2d5b5d107" 487 | integrity sha512-szwtuRA4rXKT3BbwoGpsff6G7nGxdKgUbW9LQo6nm0TVCCjDNDC/LXxT994duIW8Tyq04xZzzZSW7x7ttDiw1w== 488 | 489 | esbuild-sunos-64@0.13.13: 490 | version "0.13.13" 491 | resolved "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.13.tgz#ac9ead8287379cd2f6d00bd38c5997fda9c1179e" 492 | integrity sha512-ihyds9O48tVOYF48iaHYUK/boU5zRaLOXFS+OOL3ceD39AyHo46HVmsJLc7A2ez0AxNZCxuhu+P9OxfPfycTYQ== 493 | 494 | esbuild-windows-32@0.13.13: 495 | version "0.13.13" 496 | resolved "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.13.tgz#a3820fc86631ca594cb7b348514b5cc3f058cfd6" 497 | integrity sha512-h2RTYwpG4ldGVJlbmORObmilzL8EECy8BFiF8trWE1ZPHLpECE9//J3Bi+W3eDUuv/TqUbiNpGrq4t/odbayUw== 498 | 499 | esbuild-windows-64@0.13.13: 500 | version "0.13.13" 501 | resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.13.tgz#1da748441f228d75dff474ddb7d584b81887323c" 502 | integrity sha512-oMrgjP4CjONvDHe7IZXHrMk3wX5Lof/IwFEIbwbhgbXGBaN2dke9PkViTiXC3zGJSGpMvATXVplEhlInJ0drHA== 503 | 504 | esbuild-windows-arm64@0.13.13: 505 | version "0.13.13" 506 | resolved "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.13.tgz#06dfa52a6b178a5932a9a6e2fdb240c09e6da30c" 507 | integrity sha512-6fsDfTuTvltYB5k+QPah/x7LrI2+OLAJLE3bWLDiZI6E8wXMQU+wLqtEO/U/RvJgVY1loPs5eMpUBpVajczh1A== 508 | 509 | esbuild@^0.13.2: 510 | version "0.13.13" 511 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.13.13.tgz#0b5399c20f219f663c8c1048436fb0f59ab17a41" 512 | integrity sha512-Z17A/R6D0b4s3MousytQ/5i7mTCbaF+Ua/yPfoe71vdTv4KBvVAvQ/6ytMngM2DwGJosl8WxaD75NOQl2QF26Q== 513 | optionalDependencies: 514 | esbuild-android-arm64 "0.13.13" 515 | esbuild-darwin-64 "0.13.13" 516 | esbuild-darwin-arm64 "0.13.13" 517 | esbuild-freebsd-64 "0.13.13" 518 | esbuild-freebsd-arm64 "0.13.13" 519 | esbuild-linux-32 "0.13.13" 520 | esbuild-linux-64 "0.13.13" 521 | esbuild-linux-arm "0.13.13" 522 | esbuild-linux-arm64 "0.13.13" 523 | esbuild-linux-mips64le "0.13.13" 524 | esbuild-linux-ppc64le "0.13.13" 525 | esbuild-netbsd-64 "0.13.13" 526 | esbuild-openbsd-64 "0.13.13" 527 | esbuild-sunos-64 "0.13.13" 528 | esbuild-windows-32 "0.13.13" 529 | esbuild-windows-64 "0.13.13" 530 | esbuild-windows-arm64 "0.13.13" 531 | 532 | escalade@^3.1.1: 533 | version "3.1.1" 534 | resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 535 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 536 | 537 | escape-string-regexp@^1.0.5: 538 | version "1.0.5" 539 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 540 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 541 | 542 | estree-walker@^2.0.1: 543 | version "2.0.2" 544 | resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 545 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 546 | 547 | fsevents@~2.3.2: 548 | version "2.3.2" 549 | resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 550 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 551 | 552 | function-bind@^1.1.1: 553 | version "1.1.1" 554 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 555 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 556 | 557 | gensync@^1.0.0-beta.2: 558 | version "1.0.0-beta.2" 559 | resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 560 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 561 | 562 | globals@^11.1.0: 563 | version "11.12.0" 564 | resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 565 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 566 | 567 | has-flag@^3.0.0: 568 | version "3.0.0" 569 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 570 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 571 | 572 | has@^1.0.3: 573 | version "1.0.3" 574 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 575 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 576 | dependencies: 577 | function-bind "^1.1.1" 578 | 579 | import-fresh@^3.2.1: 580 | version "3.3.0" 581 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 582 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 583 | dependencies: 584 | parent-module "^1.0.0" 585 | resolve-from "^4.0.0" 586 | 587 | is-arrayish@^0.2.1: 588 | version "0.2.1" 589 | resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 590 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 591 | 592 | is-core-module@^2.2.0: 593 | version "2.8.0" 594 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" 595 | integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== 596 | dependencies: 597 | has "^1.0.3" 598 | 599 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 600 | version "4.0.0" 601 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 602 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 603 | 604 | jsesc@^2.5.1: 605 | version "2.5.2" 606 | resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 607 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 608 | 609 | json-parse-even-better-errors@^2.3.0: 610 | version "2.3.1" 611 | resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 612 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 613 | 614 | json5@^2.1.2: 615 | version "2.2.0" 616 | resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" 617 | integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== 618 | dependencies: 619 | minimist "^1.2.5" 620 | 621 | lines-and-columns@^1.1.6: 622 | version "1.1.6" 623 | resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" 624 | integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= 625 | 626 | loose-envify@^1.1.0, loose-envify@^1.4.0: 627 | version "1.4.0" 628 | resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 629 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 630 | dependencies: 631 | js-tokens "^3.0.0 || ^4.0.0" 632 | 633 | minimist@^1.2.5: 634 | version "1.2.5" 635 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 636 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 637 | 638 | ms@2.1.2: 639 | version "2.1.2" 640 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 641 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 642 | 643 | nanoid@^3.1.30: 644 | version "3.1.30" 645 | resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" 646 | integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== 647 | 648 | node-releases@^2.0.1: 649 | version "2.0.1" 650 | resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" 651 | integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== 652 | 653 | object-assign@^4.1.1: 654 | version "4.1.1" 655 | resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 656 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 657 | 658 | parent-module@^1.0.0: 659 | version "1.0.1" 660 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 661 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 662 | dependencies: 663 | callsites "^3.0.0" 664 | 665 | parse-json@^5.0.0: 666 | version "5.2.0" 667 | resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 668 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 669 | dependencies: 670 | "@babel/code-frame" "^7.0.0" 671 | error-ex "^1.3.1" 672 | json-parse-even-better-errors "^2.3.0" 673 | lines-and-columns "^1.1.6" 674 | 675 | path-parse@^1.0.6: 676 | version "1.0.7" 677 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 678 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 679 | 680 | path-type@^4.0.0: 681 | version "4.0.0" 682 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 683 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 684 | 685 | picocolors@^1.0.0: 686 | version "1.0.0" 687 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 688 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 689 | 690 | picomatch@^2.2.2: 691 | version "2.3.0" 692 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 693 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 694 | 695 | postcss@^8.3.8: 696 | version "8.3.11" 697 | resolved "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz#c3beca7ea811cd5e1c4a3ec6d2e7599ef1f8f858" 698 | integrity sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA== 699 | dependencies: 700 | nanoid "^3.1.30" 701 | picocolors "^1.0.0" 702 | source-map-js "^0.6.2" 703 | 704 | prop-types@^15.6.2: 705 | version "15.7.2" 706 | resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 707 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 708 | dependencies: 709 | loose-envify "^1.4.0" 710 | object-assign "^4.1.1" 711 | react-is "^16.8.1" 712 | 713 | react-dom@^16.13.1: 714 | version "16.14.0" 715 | resolved "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" 716 | integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== 717 | dependencies: 718 | loose-envify "^1.1.0" 719 | object-assign "^4.1.1" 720 | prop-types "^15.6.2" 721 | scheduler "^0.19.1" 722 | 723 | react-is@^16.8.1: 724 | version "16.13.1" 725 | resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 726 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 727 | 728 | react-refresh@^0.10.0: 729 | version "0.10.0" 730 | resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.10.0.tgz#2f536c9660c0b9b1d500684d9e52a65e7404f7e3" 731 | integrity sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ== 732 | 733 | react@^16.13.1: 734 | version "16.14.0" 735 | resolved "https://registry.npmjs.org/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" 736 | integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== 737 | dependencies: 738 | loose-envify "^1.1.0" 739 | object-assign "^4.1.1" 740 | prop-types "^15.6.2" 741 | 742 | resolve-from@^4.0.0: 743 | version "4.0.0" 744 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 745 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 746 | 747 | resolve@^1.20.0: 748 | version "1.20.0" 749 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 750 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 751 | dependencies: 752 | is-core-module "^2.2.0" 753 | path-parse "^1.0.6" 754 | 755 | rollup@^2.57.0: 756 | version "2.59.0" 757 | resolved "https://registry.npmjs.org/rollup/-/rollup-2.59.0.tgz#108c61b0fa0a37ebc8d1f164f281622056f0db59" 758 | integrity sha512-l7s90JQhCQ6JyZjKgo7Lq1dKh2RxatOM+Jr6a9F7WbS9WgKbocyUSeLmZl8evAse7y96Ae98L2k1cBOwWD8nHw== 759 | optionalDependencies: 760 | fsevents "~2.3.2" 761 | 762 | safe-buffer@~5.1.1: 763 | version "5.1.2" 764 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 765 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 766 | 767 | scheduler@^0.19.1: 768 | version "0.19.1" 769 | resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" 770 | integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== 771 | dependencies: 772 | loose-envify "^1.1.0" 773 | object-assign "^4.1.1" 774 | 775 | semver@^6.3.0: 776 | version "6.3.0" 777 | resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 778 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 779 | 780 | source-map-js@^0.6.2: 781 | version "0.6.2" 782 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" 783 | integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== 784 | 785 | source-map@^0.5.0: 786 | version "0.5.7" 787 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 788 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 789 | 790 | supports-color@^5.3.0: 791 | version "5.5.0" 792 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 793 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 794 | dependencies: 795 | has-flag "^3.0.0" 796 | 797 | svg-parser@^2.0.2: 798 | version "2.0.4" 799 | resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" 800 | integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== 801 | 802 | to-fast-properties@^2.0.0: 803 | version "2.0.0" 804 | resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 805 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 806 | 807 | vite-plugin-svgr@^0.5.1: 808 | version "0.5.1" 809 | resolved "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-0.5.1.tgz#bc00035d9fce4f07c9a085013c51b428a838e604" 810 | integrity sha512-KSKkQ4lrCqB9Ac1k8yvXJV/ivqOrWl8jzqgiLAV1eLFCaz4MfiBUO3vF5eGyfqicQEx7GpIWERsFAmnswZL8Aw== 811 | dependencies: 812 | "@svgr/core" "^6.0.0-alpha.2" 813 | 814 | vite@^2.6.14: 815 | version "2.6.14" 816 | resolved "https://registry.npmjs.org/vite/-/vite-2.6.14.tgz#35c09a15e4df823410819a2a239ab11efb186271" 817 | integrity sha512-2HA9xGyi+EhY2MXo0+A2dRsqsAG3eFNEVIo12olkWhOmc8LfiM+eMdrXf+Ruje9gdXgvSqjLI9freec1RUM5EA== 818 | dependencies: 819 | esbuild "^0.13.2" 820 | postcss "^8.3.8" 821 | resolve "^1.20.0" 822 | rollup "^2.57.0" 823 | optionalDependencies: 824 | fsevents "~2.3.2" 825 | 826 | yaml@^1.10.0: 827 | version "1.10.2" 828 | resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" 829 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 830 | --------------------------------------------------------------------------------