├── src ├── index.css ├── HooksApp.jsx ├── hooks │ ├── index.js │ ├── useForm.js │ ├── useCounter.js │ └── useFetch.js ├── 03-examples │ ├── index.js │ ├── LoadingQuote.jsx │ ├── Quote.jsx │ └── MultipleCustomHooks.jsx ├── 06-memos │ ├── Small.jsx │ ├── ShowIncrement.jsx │ ├── CallbackHook.jsx │ ├── Memorize.jsx │ └── MemoHook.jsx ├── 07-tarea-memo │ ├── Hijo.jsx │ └── Padre.jsx ├── 01-useState │ ├── CounterWithCustomHook.jsx │ └── CounterApp.jsx ├── 02-useEffect │ ├── Message.jsx │ ├── FormWithCustomHook.jsx │ └── SimpleForm.jsx ├── 04-useRef │ └── FocusScreen.jsx ├── 05-useLayoutEffect │ └── Layout.jsx └── main.jsx ├── vite.config.js ├── .gitignore ├── package.json ├── index.html └── yarn.lock /src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 20px; 3 | } 4 | 5 | button { 6 | margin-right: 10px; 7 | } -------------------------------------------------------------------------------- /src/HooksApp.jsx: -------------------------------------------------------------------------------- 1 | 2 | export const HooksApp = () => { 3 | return ( 4 |

HooksApp

5 | ) 6 | } 7 | -------------------------------------------------------------------------------- /src/hooks/index.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | export * from './useCounter'; 4 | export * from './useFetch'; 5 | export * from './useForm'; -------------------------------------------------------------------------------- /src/03-examples/index.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | export * from './LoadingQuote'; 4 | export * from './MultipleCustomHooks'; 5 | export * from './Quote'; -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()] 7 | }) 8 | -------------------------------------------------------------------------------- /src/03-examples/LoadingQuote.jsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | export const LoadingQuote = () => { 4 | return ( 5 |
6 | Loading... 7 |
8 | ) 9 | } 10 | -------------------------------------------------------------------------------- /src/06-memos/Small.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | // import { memo } from 'react'; 3 | 4 | export const Small = React.memo(({ value }) => { 5 | 6 | console.log(' Me volví a dibujar :( '); 7 | 8 | return ( 9 | { value } 10 | ) 11 | }) 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /src/07-tarea-memo/Hijo.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export const Hijo = React.memo(({ numero, incrementar }) => { 4 | 5 | console.log(' Me volví a generar :( '); 6 | 7 | return ( 8 | 14 | ) 15 | }) 16 | -------------------------------------------------------------------------------- /src/06-memos/ShowIncrement.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | 4 | export const ShowIncrement = React.memo( ({ increment }) => { 5 | 6 | console.log(' Me volví a generar :( '); 7 | 8 | return ( 9 | 17 | ) 18 | }) 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hook-app", 3 | "private": true, 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "vite build", 8 | "preview": "vite preview" 9 | }, 10 | "dependencies": { 11 | "react": "19.0.0", 12 | "react-dom": "19.0.0" 13 | }, 14 | "devDependencies": { 15 | "@types/react": "^18.0.0", 16 | "@types/react-dom": "^18.0.0", 17 | "@vitejs/plugin-react": "^1.3.0", 18 | "vite": "^2.9.5" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | HookApp 10 | 11 | 12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/hooks/useForm.js: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | export const useForm = ( initialForm = {} ) => { 4 | 5 | const [ formState, setFormState ] = useState( initialForm ); 6 | 7 | const onInputChange = ({ target }) => { 8 | const { name, value } = target; 9 | setFormState({ 10 | ...formState, 11 | [ name ]: value 12 | }); 13 | } 14 | 15 | const onResetForm = () => { 16 | setFormState( initialForm ); 17 | } 18 | 19 | return { 20 | ...formState, 21 | formState, 22 | onInputChange, 23 | onResetForm, 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/01-useState/CounterWithCustomHook.jsx: -------------------------------------------------------------------------------- 1 | import { useCounter } from '../hooks/useCounter'; 2 | 3 | export const CounterWithCustomHook = () => { 4 | 5 | const { counter, increment, decrement, reset } = useCounter(); 6 | 7 | 8 | return ( 9 | <> 10 |

Counter with Hook: { counter }

11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /src/hooks/useCounter.js: -------------------------------------------------------------------------------- 1 | import { useState } from "react" 2 | 3 | 4 | export const useCounter = ( initialValue = 10 ) => { 5 | 6 | const [ counter, setCounter ] = useState( initialValue ) 7 | 8 | const increment = ( value = 1 ) => { 9 | setCounter( counter + value ); 10 | } 11 | 12 | const decrement = ( value = 1 ) => { 13 | // if ( counter === 0 ) return; 14 | 15 | setCounter( counter - value ); 16 | } 17 | 18 | const reset = () => { 19 | setCounter( initialValue ); 20 | } 21 | 22 | return { 23 | counter, 24 | increment, 25 | decrement, 26 | reset, 27 | } 28 | 29 | } 30 | 31 | -------------------------------------------------------------------------------- /src/02-useEffect/Message.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react" 2 | 3 | export const Message = () => { 4 | 5 | const [coords, setCoords] = useState({ x: 0, y: 0}); 6 | 7 | useEffect(() => { 8 | 9 | const onMouseMove = ({ x, y }) => { 10 | // const coords = { x, y }; 11 | setCoords({ x, y }) 12 | } 13 | 14 | window.addEventListener( 'mousemove', onMouseMove ); 15 | 16 | return () => { 17 | window.removeEventListener( 'mousemove', onMouseMove ); 18 | } 19 | }, []); 20 | 21 | 22 | 23 | return ( 24 | <> 25 |

Usuario ya existe

26 | { JSON.stringify( coords ) } 27 | 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /src/01-useState/CounterApp.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | 3 | export const CounterApp = () => { 4 | 5 | const [ state, setCounter] = useState({ 6 | counter1: 10, 7 | counter2: 20, 8 | counter3: 30, 9 | }); 10 | 11 | const { counter1, counter2, counter3 } = state; 12 | 13 | return ( 14 | <> 15 |

Counter1: { counter1 }

16 |

Counter2: { counter2 }

17 |

Counter3: { counter3 }

18 | 19 |
20 | 21 | 29 | 30 | 31 | ) 32 | } 33 | -------------------------------------------------------------------------------- /src/04-useRef/FocusScreen.jsx: -------------------------------------------------------------------------------- 1 | import { useRef } from 'react'; 2 | 3 | export const FocusScreen = () => { 4 | 5 | const inputRef = useRef(); 6 | 7 | const onClick = () => { 8 | // document.querySelector('input').select(); 9 | // console.log(inputRef); 10 | inputRef.current.select(); 11 | } 12 | 13 | 14 | return ( 15 | <> 16 |

Focus Screen

17 |
18 | 19 | 25 | 26 | 32 | 33 | 34 | ) 35 | } 36 | -------------------------------------------------------------------------------- /src/03-examples/Quote.jsx: -------------------------------------------------------------------------------- 1 | import { useLayoutEffect, useRef, useState } from 'react'; 2 | 3 | 4 | export const Quote = ({ author, quote }) => { 5 | 6 | const pRef = useRef(); 7 | const [boxSize, setBoxSize] = useState({ width: 0, height: 0 }) 8 | 9 | useLayoutEffect(() => { 10 | 11 | const { height, width } = pRef.current.getBoundingClientRect(); 12 | setBoxSize({ height, width }); 13 | 14 | }, [quote]) 15 | 16 | 17 | 18 | return ( 19 | <> 20 |
24 |

{ quote }

25 | 26 |
27 | 28 | { JSON.stringify(boxSize) } 29 | 30 | ) 31 | } 32 | -------------------------------------------------------------------------------- /src/06-memos/CallbackHook.jsx: -------------------------------------------------------------------------------- 1 | import { useCallback, useEffect, useState } from 'react'; 2 | import { ShowIncrement } from './ShowIncrement'; 3 | 4 | 5 | export const CallbackHook = () => { 6 | 7 | const [counter, setCounter] = useState( 10 ); 8 | 9 | const incrementFather = useCallback( 10 | (value) => { 11 | setCounter( (c) => c + value ); 12 | }, 13 | [], 14 | ); 15 | 16 | useEffect(() => { 17 | // incrementFather(); 18 | }, [incrementFather]) 19 | 20 | 21 | // const incrementFather = () => { 22 | // setCounter( counter + 1); 23 | // } 24 | 25 | 26 | return ( 27 | <> 28 |

useCallback Hook: { counter }

29 |
30 | 31 | 32 | 33 | ) 34 | } 35 | -------------------------------------------------------------------------------- /src/06-memos/Memorize.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | import { useCounter } from '../hooks' 3 | import { Small } from './Small'; 4 | 5 | export const Memorize = () => { 6 | 7 | const { counter, increment } = useCounter( 10 ); 8 | const [ show, setShow ] = useState(true) 9 | 10 | return ( 11 | <> 12 |

Counter:

13 |
14 | 15 | 21 | 22 | 28 | 29 | 30 | ) 31 | } 32 | -------------------------------------------------------------------------------- /src/hooks/useFetch.js: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | 3 | 4 | export const useFetch = ( url ) => { 5 | 6 | const [state, setState] = useState({ 7 | data: null, 8 | isLoading: true, 9 | hasError: null, 10 | }) 11 | 12 | 13 | const getFetch = async () => { 14 | 15 | setState({ 16 | ...state, 17 | isLoading: true, 18 | }); 19 | 20 | const resp = await fetch(url); 21 | const data = await resp.json(); 22 | 23 | setState({ 24 | data, 25 | isLoading: false, 26 | hasError: null, 27 | }); 28 | } 29 | 30 | 31 | useEffect(() => { 32 | getFetch(); 33 | }, [url]) 34 | 35 | 36 | 37 | return { 38 | data: state.data, 39 | isLoading: state.isLoading, 40 | hasError: state.hasError, 41 | }; 42 | } 43 | -------------------------------------------------------------------------------- /src/07-tarea-memo/Padre.jsx: -------------------------------------------------------------------------------- 1 | import { Hijo } from './Hijo' 2 | import { useCallback, useState } from 'react'; 3 | 4 | export const Padre = () => { 5 | 6 | const numeros = [2,4,6,8,10]; 7 | const [valor, setValor] = useState(0); 8 | 9 | const incrementar = useCallback( 10 | ( num ) => { 11 | setValor( (oldValue) => oldValue + num ) 12 | }, 13 | [], 14 | ); 15 | 16 | 17 | 18 | return ( 19 |
20 |

Padre

21 |

Total: { valor }

22 | 23 |
24 | 25 | { 26 | numeros.map( n => ( 27 | 32 | )) 33 | } 34 | {/* */} 35 |
36 | ) 37 | } 38 | -------------------------------------------------------------------------------- /src/05-useLayoutEffect/Layout.jsx: -------------------------------------------------------------------------------- 1 | import { useCounter, useFetch } from '../hooks'; 2 | import { LoadingQuote, Quote } from '../03-examples'; 3 | 4 | 5 | export const Layout = () => { 6 | 7 | const { counter, increment } = useCounter(1); 8 | const { data, isLoading, hasError } = useFetch(`https://www.breakingbadapi.com/api/quotes/${ counter }`); 9 | const { author, quote } = !!data && data[0]; 10 | 11 | return ( 12 | <> 13 |

BreakingBad Quotes

14 |
15 | 16 | { 17 | isLoading 18 | ? 19 | : 20 | } 21 | 22 | 28 | 29 | 30 | ) 31 | } 32 | -------------------------------------------------------------------------------- /src/03-examples/MultipleCustomHooks.jsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | import { useCounter, useFetch } from '../hooks'; 4 | import { LoadingQuote, Quote } from './'; 5 | 6 | 7 | export const MultipleCustomHooks = () => { 8 | 9 | const { counter, increment } = useCounter(1); 10 | const { data, isLoading, hasError } = useFetch(`https://www.breakingbadapi.com/api/quotes/${ counter }`); 11 | const { author, quote } = !!data && data[0]; 12 | 13 | return ( 14 | <> 15 |

BreakingBad Quotes

16 |
17 | 18 | { 19 | isLoading 20 | ? 21 | : 22 | } 23 | 24 | 30 | 31 | 32 | ) 33 | } 34 | -------------------------------------------------------------------------------- /src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | 4 | 5 | // import { HooksApp } from './HooksApp'; 6 | // import { CounterApp } from './01-useState/CounterApp'; 7 | // import { CounterWithCustomHook } from './01-useState/CounterWithCustomHook'; 8 | // import { SimpleForm } from './02-useEffect/SimpleForm'; 9 | // import { FormWithCustomHook } from './02-useEffect/FormWithCustomHook'; 10 | // import { MultipleCustomHooks } from './03-examples/MultipleCustomHooks'; 11 | // import { FocusScreen } from './04-useRef/FocusScreen'; 12 | // import { Layout } from './05-useLayoutEffect/Layout'; 13 | // import { Memorize } from './06-memos/Memorize'; 14 | // import { MemoHook } from './06-memos/MemoHook'; 15 | // import { CallbackHook } from './06-memos/CallbackHook'; 16 | import { Padre } from './07-tarea-memo/Padre'; 17 | 18 | 19 | import './index.css' 20 | 21 | ReactDOM.createRoot(document.getElementById('root')).render( 22 | // 23 | 24 | // 25 | ) 26 | -------------------------------------------------------------------------------- /src/06-memos/MemoHook.jsx: -------------------------------------------------------------------------------- 1 | import { useMemo, useState } from 'react'; 2 | import { useCounter } from '../hooks'; 3 | 4 | 5 | const heavyStuff = ( iterationNumber = 100 ) => { 6 | for( let i = 0; i < iterationNumber; i++ ) { 7 | console.log('Ahí vamos...'); 8 | } 9 | 10 | return `${ iterationNumber } iteraciones realizadas`; 11 | } 12 | 13 | 14 | 15 | export const MemoHook = () => { 16 | 17 | const { counter, increment } = useCounter( 4000 ); 18 | const [ show, setShow ] = useState(true); 19 | 20 | const memorizedValue = useMemo( () => heavyStuff(counter), [counter]) 21 | 22 | return ( 23 | <> 24 |

Counter: { counter }

25 |
26 | 27 |

{ memorizedValue }

28 | 29 | 30 | 36 | 37 | 43 | 44 | 45 | ) 46 | } 47 | -------------------------------------------------------------------------------- /src/02-useEffect/FormWithCustomHook.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react'; 2 | import { useForm } from '../hooks/useForm'; 3 | 4 | 5 | export const FormWithCustomHook = () => { 6 | 7 | const { formState, onInputChange, onResetForm, username, email, password } = useForm({ 8 | username: '', 9 | email: '', 10 | password: '' 11 | }); 12 | 13 | // const { username, email, password } = formState; 14 | 15 | 16 | return ( 17 | <> 18 |

Formulario con custom Hook

19 |
20 | 21 | 29 | 30 | 38 | 39 | 47 | 48 | 49 | 50 | 51 | 52 | ) 53 | } 54 | -------------------------------------------------------------------------------- /src/02-useEffect/SimpleForm.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react'; 2 | import { Message } from './Message'; 3 | 4 | 5 | export const SimpleForm = () => { 6 | 7 | const [formState, setFormState] = useState({ 8 | username: 'strider', 9 | email: 'fernando@google.com' 10 | }); 11 | 12 | const { username, email } = formState; 13 | 14 | const onInputChange = ({ target }) => { 15 | const { name, value } = target; 16 | setFormState({ 17 | ...formState, 18 | [ name ]: value 19 | }); 20 | } 21 | 22 | 23 | useEffect( () => { 24 | // console.log('useEffect called!'); 25 | }, []); 26 | 27 | useEffect( () => { 28 | // console.log('formState changed!'); 29 | }, [formState]); 30 | 31 | useEffect( () => { 32 | // console.log('email changed!'); 33 | }, [ email ]); 34 | 35 | 36 | 37 | return ( 38 | <> 39 |

Formulario Simple

40 |
41 | 42 | 50 | 51 | 59 | 60 | 61 | { 62 | (username === 'strider2' ) && 63 | } 64 | 65 | 66 | ) 67 | } 68 | -------------------------------------------------------------------------------- /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.2.0" 7 | resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" 8 | integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.1.0" 11 | "@jridgewell/trace-mapping" "^0.3.9" 12 | 13 | "@babel/code-frame@^7.16.7": 14 | version "7.16.7" 15 | resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz" 16 | integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== 17 | dependencies: 18 | "@babel/highlight" "^7.16.7" 19 | 20 | "@babel/compat-data@^7.17.7": 21 | version "7.17.7" 22 | resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz" 23 | integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== 24 | 25 | "@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.17.9": 26 | version "7.17.9" 27 | resolved "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz" 28 | integrity sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw== 29 | dependencies: 30 | "@ampproject/remapping" "^2.1.0" 31 | "@babel/code-frame" "^7.16.7" 32 | "@babel/generator" "^7.17.9" 33 | "@babel/helper-compilation-targets" "^7.17.7" 34 | "@babel/helper-module-transforms" "^7.17.7" 35 | "@babel/helpers" "^7.17.9" 36 | "@babel/parser" "^7.17.9" 37 | "@babel/template" "^7.16.7" 38 | "@babel/traverse" "^7.17.9" 39 | "@babel/types" "^7.17.0" 40 | convert-source-map "^1.7.0" 41 | debug "^4.1.0" 42 | gensync "^1.0.0-beta.2" 43 | json5 "^2.2.1" 44 | semver "^6.3.0" 45 | 46 | "@babel/generator@^7.17.9": 47 | version "7.17.9" 48 | resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz" 49 | integrity sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ== 50 | dependencies: 51 | "@babel/types" "^7.17.0" 52 | jsesc "^2.5.1" 53 | source-map "^0.5.0" 54 | 55 | "@babel/helper-annotate-as-pure@^7.16.7": 56 | version "7.16.7" 57 | resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz" 58 | integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== 59 | dependencies: 60 | "@babel/types" "^7.16.7" 61 | 62 | "@babel/helper-compilation-targets@^7.17.7": 63 | version "7.17.7" 64 | resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz" 65 | integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== 66 | dependencies: 67 | "@babel/compat-data" "^7.17.7" 68 | "@babel/helper-validator-option" "^7.16.7" 69 | browserslist "^4.17.5" 70 | semver "^6.3.0" 71 | 72 | "@babel/helper-environment-visitor@^7.16.7": 73 | version "7.16.7" 74 | resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz" 75 | integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== 76 | dependencies: 77 | "@babel/types" "^7.16.7" 78 | 79 | "@babel/helper-function-name@^7.17.9": 80 | version "7.17.9" 81 | resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz" 82 | integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== 83 | dependencies: 84 | "@babel/template" "^7.16.7" 85 | "@babel/types" "^7.17.0" 86 | 87 | "@babel/helper-hoist-variables@^7.16.7": 88 | version "7.16.7" 89 | resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz" 90 | integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== 91 | dependencies: 92 | "@babel/types" "^7.16.7" 93 | 94 | "@babel/helper-module-imports@^7.16.7": 95 | version "7.16.7" 96 | resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz" 97 | integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== 98 | dependencies: 99 | "@babel/types" "^7.16.7" 100 | 101 | "@babel/helper-module-transforms@^7.17.7": 102 | version "7.17.7" 103 | resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz" 104 | integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== 105 | dependencies: 106 | "@babel/helper-environment-visitor" "^7.16.7" 107 | "@babel/helper-module-imports" "^7.16.7" 108 | "@babel/helper-simple-access" "^7.17.7" 109 | "@babel/helper-split-export-declaration" "^7.16.7" 110 | "@babel/helper-validator-identifier" "^7.16.7" 111 | "@babel/template" "^7.16.7" 112 | "@babel/traverse" "^7.17.3" 113 | "@babel/types" "^7.17.0" 114 | 115 | "@babel/helper-plugin-utils@^7.16.7": 116 | version "7.16.7" 117 | resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz" 118 | integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== 119 | 120 | "@babel/helper-simple-access@^7.17.7": 121 | version "7.17.7" 122 | resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz" 123 | integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== 124 | dependencies: 125 | "@babel/types" "^7.17.0" 126 | 127 | "@babel/helper-split-export-declaration@^7.16.7": 128 | version "7.16.7" 129 | resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz" 130 | integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== 131 | dependencies: 132 | "@babel/types" "^7.16.7" 133 | 134 | "@babel/helper-validator-identifier@^7.16.7": 135 | version "7.16.7" 136 | resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz" 137 | integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== 138 | 139 | "@babel/helper-validator-option@^7.16.7": 140 | version "7.16.7" 141 | resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz" 142 | integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== 143 | 144 | "@babel/helpers@^7.17.9": 145 | version "7.17.9" 146 | resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz" 147 | integrity sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q== 148 | dependencies: 149 | "@babel/template" "^7.16.7" 150 | "@babel/traverse" "^7.17.9" 151 | "@babel/types" "^7.17.0" 152 | 153 | "@babel/highlight@^7.16.7": 154 | version "7.17.9" 155 | resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz" 156 | integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg== 157 | dependencies: 158 | "@babel/helper-validator-identifier" "^7.16.7" 159 | chalk "^2.0.0" 160 | js-tokens "^4.0.0" 161 | 162 | "@babel/parser@^7.16.7", "@babel/parser@^7.17.9": 163 | version "7.17.9" 164 | resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz" 165 | integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg== 166 | 167 | "@babel/plugin-syntax-jsx@^7.16.7": 168 | version "7.16.7" 169 | resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz" 170 | integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== 171 | dependencies: 172 | "@babel/helper-plugin-utils" "^7.16.7" 173 | 174 | "@babel/plugin-transform-react-jsx-development@^7.16.7": 175 | version "7.16.7" 176 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz" 177 | integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== 178 | dependencies: 179 | "@babel/plugin-transform-react-jsx" "^7.16.7" 180 | 181 | "@babel/plugin-transform-react-jsx-self@^7.16.7": 182 | version "7.16.7" 183 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz" 184 | integrity sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA== 185 | dependencies: 186 | "@babel/helper-plugin-utils" "^7.16.7" 187 | 188 | "@babel/plugin-transform-react-jsx-source@^7.16.7": 189 | version "7.16.7" 190 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz" 191 | integrity sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw== 192 | dependencies: 193 | "@babel/helper-plugin-utils" "^7.16.7" 194 | 195 | "@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.17.3": 196 | version "7.17.3" 197 | resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz" 198 | integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== 199 | dependencies: 200 | "@babel/helper-annotate-as-pure" "^7.16.7" 201 | "@babel/helper-module-imports" "^7.16.7" 202 | "@babel/helper-plugin-utils" "^7.16.7" 203 | "@babel/plugin-syntax-jsx" "^7.16.7" 204 | "@babel/types" "^7.17.0" 205 | 206 | "@babel/template@^7.16.7": 207 | version "7.16.7" 208 | resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz" 209 | integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== 210 | dependencies: 211 | "@babel/code-frame" "^7.16.7" 212 | "@babel/parser" "^7.16.7" 213 | "@babel/types" "^7.16.7" 214 | 215 | "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9": 216 | version "7.17.9" 217 | resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz" 218 | integrity sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw== 219 | dependencies: 220 | "@babel/code-frame" "^7.16.7" 221 | "@babel/generator" "^7.17.9" 222 | "@babel/helper-environment-visitor" "^7.16.7" 223 | "@babel/helper-function-name" "^7.17.9" 224 | "@babel/helper-hoist-variables" "^7.16.7" 225 | "@babel/helper-split-export-declaration" "^7.16.7" 226 | "@babel/parser" "^7.17.9" 227 | "@babel/types" "^7.17.0" 228 | debug "^4.1.0" 229 | globals "^11.1.0" 230 | 231 | "@babel/types@^7.16.7", "@babel/types@^7.17.0": 232 | version "7.17.0" 233 | resolved "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz" 234 | integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== 235 | dependencies: 236 | "@babel/helper-validator-identifier" "^7.16.7" 237 | to-fast-properties "^2.0.0" 238 | 239 | "@jridgewell/gen-mapping@^0.1.0": 240 | version "0.1.1" 241 | resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" 242 | integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== 243 | dependencies: 244 | "@jridgewell/set-array" "^1.0.0" 245 | "@jridgewell/sourcemap-codec" "^1.4.10" 246 | 247 | "@jridgewell/resolve-uri@^3.0.3": 248 | version "3.0.6" 249 | resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz" 250 | integrity sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw== 251 | 252 | "@jridgewell/set-array@^1.0.0": 253 | version "1.1.0" 254 | resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.0.tgz" 255 | integrity sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg== 256 | 257 | "@jridgewell/sourcemap-codec@^1.4.10": 258 | version "1.4.11" 259 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz" 260 | integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== 261 | 262 | "@jridgewell/trace-mapping@^0.3.9": 263 | version "0.3.9" 264 | resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" 265 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 266 | dependencies: 267 | "@jridgewell/resolve-uri" "^3.0.3" 268 | "@jridgewell/sourcemap-codec" "^1.4.10" 269 | 270 | "@rollup/pluginutils@^4.2.0": 271 | version "4.2.1" 272 | resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz" 273 | integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== 274 | dependencies: 275 | estree-walker "^2.0.1" 276 | picomatch "^2.2.2" 277 | 278 | "@types/prop-types@*": 279 | version "15.7.5" 280 | resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" 281 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== 282 | 283 | "@types/react-dom@^18.0.0": 284 | version "18.0.3" 285 | resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.3.tgz" 286 | integrity sha512-1RRW9kst+67gveJRYPxGmVy8eVJ05O43hg77G2j5m76/RFJtMbcfAs2viQ2UNsvvDg8F7OfQZx8qQcl6ymygaQ== 287 | dependencies: 288 | "@types/react" "*" 289 | 290 | "@types/react@*", "@types/react@^18.0.0": 291 | version "18.0.8" 292 | resolved "https://registry.npmjs.org/@types/react/-/react-18.0.8.tgz" 293 | integrity sha512-+j2hk9BzCOrrOSJASi5XiOyBbERk9jG5O73Ya4M0env5Ixi6vUNli4qy994AINcEF+1IEHISYFfIT4zwr++LKw== 294 | dependencies: 295 | "@types/prop-types" "*" 296 | "@types/scheduler" "*" 297 | csstype "^3.0.2" 298 | 299 | "@types/scheduler@*": 300 | version "0.16.2" 301 | resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" 302 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== 303 | 304 | "@vitejs/plugin-react@^1.3.0": 305 | version "1.3.1" 306 | resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.3.1.tgz" 307 | integrity sha512-qQS8Y2fZCjo5YmDUplEXl3yn+aueiwxB7BaoQ4nWYJYR+Ai8NXPVLlkLobVMs5+DeyFyg9Lrz6zCzdX1opcvyw== 308 | dependencies: 309 | "@babel/core" "^7.17.9" 310 | "@babel/plugin-transform-react-jsx" "^7.17.3" 311 | "@babel/plugin-transform-react-jsx-development" "^7.16.7" 312 | "@babel/plugin-transform-react-jsx-self" "^7.16.7" 313 | "@babel/plugin-transform-react-jsx-source" "^7.16.7" 314 | "@rollup/pluginutils" "^4.2.0" 315 | react-refresh "^0.12.0" 316 | resolve "^1.22.0" 317 | 318 | ansi-styles@^3.2.1: 319 | version "3.2.1" 320 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" 321 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 322 | dependencies: 323 | color-convert "^1.9.0" 324 | 325 | browserslist@^4.17.5: 326 | version "4.20.3" 327 | resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz" 328 | integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg== 329 | dependencies: 330 | caniuse-lite "^1.0.30001332" 331 | electron-to-chromium "^1.4.118" 332 | escalade "^3.1.1" 333 | node-releases "^2.0.3" 334 | picocolors "^1.0.0" 335 | 336 | caniuse-lite@^1.0.30001332: 337 | version "1.0.30001334" 338 | resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz" 339 | integrity sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw== 340 | 341 | chalk@^2.0.0: 342 | version "2.4.2" 343 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" 344 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 345 | dependencies: 346 | ansi-styles "^3.2.1" 347 | escape-string-regexp "^1.0.5" 348 | supports-color "^5.3.0" 349 | 350 | color-convert@^1.9.0: 351 | version "1.9.3" 352 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" 353 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 354 | dependencies: 355 | color-name "1.1.3" 356 | 357 | color-name@1.1.3: 358 | version "1.1.3" 359 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" 360 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 361 | 362 | convert-source-map@^1.7.0: 363 | version "1.8.0" 364 | resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" 365 | integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== 366 | dependencies: 367 | safe-buffer "~5.1.1" 368 | 369 | csstype@^3.0.2: 370 | version "3.0.11" 371 | resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz" 372 | integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== 373 | 374 | debug@^4.1.0: 375 | version "4.3.4" 376 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 377 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 378 | dependencies: 379 | ms "2.1.2" 380 | 381 | electron-to-chromium@^1.4.118: 382 | version "1.4.127" 383 | resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.127.tgz" 384 | integrity sha512-nhD6S8nKI0O2MueC6blNOEZio+/PWppE/pevnf3LOlQA/fKPCrDp2Ao4wx4LFwmIkJpVdFdn2763YWLy9ENIZg== 385 | 386 | esbuild-darwin-arm64@0.14.38: 387 | version "0.14.38" 388 | resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz" 389 | integrity sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ== 390 | 391 | esbuild@^0.14.27: 392 | version "0.14.38" 393 | resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.38.tgz" 394 | integrity sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA== 395 | optionalDependencies: 396 | esbuild-android-64 "0.14.38" 397 | esbuild-android-arm64 "0.14.38" 398 | esbuild-darwin-64 "0.14.38" 399 | esbuild-darwin-arm64 "0.14.38" 400 | esbuild-freebsd-64 "0.14.38" 401 | esbuild-freebsd-arm64 "0.14.38" 402 | esbuild-linux-32 "0.14.38" 403 | esbuild-linux-64 "0.14.38" 404 | esbuild-linux-arm "0.14.38" 405 | esbuild-linux-arm64 "0.14.38" 406 | esbuild-linux-mips64le "0.14.38" 407 | esbuild-linux-ppc64le "0.14.38" 408 | esbuild-linux-riscv64 "0.14.38" 409 | esbuild-linux-s390x "0.14.38" 410 | esbuild-netbsd-64 "0.14.38" 411 | esbuild-openbsd-64 "0.14.38" 412 | esbuild-sunos-64 "0.14.38" 413 | esbuild-windows-32 "0.14.38" 414 | esbuild-windows-64 "0.14.38" 415 | esbuild-windows-arm64 "0.14.38" 416 | 417 | escalade@^3.1.1: 418 | version "3.1.1" 419 | resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" 420 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 421 | 422 | escape-string-regexp@^1.0.5: 423 | version "1.0.5" 424 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 425 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 426 | 427 | estree-walker@^2.0.1: 428 | version "2.0.2" 429 | resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" 430 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 431 | 432 | fsevents@~2.3.2: 433 | version "2.3.2" 434 | resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" 435 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 436 | 437 | function-bind@^1.1.1: 438 | version "1.1.1" 439 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 440 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 441 | 442 | gensync@^1.0.0-beta.2: 443 | version "1.0.0-beta.2" 444 | resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" 445 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 446 | 447 | globals@^11.1.0: 448 | version "11.12.0" 449 | resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" 450 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 451 | 452 | has-flag@^3.0.0: 453 | version "3.0.0" 454 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" 455 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 456 | 457 | has@^1.0.3: 458 | version "1.0.3" 459 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 460 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 461 | dependencies: 462 | function-bind "^1.1.1" 463 | 464 | is-core-module@^2.8.1: 465 | version "2.9.0" 466 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz" 467 | integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== 468 | dependencies: 469 | has "^1.0.3" 470 | 471 | js-tokens@^4.0.0: 472 | version "4.0.0" 473 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" 474 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 475 | 476 | jsesc@^2.5.1: 477 | version "2.5.2" 478 | resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" 479 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 480 | 481 | json5@^2.2.1: 482 | version "2.2.1" 483 | resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" 484 | integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== 485 | 486 | ms@2.1.2: 487 | version "2.1.2" 488 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 489 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 490 | 491 | nanoid@^3.3.1: 492 | version "3.3.3" 493 | resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" 494 | integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== 495 | 496 | node-releases@^2.0.3: 497 | version "2.0.4" 498 | resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz" 499 | integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ== 500 | 501 | path-parse@^1.0.7: 502 | version "1.0.7" 503 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" 504 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 505 | 506 | picocolors@^1.0.0: 507 | version "1.0.0" 508 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" 509 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 510 | 511 | picomatch@^2.2.2: 512 | version "2.3.1" 513 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 514 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 515 | 516 | postcss@^8.4.12: 517 | version "8.4.12" 518 | resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz" 519 | integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg== 520 | dependencies: 521 | nanoid "^3.3.1" 522 | picocolors "^1.0.0" 523 | source-map-js "^1.0.2" 524 | 525 | react-dom@19.0.0: 526 | version "19.0.0" 527 | resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz" 528 | integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ== 529 | dependencies: 530 | scheduler "^0.25.0" 531 | 532 | react-refresh@^0.12.0: 533 | version "0.12.0" 534 | resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.12.0.tgz" 535 | integrity sha512-suLIhrU2IHKL5JEKR/fAwJv7bbeq4kJ+pJopf77jHwuR+HmJS/HbrPIGsTBUVfw7tXPOmYv7UJ7PCaN49e8x4A== 536 | 537 | react@^19.0.0, react@19.0.0: 538 | version "19.0.0" 539 | resolved "https://registry.npmjs.org/react/-/react-19.0.0.tgz" 540 | integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ== 541 | 542 | resolve@^1.22.0: 543 | version "1.22.0" 544 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz" 545 | integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== 546 | dependencies: 547 | is-core-module "^2.8.1" 548 | path-parse "^1.0.7" 549 | supports-preserve-symlinks-flag "^1.0.0" 550 | 551 | rollup@^2.59.0: 552 | version "2.70.2" 553 | resolved "https://registry.npmjs.org/rollup/-/rollup-2.70.2.tgz" 554 | integrity sha512-EitogNZnfku65I1DD5Mxe8JYRUCy0hkK5X84IlDtUs+O6JRMpRciXTzyCUuX11b5L5pvjH+OmFXiQ3XjabcXgg== 555 | optionalDependencies: 556 | fsevents "~2.3.2" 557 | 558 | safe-buffer@~5.1.1: 559 | version "5.1.2" 560 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" 561 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 562 | 563 | scheduler@^0.25.0: 564 | version "0.25.0" 565 | resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz" 566 | integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== 567 | 568 | semver@^6.3.0: 569 | version "6.3.0" 570 | resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" 571 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 572 | 573 | source-map-js@^1.0.2: 574 | version "1.0.2" 575 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" 576 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 577 | 578 | source-map@^0.5.0: 579 | version "0.5.7" 580 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" 581 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== 582 | 583 | supports-color@^5.3.0: 584 | version "5.5.0" 585 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" 586 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 587 | dependencies: 588 | has-flag "^3.0.0" 589 | 590 | supports-preserve-symlinks-flag@^1.0.0: 591 | version "1.0.0" 592 | resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" 593 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 594 | 595 | to-fast-properties@^2.0.0: 596 | version "2.0.0" 597 | resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" 598 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 599 | 600 | vite@^2.9.5: 601 | version "2.9.6" 602 | resolved "https://registry.npmjs.org/vite/-/vite-2.9.6.tgz" 603 | integrity sha512-3IffdrByHW95Yjv0a13TQOQfJs7L5dVlSPuTt432XLbRMriWbThqJN2k/IS6kXn5WY4xBLhK9XoaWay1B8VzUw== 604 | dependencies: 605 | esbuild "^0.14.27" 606 | postcss "^8.4.12" 607 | resolve "^1.22.0" 608 | rollup "^2.59.0" 609 | optionalDependencies: 610 | fsevents "~2.3.2" 611 | --------------------------------------------------------------------------------