├── src ├── constants.ts ├── images │ ├── sad.jpg │ ├── denis.jpg │ ├── cest-nul.jpg │ ├── elevator.jpg │ ├── travail.jpg │ └── index.ts ├── component │ ├── Row.tsx │ ├── StreamDeck.tsx │ ├── buttons │ │ ├── Buttons.tsx │ │ ├── Button.tsx │ │ ├── SceneSwitcher.tsx │ │ └── Sounds.tsx │ ├── RefreshButton.tsx │ ├── Icon.tsx │ └── OBSProvider.tsx ├── utils │ ├── hooks.ts │ ├── crypto.ts │ └── EventEmitter.ts ├── obs │ ├── types.ts │ └── OBSWebsocket.ts ├── main.tsx └── main.css ├── .gitignore ├── screenshot.png ├── vite.config.ts ├── tsconfig.json ├── index.html ├── package.json ├── README.md ├── yarn.lock └── pnpm-lock.yaml /src/constants.ts: -------------------------------------------------------------------------------- 1 | export const hiddenScene = "📦"; 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local 6 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Grafikart/WebDeckOBS/HEAD/screenshot.png -------------------------------------------------------------------------------- /src/images/sad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Grafikart/WebDeckOBS/HEAD/src/images/sad.jpg -------------------------------------------------------------------------------- /src/images/denis.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Grafikart/WebDeckOBS/HEAD/src/images/denis.jpg -------------------------------------------------------------------------------- /src/images/cest-nul.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Grafikart/WebDeckOBS/HEAD/src/images/cest-nul.jpg -------------------------------------------------------------------------------- /src/images/elevator.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Grafikart/WebDeckOBS/HEAD/src/images/elevator.jpg -------------------------------------------------------------------------------- /src/images/travail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Grafikart/WebDeckOBS/HEAD/src/images/travail.jpg -------------------------------------------------------------------------------- /src/component/Row.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | 3 | export function Row({ children }: { children: ReactNode }) { 4 | return
{children}
; 5 | } 6 | -------------------------------------------------------------------------------- /src/utils/hooks.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | 3 | export function useAsyncEffect(callback: Function, deps = []) { 4 | useEffect(() => { 5 | callback(); 6 | }, deps); 7 | } 8 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import reactRefresh from "@vitejs/plugin-react-refresh"; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [reactRefresh()], 7 | base: "", 8 | }); 9 | -------------------------------------------------------------------------------- /src/component/StreamDeck.tsx: -------------------------------------------------------------------------------- 1 | import React, { Children, ReactNode } from "react"; 2 | 3 | export function StreamDeck({children}: {children: ReactNode}) { 4 | return ( 5 |
6 | {children} 7 |
8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /src/component/buttons/Buttons.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | 3 | export function Buttons({ children }: { children: ReactNode }) { 4 | const childrenLength = React.Children.toArray(children).length; 5 | const style = { 6 | ["--columns"]: childrenLength.toString(), 7 | } as React.CSSProperties; 8 | return ( 9 |
10 | {children} 11 |
12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /src/images/index.ts: -------------------------------------------------------------------------------- 1 | import nulImage from "./cest-nul.jpg"; 2 | import travailImage from "./travail.jpg"; 3 | import Denis from "./denis.jpg"; 4 | import Sad from "./sad.jpg"; 5 | import Elevator from "./elevator.jpg"; 6 | 7 | export const images: { [key: string]: string } = { 8 | "C'est nul": nulImage, 9 | Travail: travailImage, 10 | "Travail termine": travailImage, 11 | "ah !": Denis, 12 | sad: Sad, 13 | ['m - Ascenseur']: Elevator, 14 | }; 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 5 | "types": ["vite/client"], 6 | "allowJs": false, 7 | "skipLibCheck": false, 8 | "esModuleInterop": false, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "ESNext", 13 | "moduleResolution": "Node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react" 18 | }, 19 | "include": ["./src"] 20 | } 21 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Webdeck OBS 9 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/utils/crypto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Does not work if the site is loaded over http 3 | */ 4 | import jsSHA from "jssha"; 5 | 6 | export async function nativeSha256(str: string): Promise { 7 | const subtle = 8 | crypto.subtle || ((crypto as any).webkitSubtle as SubtleCrypto); 9 | const encoder = new TextEncoder(); 10 | const data = encoder.encode(str); 11 | const hashBuffer = await subtle.digest("SHA-256", data); 12 | const hashArray = Array.from(new Uint8Array(hashBuffer)); 13 | return String.fromCharCode.apply(null, hashArray); 14 | } 15 | 16 | export function sha256(str: string): string { 17 | const sha256 = new jsSHA("SHA-256", "TEXT"); 18 | sha256.update(str); 19 | return sha256.getHash("BYTES"); 20 | } 21 | -------------------------------------------------------------------------------- /src/component/buttons/Button.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | export enum ButtonColors { 3 | blue = "blue", 4 | red = "red", 5 | yellow = "yellow", 6 | purple = "purple", 7 | green = "green", 8 | grey = "grey", 9 | } 10 | 11 | interface ButtonProps extends React.ButtonHTMLAttributes { 12 | color?: ButtonColors; 13 | children: ReactNode; 14 | } 15 | 16 | export function Button({ 17 | color = ButtonColors.grey, 18 | children, 19 | ...props 20 | }: ButtonProps) { 21 | const style = 22 | color !== ButtonColors.grey 23 | ? { 24 | background: `var(--${color})`, 25 | } 26 | : undefined; 27 | return ( 28 | 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /src/utils/EventEmitter.ts: -------------------------------------------------------------------------------- 1 | interface Listeners { 2 | [eventName: string]: Function[]; 3 | } 4 | 5 | export class EventEmitter { 6 | private listeners: Listeners = {}; 7 | 8 | public on(name: string, callback: Function): () => void { 9 | const listeners = this.listeners[name] || []; 10 | this.listeners[name] = [...listeners, callback]; 11 | return () => { 12 | this.off(name, callback); 13 | }; 14 | } 15 | 16 | public off(name: string, callback: Function) { 17 | const listeners = this.listeners[name] || []; 18 | this.listeners[name] = listeners.filter((l) => l !== callback); 19 | } 20 | 21 | public emit(name: string, data: any) { 22 | const listeners = this.listeners[name] || []; 23 | listeners.forEach((l) => l(data)); 24 | } 25 | 26 | public destroy() { 27 | this.listeners = {}; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webdeckobs", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "tsc && vite build", 7 | "serve": "vite preview", 8 | "gh": "npm run build && echo 'stream.droapp.com' > ./dist/CNAME && gh-pages -d dist" 9 | }, 10 | "dependencies": { 11 | "ionicons": "^5.5.1", 12 | "jssha": "^3.2.0", 13 | "obs-websocket-js": "^5.0.1", 14 | "react": "^17.0.0", 15 | "react-dom": "^17.0.0", 16 | "react-icons": "^4.2.0" 17 | }, 18 | "devDependencies": { 19 | "@types/debug": "^4.1.7", 20 | "@types/react": "^17.0.0", 21 | "@types/react-dom": "^17.0.0", 22 | "@vitejs/plugin-react-refresh": "^1.3.1", 23 | "gh-pages": "^3.1.0", 24 | "prettier": "^2.2.1", 25 | "type-fest": "^2.19.0", 26 | "typescript": "^4.1.2", 27 | "vite": "^2.1.5" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/component/RefreshButton.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react"; 2 | import { useObs } from "./OBSProvider"; 3 | import { Icon, Icons } from "./Icon"; 4 | 5 | export function RefreshButton() { 6 | const refresh = () => { 7 | window.location.reload(); 8 | }; 9 | 10 | const obs = useObs(); 11 | const [online, setOnline] = useState(true); 12 | 13 | useEffect(() => { 14 | return obs.on("ExitStarted", () => { 15 | setOnline(false); 16 | }); 17 | }, []); 18 | 19 | if (online) { 20 | return null; 21 | } 22 | 23 | return ( 24 |
25 |

La connexion avec le serveur de websocket a été perdue

26 | 30 |
31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /src/obs/types.ts: -------------------------------------------------------------------------------- 1 | export interface OBSSource { 2 | alignment: number; 3 | cx: number; 4 | cy: number; 5 | id: number; 6 | locked: boolean; 7 | muted: boolean; 8 | name: string; 9 | render: boolean; 10 | source_cx: number; 11 | source_cy: number; 12 | type: string; 13 | volume: number; 14 | x: number; 15 | y: number; 16 | groupChildren?: OBSSource[]; 17 | } 18 | 19 | export interface OBSScene { 20 | sceneName: string; 21 | sceneIndex: number; 22 | [s: string]: any; 23 | } 24 | 25 | export interface OBSSource { 26 | sourceName: string; 27 | sourceType: number; 28 | groupName: string; 29 | isGroup: boolean | null, 30 | sceneItemEnabled: boolean, 31 | sceneItemId: number, 32 | [s: string]: any; 33 | } 34 | 35 | declare global { 36 | namespace JSX { 37 | interface IntrinsicElements { 38 | "ion-icon": { name: string }; 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import './main.css'; 2 | import React from 'react'; 3 | import ReactDOM from 'react-dom'; 4 | import { OBSContextProvider } from './component/OBSProvider'; 5 | import { StreamDeck } from './component/StreamDeck'; 6 | import { ScenesSwitcher } from './component/buttons/SceneSwitcher'; 7 | import { Sounds } from './component/buttons/Sounds'; 8 | import { Row } from './component/Row'; 9 | import { RefreshButton } from './component/RefreshButton'; 10 | 11 | const url = new URL(window.location.href); 12 | const host = url.searchParams.get("host") || "192.168.0.50:4444"; 13 | const password = url.searchParams.get("password") || ""; 14 | 15 | ReactDOM.render( 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | , 29 | document.getElementById("root") 30 | ); 31 | -------------------------------------------------------------------------------- /src/component/buttons/SceneSwitcher.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Button, ButtonColors } from "./Button"; 3 | import { useCurrentScene, useObs, useScenes } from "../OBSProvider"; 4 | import { Icon, Icons } from "../Icon"; 5 | 6 | interface SceneSwitcherProps { 7 | scene: string; 8 | } 9 | 10 | export function ScenesSwitcher() { 11 | const scenes = useScenes(); 12 | return ( 13 | <> 14 | {scenes 15 | .filter((s) => s.sceneName.match(/^[a-z0-9].*$/i)) 16 | .map((scene) => ( 17 | 18 | ))} 19 | 20 | ); 21 | } 22 | 23 | export function SceneSwitcher({ scene }: SceneSwitcherProps) { 24 | const currentScene = useCurrentScene(); 25 | const obs = useObs(); 26 | const changeScene = () => { 27 | obs.send("SetCurrentProgramScene", { sceneName: scene }); 28 | }; 29 | return ( 30 | 37 | ); 38 | } 39 | -------------------------------------------------------------------------------- /src/component/Icon.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | import { 3 | IoTvOutline, 4 | IoMusicalNoteOutline, 5 | IoMusicalNotesOutline, 6 | IoChatbubblesOutline, 7 | IoSearchOutline, 8 | IoArrowBackCircleOutline, 9 | IoArrowForwardCircleOutline, 10 | IoCameraOutline, 11 | IoRefreshOutline, 12 | IoImageOutline, 13 | } from "react-icons/io5"; 14 | import { IconType } from "react-icons"; 15 | 16 | export enum Icons { 17 | scene = "scene", 18 | sound = "sound", 19 | music = "music", 20 | tchat = "tchat", 21 | zoom = "zoom", 22 | left = "left", 23 | right = "right", 24 | camera = "camera", 25 | refresh = "refresh", 26 | image = "image" 27 | } 28 | 29 | export function Icon({ name }: { name: Icons }) { 30 | switch (name) { 31 | case Icons.scene: 32 | return ; 33 | case Icons.sound: 34 | return ; 35 | case Icons.music: 36 | return ; 37 | case Icons.tchat: 38 | return ; 39 | case Icons.zoom: 40 | return ; 41 | case Icons.left: 42 | return ; 43 | case Icons.right: 44 | return ; 45 | case Icons.camera: 46 | return ; 47 | case Icons.refresh: 48 | return ; 49 | case Icons.image: 50 | return ; 51 | } 52 | return null; 53 | } 54 | -------------------------------------------------------------------------------- /src/obs/OBSWebsocket.ts: -------------------------------------------------------------------------------- 1 | import OBSWebSocket, { OBSEventTypes, OBSRequestTypes, OBSResponseTypes } from 'obs-websocket-js' 2 | 3 | type QueueItem = { 4 | request: K, 5 | data?: OBSRequestTypes[K], 6 | callback?: (data: OBSResponseTypes[K]) => void 7 | } 8 | type QueueItems = QueueItem[] 9 | 10 | export class OBSWebsocket { 11 | private client: OBSWebSocket 12 | private connected = false 13 | private queue = [] as QueueItems // Remember event listeners (allow listening before connection) 14 | 15 | constructor () { 16 | this.client = new OBSWebSocket() 17 | } 18 | 19 | connect(host: string = "localhost:4444", password: string = "") { 20 | this.connected = false 21 | return this.client.connect(`ws://${host}`, password, {rpcVersion: 1}).then(() => { 22 | this.connected = true 23 | for (let item of this.queue) { 24 | this.send(item.request, item.data, item.callback) 25 | } 26 | this.queue = []; 27 | }) 28 | } 29 | 30 | on( 31 | name: K, 32 | callback: (data: OBSEventTypes[K]) => void 33 | ): () => void { 34 | this.client.on(name, callback as any); 35 | return () => this.client.off(name, callback as any); 36 | } 37 | 38 | off( 39 | name: K, 40 | callback: (data: OBSEventTypes[K]) => void 41 | ) { 42 | return this.client.off(name, callback as any); 43 | } 44 | 45 | send( 46 | request: K, 47 | data?: OBSRequestTypes[K], 48 | callback?: (data: OBSResponseTypes[K]) => void 49 | ): void { 50 | if (this.connected) { 51 | this.client.call(request, data).then(r => { 52 | if (callback) { 53 | callback(r) 54 | } 55 | }) 56 | } else { 57 | this.queue.push({request, data, callback: callback as any}) 58 | } 59 | } 60 | 61 | close() { 62 | this.client.disconnect() 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/component/buttons/Sounds.tsx: -------------------------------------------------------------------------------- 1 | import React, { memo, useEffect, useState } from 'react'; 2 | import { useObs, useScenes } from '../OBSProvider'; 3 | import { Button, ButtonColors } from './Button'; 4 | import { Icon, Icons } from '../Icon'; 5 | import { images } from '../../images'; 6 | import { OBSSource } from '../../obs/types' 7 | 8 | export interface SoundsProps { 9 | scene: string; 10 | } 11 | 12 | /** 13 | * Crée un bouton pour chaque son présent dans la scène passée en paramètre 14 | */ 15 | export const Sounds = memo(({ scene }: SoundsProps) => { 16 | const obs = useObs() 17 | const [sources, setSources] = useState([] as OBSSource[]) 18 | const isConnected = useScenes().length > 0 19 | 20 | useEffect(() => { 21 | obs.send('GetSceneItemList', { sceneName: scene }, (data) => setSources(data.sceneItems.reverse() as OBSSource[])) 22 | }, [isConnected]) 23 | 24 | 25 | return ( 26 | <> 27 | {sources.map((source) => ( 28 | 29 | ))} 30 | 31 | ); 32 | }) 33 | 34 | export function Sound ({ 35 | name, 36 | scene, 37 | id 38 | }: { 39 | name: string; 40 | scene: string; 41 | id: number; 42 | }) { 43 | const obs = useObs(); 44 | const [isPlaying, setIsPlaying] = useState(false); 45 | 46 | const toggleSound = () => { 47 | obs.send('SetSceneItemEnabled', { 48 | sceneName: scene, 49 | sceneItemId: id, 50 | sceneItemEnabled: !isPlaying 51 | }); 52 | }; 53 | 54 | useEffect(() => { 55 | const offRestart = obs.on('MediaInputPlaybackStarted', (data) => { 56 | if (data.inputName === name) { 57 | setIsPlaying(true); 58 | } 59 | }); 60 | 61 | const offEnded = obs.on('MediaInputPlaybackEnded', (data) => { 62 | if (data.inputName === name) { 63 | setIsPlaying(false); 64 | obs.send('SetSceneItemEnabled', { 65 | sceneName: scene, 66 | sceneItemId: id, 67 | sceneItemEnabled: false 68 | }); 69 | } 70 | }); 71 | 72 | return () => { 73 | offRestart(); 74 | offEnded(); 75 | }; 76 | }); 77 | 78 | const image = images[name]; 79 | 80 | return ( 81 | 89 | ); 90 | } 91 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Webdeck OBS 2 | 3 | L'objectif du projet est de créer un streamdeck qui fonctionne sur ipad pour contrôler OBS via le [système de websocket](https://obsproject.com/forum/resources/obs-websocket-remote-control-obs-studio-from-websockets.466/). 4 | 5 | ![Capture d'écran](screenshot.png) 6 | 7 | ## Configuration 8 | 9 | Pour commencer il faut installer le plugin [OBS websocket](https://obsproject.com/forum/resources/obs-websocket-remote-control-obs-studio-from-websockets.466/) et le configurer avec un mot de passe. Ensuite vous pouvez charger le stream deck depuis l'url [stream.droapp.com](http://stream.droapp.com) (ne pas charger en HTTPS car sinon vous ne pourrez pas vous connecter au serveur de websocket). 10 | 11 | Vous pouvez rentrer le nom d'hôte et le mot de passe via des paramètres : 12 | 13 | ``` 14 | http://stream.droapp.com/?host=192.168.0.50:4444&password=MonMotDePasse 15 | ``` 16 | 17 | Vous devriez normalement voir le sélecteur de scène apparaître. 18 | 19 | ## Les widgets 20 | 21 | ### Sélecteur de scène 22 | 23 | Le sélecteur de scène affiche automatiquement toutes les scènes. Si vous voulez masquer une scène il faut que le nom commence par "📦". 24 | 25 | ### Lanceur de son / musiques 26 | 27 | Les sons sont automatiquement récupérés depuis le groupe `Sounds` qui se trouve dans la scène `Stream`. Les sons doivent tous être masqués par défaut et avoir l'option "Reprendre depuis le début quand cette source redevient active" cochée. 28 | 29 | Les musiques fonctionnent comme les sons mais doivent être placées dans le groupe `Music` de la scène `Stream` 30 | 31 | ### Tchat 32 | 33 | Le bouton tchat permet de masquer ou d'afficher le tchat au travers d'un système de filtres configurable via le plugin[move-transition](https://obsproject.com/forum/resources/move-transition.913/). Si vous n'avez jamais utilisé ce plugin vous pouvez regarder [cette vidéo](https://youtu.be/DQNhV_bbXQ8?t=324). Vous devez créer 2 filtres `Show` et `Hide` qui doivent être sur la scène `📦 Tchat` (On utilisera ensuite cette scène dans les autres scènes). 34 | 35 | ### Position de la webcam 36 | 37 | Le système prévoit 3 positions pour la caméra (gauche, droite et zoomée). Pour gérer ces 3 positions vous devez utiliser le système de filtre comme vu précédemment avec 3 filtres `default`, `zoom` et `left` qui doivent être placés sur la scène `Stream`. 38 | 39 | ## FAQ 40 | 41 | **Pourquoi avoir écrit `self = this` ?** 42 | 43 | Je cible un ipad qui est bloqué sur ios 10.3.3 et il ne supporte pas les fonctions asynchrones fléchées. 44 | 45 | **Pourquoi ne pas utiliser l'API Crypto du navigateur pour le SHA256 ?** 46 | 47 | L'API Crypto ne peut être utilisé depuis un contexte HTTP. Vu que obs-websocket ne supporte pas les websockets sécurisés, on est obligé de charger la page en HTTP (on ne peut pas se connecter en websocket non sécurisé depuis une page chargée en HTTPS). 48 | -------------------------------------------------------------------------------- /src/main.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --buttonHeight: 130px; 3 | --blue: #4a8cda; 4 | --red: #e04f60; 5 | --yellow: #d99a51; 6 | --purple: #6448b1; 7 | --green: #72c834; 8 | --grey: #332e59; 9 | } 10 | 11 | * { 12 | box-sizing: border-box; 13 | } 14 | 15 | body { 16 | padding: 0; 17 | margin: 0; 18 | background-color: #272042; 19 | font-size: 40px; 20 | color: #fff; 21 | font-family: sans-serif; 22 | font-weight: bold; 23 | } 24 | 25 | .grid { 26 | display: grid; 27 | grid-template-columns: repeat(6, 1fr); 28 | grid-gap: 20px; 29 | padding: 20px; 30 | } 31 | 32 | .grid > * { 33 | min-width: 0; 34 | } 35 | 36 | .row { 37 | display: grid; 38 | grid-column-end: -1; 39 | grid-column-start: 1; 40 | grid-template-columns: repeat(6, 1fr); 41 | grid-gap: 20px; 42 | } 43 | 44 | .buttons { 45 | height: var(--buttonHeight); 46 | --columns: 1; 47 | display: grid; 48 | grid-column-end: span var(--columns); 49 | grid-template-columns: repeat(var(--columns), 1fr); 50 | grid-gap: 20px; 51 | padding: 7px; 52 | border: dashed 3px var(--grey); 53 | border-radius: 15px; 54 | } 55 | 56 | .buttons .button { 57 | height: 100%; 58 | } 59 | 60 | .button { 61 | height: var(--buttonHeight); 62 | display: flex; 63 | align-items: center; 64 | justify-content: center; 65 | background-color: var(--grey); 66 | border: 1px solid #3E3868; 67 | border-bottom: 1px solid transparent; 68 | border-radius: 10px; 69 | color: inherit; 70 | font-weight: inherit; 71 | font-size: 20px; 72 | cursor: pointer; 73 | transition: 0.3s; 74 | outline: none; 75 | padding: 16px 8px 40px; 76 | position: relative; 77 | overflow: hidden; 78 | } 79 | 80 | .button.is-grey { 81 | color: #746CA5; 82 | } 83 | 84 | .button svg { 85 | display: block; 86 | width: 40px; 87 | height: 40px; 88 | margin-left: auto; 89 | margin-right: auto; 90 | } 91 | 92 | .button > span { 93 | position: absolute; 94 | bottom: 10px; 95 | right: 8px; 96 | left: 8px; 97 | } 98 | 99 | .button img { 100 | position: absolute; 101 | top: 0; 102 | left: 0; 103 | right: 0; 104 | bottom: 0; 105 | object-fit: cover; 106 | z-index: 1; 107 | opacity: .3; 108 | width: 100%; 109 | height: 100%; 110 | } 111 | 112 | .button > * { 113 | position: relative; 114 | z-index: 2; 115 | } 116 | 117 | .modal { 118 | position: fixed; 119 | top: 0; 120 | left: 0; 121 | right: 0; 122 | bottom: 0; 123 | background-color: rgba(0, 0, 0, 0.6); 124 | z-index: 10; 125 | display: flex; 126 | align-items: center; 127 | justify-content: center; 128 | flex-direction: column; 129 | padding: 50px; 130 | text-align: center; 131 | } 132 | 133 | .modal button { 134 | flex-direction: row; 135 | align-items: center; 136 | height: auto; 137 | padding: 16px; 138 | font-size: 25px; 139 | font-weight: normal; 140 | } 141 | .modal button svg { 142 | width: 30px; 143 | height: 30px; 144 | margin-right: 16px; 145 | } 146 | .modal small { 147 | font-weight: normal; 148 | font-size: 22px; 149 | } 150 | .spaced { 151 | display: flex; 152 | } 153 | .spaced > * + * { 154 | margin-left: 8px; 155 | } 156 | 157 | input { 158 | border-radius: 4px; 159 | font-size: 18px; 160 | padding: 0 8px; 161 | background-color: rgba(0, 0, 0, 0.3); 162 | color: #FFF; 163 | border: none; 164 | border-bottom: 1px solid rgba(255, 255, 255, .1); 165 | border-left: 1px solid rgba(255, 255, 255, .05); 166 | border-right: 1px solid rgba(255, 255, 255, .05); 167 | } 168 | -------------------------------------------------------------------------------- /src/component/OBSProvider.tsx: -------------------------------------------------------------------------------- 1 | import React, { 2 | createContext, 3 | ReactNode, 4 | SyntheticEvent, 5 | useContext, 6 | useEffect, 7 | useRef, 8 | useState, 9 | } from "react"; 10 | import { OBSScene, OBSSource } from "../obs/types"; 11 | import { OBSWebsocket } from "../obs/OBSWebsocket"; 12 | import { Icon, Icons } from "./Icon"; 13 | import { OBSEventTypes } from 'obs-websocket-js' 14 | 15 | interface OBSContextProviderProps { 16 | children: ReactNode; 17 | hostname: string; 18 | password: string; 19 | } 20 | 21 | const OBSContext = createContext({ 22 | scenes: [] as OBSScene[], 23 | sources: [] as OBSSource[], 24 | obsRef: { current: new OBSWebsocket() }, 25 | currentScene: "", 26 | }); 27 | 28 | export function useScenes(): OBSScene[] { 29 | return useContext(OBSContext).scenes; 30 | } 31 | 32 | export function useScene(sceneName: string): OBSScene | undefined { 33 | return useContext(OBSContext).scenes.find((s) => s.name === sceneName); 34 | } 35 | 36 | export function useSources(groupName?: string): OBSSource[] { 37 | return useContext(OBSContext).sources.filter(s => s.groupName === groupName); 38 | } 39 | 40 | export function useCurrentScene(): string { 41 | return useContext(OBSContext).currentScene; 42 | } 43 | 44 | export function useObs(): OBSWebsocket { 45 | return useContext(OBSContext).obsRef.current; 46 | } 47 | 48 | export function OBSContextProvider({ 49 | children, 50 | hostname, 51 | password, 52 | }: OBSContextProviderProps) { 53 | const [scenes, setScenes] = useState([]); 54 | const [sources, setSources] = useState([]); 55 | const [currentScene, setCurrentScene] = useState(""); 56 | const obsRef = useRef(new OBSWebsocket()); 57 | const [error, setError] = useState(null); 58 | 59 | useEffect(function () { 60 | const obs = obsRef.current; 61 | const onSwitchScene = (data: OBSEventTypes['CurrentProgramSceneChanged']) => { 62 | setCurrentScene(data.sceneName); 63 | setSources([]) 64 | }; 65 | const connect = () => { 66 | setError(null); 67 | setSources([]); 68 | obs 69 | .connect(hostname, password) 70 | .then(() => { 71 | if (scenes.length === 0) { 72 | obs.send("GetSceneList", undefined, (data) => { 73 | setScenes(data.scenes as OBSScene[]); 74 | setCurrentScene(data.currentProgramSceneName); 75 | }); 76 | } 77 | }) 78 | .catch((err) => { 79 | setError(err); 80 | }); 81 | }; 82 | const disconnect = () => { 83 | obs.close(); 84 | }; 85 | 86 | connect(); 87 | 88 | window.addEventListener("focus", connect); 89 | window.addEventListener("blur", disconnect); 90 | 91 | obs.on("CurrentProgramSceneChanged", onSwitchScene); 92 | 93 | return () => { 94 | obs.off("CurrentProgramSceneChanged", onSwitchScene); 95 | window.removeEventListener("focus", connect); 96 | window.removeEventListener("blur", disconnect); 97 | }; 98 | }, []); 99 | 100 | return ( 101 | 102 | {error && ( 103 | 108 | )} 109 | {children} 110 | 111 | ); 112 | } 113 | 114 | function ReconnectModal({ 115 | hostname, 116 | password, 117 | error, 118 | }: { 119 | hostname: string; 120 | password: string; 121 | error: string; 122 | }) { 123 | const onSubmit = (evt: SyntheticEvent) => { 124 | evt.preventDefault(); 125 | const data = new FormData(evt.target as HTMLFormElement); 126 | window.location.href = `${window.location.pathname}?hostname=${data.get( 127 | "hostname" 128 | )}&password=${data.get("password")}`; 129 | }; 130 | 131 | return ( 132 |
133 |

134 | La connexion a échouée
135 | {error} 136 |

137 |
138 | 144 | 150 | 154 |
155 |
156 | ); 157 | } 158 | -------------------------------------------------------------------------------- /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.12.13": 6 | version "7.12.13" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" 8 | integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== 9 | dependencies: 10 | "@babel/highlight" "^7.12.13" 11 | 12 | "@babel/compat-data@^7.13.15": 13 | version "7.13.15" 14 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4" 15 | integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA== 16 | 17 | "@babel/core@^7.12.13": 18 | version "7.13.16" 19 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.16.tgz#7756ab24396cc9675f1c3fcd5b79fcce192ea96a" 20 | integrity sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q== 21 | dependencies: 22 | "@babel/code-frame" "^7.12.13" 23 | "@babel/generator" "^7.13.16" 24 | "@babel/helper-compilation-targets" "^7.13.16" 25 | "@babel/helper-module-transforms" "^7.13.14" 26 | "@babel/helpers" "^7.13.16" 27 | "@babel/parser" "^7.13.16" 28 | "@babel/template" "^7.12.13" 29 | "@babel/traverse" "^7.13.15" 30 | "@babel/types" "^7.13.16" 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.13.16": 39 | version "7.13.16" 40 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.16.tgz#0befc287031a201d84cdfc173b46b320ae472d14" 41 | integrity sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg== 42 | dependencies: 43 | "@babel/types" "^7.13.16" 44 | jsesc "^2.5.1" 45 | source-map "^0.5.0" 46 | 47 | "@babel/helper-compilation-targets@^7.13.16": 48 | version "7.13.16" 49 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" 50 | integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== 51 | dependencies: 52 | "@babel/compat-data" "^7.13.15" 53 | "@babel/helper-validator-option" "^7.12.17" 54 | browserslist "^4.14.5" 55 | semver "^6.3.0" 56 | 57 | "@babel/helper-function-name@^7.12.13": 58 | version "7.12.13" 59 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" 60 | integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== 61 | dependencies: 62 | "@babel/helper-get-function-arity" "^7.12.13" 63 | "@babel/template" "^7.12.13" 64 | "@babel/types" "^7.12.13" 65 | 66 | "@babel/helper-get-function-arity@^7.12.13": 67 | version "7.12.13" 68 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" 69 | integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== 70 | dependencies: 71 | "@babel/types" "^7.12.13" 72 | 73 | "@babel/helper-member-expression-to-functions@^7.13.12": 74 | version "7.13.12" 75 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" 76 | integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== 77 | dependencies: 78 | "@babel/types" "^7.13.12" 79 | 80 | "@babel/helper-module-imports@^7.13.12": 81 | version "7.13.12" 82 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" 83 | integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== 84 | dependencies: 85 | "@babel/types" "^7.13.12" 86 | 87 | "@babel/helper-module-transforms@^7.13.14": 88 | version "7.13.14" 89 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" 90 | integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g== 91 | dependencies: 92 | "@babel/helper-module-imports" "^7.13.12" 93 | "@babel/helper-replace-supers" "^7.13.12" 94 | "@babel/helper-simple-access" "^7.13.12" 95 | "@babel/helper-split-export-declaration" "^7.12.13" 96 | "@babel/helper-validator-identifier" "^7.12.11" 97 | "@babel/template" "^7.12.13" 98 | "@babel/traverse" "^7.13.13" 99 | "@babel/types" "^7.13.14" 100 | 101 | "@babel/helper-optimise-call-expression@^7.12.13": 102 | version "7.12.13" 103 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" 104 | integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== 105 | dependencies: 106 | "@babel/types" "^7.12.13" 107 | 108 | "@babel/helper-plugin-utils@^7.12.13": 109 | version "7.13.0" 110 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" 111 | integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== 112 | 113 | "@babel/helper-replace-supers@^7.13.12": 114 | version "7.13.12" 115 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" 116 | integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== 117 | dependencies: 118 | "@babel/helper-member-expression-to-functions" "^7.13.12" 119 | "@babel/helper-optimise-call-expression" "^7.12.13" 120 | "@babel/traverse" "^7.13.0" 121 | "@babel/types" "^7.13.12" 122 | 123 | "@babel/helper-simple-access@^7.13.12": 124 | version "7.13.12" 125 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" 126 | integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== 127 | dependencies: 128 | "@babel/types" "^7.13.12" 129 | 130 | "@babel/helper-split-export-declaration@^7.12.13": 131 | version "7.12.13" 132 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" 133 | integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== 134 | dependencies: 135 | "@babel/types" "^7.12.13" 136 | 137 | "@babel/helper-validator-identifier@^7.12.11": 138 | version "7.12.11" 139 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" 140 | integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== 141 | 142 | "@babel/helper-validator-option@^7.12.17": 143 | version "7.12.17" 144 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" 145 | integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== 146 | 147 | "@babel/helpers@^7.13.16": 148 | version "7.13.17" 149 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.17.tgz#b497c7a00e9719d5b613b8982bda6ed3ee94caf6" 150 | integrity sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg== 151 | dependencies: 152 | "@babel/template" "^7.12.13" 153 | "@babel/traverse" "^7.13.17" 154 | "@babel/types" "^7.13.17" 155 | 156 | "@babel/highlight@^7.12.13": 157 | version "7.13.10" 158 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" 159 | integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== 160 | dependencies: 161 | "@babel/helper-validator-identifier" "^7.12.11" 162 | chalk "^2.0.0" 163 | js-tokens "^4.0.0" 164 | 165 | "@babel/parser@^7.12.13", "@babel/parser@^7.13.16": 166 | version "7.13.16" 167 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37" 168 | integrity sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw== 169 | 170 | "@babel/plugin-transform-react-jsx-self@^7.12.13": 171 | version "7.12.13" 172 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz#422d99d122d592acab9c35ea22a6cfd9bf189f60" 173 | integrity sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ== 174 | dependencies: 175 | "@babel/helper-plugin-utils" "^7.12.13" 176 | 177 | "@babel/plugin-transform-react-jsx-source@^7.12.13": 178 | version "7.12.13" 179 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz#051d76126bee5c9a6aa3ba37be2f6c1698856bcb" 180 | integrity sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q== 181 | dependencies: 182 | "@babel/helper-plugin-utils" "^7.12.13" 183 | 184 | "@babel/template@^7.12.13": 185 | version "7.12.13" 186 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" 187 | integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== 188 | dependencies: 189 | "@babel/code-frame" "^7.12.13" 190 | "@babel/parser" "^7.12.13" 191 | "@babel/types" "^7.12.13" 192 | 193 | "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.13.15", "@babel/traverse@^7.13.17": 194 | version "7.13.17" 195 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.17.tgz#c85415e0c7d50ac053d758baec98b28b2ecfeea3" 196 | integrity sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg== 197 | dependencies: 198 | "@babel/code-frame" "^7.12.13" 199 | "@babel/generator" "^7.13.16" 200 | "@babel/helper-function-name" "^7.12.13" 201 | "@babel/helper-split-export-declaration" "^7.12.13" 202 | "@babel/parser" "^7.13.16" 203 | "@babel/types" "^7.13.17" 204 | debug "^4.1.0" 205 | globals "^11.1.0" 206 | 207 | "@babel/types@^7.12.13", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.13.16", "@babel/types@^7.13.17": 208 | version "7.13.17" 209 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.17.tgz#48010a115c9fba7588b4437dd68c9469012b38b4" 210 | integrity sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA== 211 | dependencies: 212 | "@babel/helper-validator-identifier" "^7.12.11" 213 | to-fast-properties "^2.0.0" 214 | 215 | "@stencil/core@^2.5.0": 216 | version "2.5.2" 217 | resolved "https://registry.yarnpkg.com/@stencil/core/-/core-2.5.2.tgz#ad00d495ee37bbed4044524d59c7f22de15ab4a7" 218 | integrity sha512-bgjPXkSzzg1WnTgVUm6m5ZzpKt602WmA/QljODAW1xVN40OHJdbGblzF/F6MFzqv2c5Cy30CB41arc8qADIdcQ== 219 | 220 | "@types/prop-types@*": 221 | version "15.7.3" 222 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" 223 | integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== 224 | 225 | "@types/react-dom@^17.0.0": 226 | version "17.0.3" 227 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.3.tgz#7fdf37b8af9d6d40127137865bb3fff8871d7ee1" 228 | integrity sha512-4NnJbCeWE+8YBzupn/YrJxZ8VnjcJq5iR1laqQ1vkpQgBiA7bwk0Rp24fxsdNinzJY2U+HHS4dJJDPdoMjdJ7w== 229 | dependencies: 230 | "@types/react" "*" 231 | 232 | "@types/react@*", "@types/react@^17.0.0": 233 | version "17.0.3" 234 | resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79" 235 | integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg== 236 | dependencies: 237 | "@types/prop-types" "*" 238 | "@types/scheduler" "*" 239 | csstype "^3.0.2" 240 | 241 | "@types/scheduler@*": 242 | version "0.16.1" 243 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" 244 | integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== 245 | 246 | "@vitejs/plugin-react-refresh@^1.3.1": 247 | version "1.3.2" 248 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-refresh/-/plugin-react-refresh-1.3.2.tgz#c807c9c77694943b8e51f0a80babba6b078a3218" 249 | integrity sha512-ujHk6wqY9MZh8PkjeQeeDHfds4teTD4mkG34++gVoQJgATO/Hpq7rcEYbFZ5Dyup3zlpe2jyu0gFuqznLnBUyQ== 250 | dependencies: 251 | "@babel/core" "^7.12.13" 252 | "@babel/plugin-transform-react-jsx-self" "^7.12.13" 253 | "@babel/plugin-transform-react-jsx-source" "^7.12.13" 254 | react-refresh "^0.9.0" 255 | 256 | ansi-styles@^3.2.1: 257 | version "3.2.1" 258 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 259 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 260 | dependencies: 261 | color-convert "^1.9.0" 262 | 263 | array-union@^1.0.1: 264 | version "1.0.2" 265 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 266 | integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= 267 | dependencies: 268 | array-uniq "^1.0.1" 269 | 270 | array-uniq@^1.0.1: 271 | version "1.0.3" 272 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 273 | integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= 274 | 275 | async@^2.6.1: 276 | version "2.6.3" 277 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" 278 | integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== 279 | dependencies: 280 | lodash "^4.17.14" 281 | 282 | balanced-match@^1.0.0: 283 | version "1.0.2" 284 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 285 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 286 | 287 | brace-expansion@^1.1.7: 288 | version "1.1.11" 289 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 290 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 291 | dependencies: 292 | balanced-match "^1.0.0" 293 | concat-map "0.0.1" 294 | 295 | browserslist@^4.14.5: 296 | version "4.16.5" 297 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.5.tgz#952825440bca8913c62d0021334cbe928ef062ae" 298 | integrity sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A== 299 | dependencies: 300 | caniuse-lite "^1.0.30001214" 301 | colorette "^1.2.2" 302 | electron-to-chromium "^1.3.719" 303 | escalade "^3.1.1" 304 | node-releases "^1.1.71" 305 | 306 | caniuse-lite@^1.0.30001214: 307 | version "1.0.30001214" 308 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz#70f153c78223515c6d37a9fde6cd69250da9d872" 309 | integrity sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg== 310 | 311 | chalk@^2.0.0: 312 | version "2.4.2" 313 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 314 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 315 | dependencies: 316 | ansi-styles "^3.2.1" 317 | escape-string-regexp "^1.0.5" 318 | supports-color "^5.3.0" 319 | 320 | color-convert@^1.9.0: 321 | version "1.9.3" 322 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 323 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 324 | dependencies: 325 | color-name "1.1.3" 326 | 327 | color-name@1.1.3: 328 | version "1.1.3" 329 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 330 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 331 | 332 | colorette@^1.2.2: 333 | version "1.2.2" 334 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" 335 | integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== 336 | 337 | commander@^2.18.0: 338 | version "2.20.3" 339 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 340 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 341 | 342 | commondir@^1.0.1: 343 | version "1.0.1" 344 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 345 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 346 | 347 | concat-map@0.0.1: 348 | version "0.0.1" 349 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 350 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 351 | 352 | convert-source-map@^1.7.0: 353 | version "1.7.0" 354 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 355 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 356 | dependencies: 357 | safe-buffer "~5.1.1" 358 | 359 | csstype@^3.0.2: 360 | version "3.0.8" 361 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" 362 | integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== 363 | 364 | debug@^4.1.0: 365 | version "4.3.1" 366 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 367 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 368 | dependencies: 369 | ms "2.1.2" 370 | 371 | electron-to-chromium@^1.3.719: 372 | version "1.3.719" 373 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.719.tgz#87166fee347a46a2557f19aadb40a1d68241e61c" 374 | integrity sha512-heM78GKSqrIzO9Oz0/y22nTBN7bqSP1Pla2SyU9DiSnQD+Ea9SyyN5RWWlgqsqeBLNDkSlE9J9EHFmdMPzxB/g== 375 | 376 | email-addresses@^3.0.1: 377 | version "3.1.0" 378 | resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.1.0.tgz#cabf7e085cbdb63008a70319a74e6136188812fb" 379 | integrity sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg== 380 | 381 | esbuild@^0.9.3: 382 | version "0.9.7" 383 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.9.7.tgz#ea0d639cbe4b88ec25fbed4d6ff00c8d788ef70b" 384 | integrity sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg== 385 | 386 | escalade@^3.1.1: 387 | version "3.1.1" 388 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 389 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 390 | 391 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 392 | version "1.0.5" 393 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 394 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 395 | 396 | filename-reserved-regex@^1.0.0: 397 | version "1.0.0" 398 | resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4" 399 | integrity sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q= 400 | 401 | filenamify-url@^1.0.0: 402 | version "1.0.0" 403 | resolved "https://registry.yarnpkg.com/filenamify-url/-/filenamify-url-1.0.0.tgz#b32bd81319ef5863b73078bed50f46a4f7975f50" 404 | integrity sha1-syvYExnvWGO3MHi+1Q9GpPeXX1A= 405 | dependencies: 406 | filenamify "^1.0.0" 407 | humanize-url "^1.0.0" 408 | 409 | filenamify@^1.0.0: 410 | version "1.2.1" 411 | resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5" 412 | integrity sha1-qfL/0RxQO+0wABUCknI3jx8TZaU= 413 | dependencies: 414 | filename-reserved-regex "^1.0.0" 415 | strip-outer "^1.0.0" 416 | trim-repeated "^1.0.0" 417 | 418 | find-cache-dir@^3.3.1: 419 | version "3.3.1" 420 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" 421 | integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== 422 | dependencies: 423 | commondir "^1.0.1" 424 | make-dir "^3.0.2" 425 | pkg-dir "^4.1.0" 426 | 427 | find-up@^4.0.0: 428 | version "4.1.0" 429 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 430 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 431 | dependencies: 432 | locate-path "^5.0.0" 433 | path-exists "^4.0.0" 434 | 435 | fs-extra@^8.1.0: 436 | version "8.1.0" 437 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" 438 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== 439 | dependencies: 440 | graceful-fs "^4.2.0" 441 | jsonfile "^4.0.0" 442 | universalify "^0.1.0" 443 | 444 | fs.realpath@^1.0.0: 445 | version "1.0.0" 446 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 447 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 448 | 449 | fsevents@~2.3.1: 450 | version "2.3.2" 451 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 452 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 453 | 454 | function-bind@^1.1.1: 455 | version "1.1.1" 456 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 457 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 458 | 459 | gensync@^1.0.0-beta.2: 460 | version "1.0.0-beta.2" 461 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 462 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 463 | 464 | gh-pages@^3.1.0: 465 | version "3.1.0" 466 | resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-3.1.0.tgz#ec3ed0f6a6e3fc3d888758fa018f08191c96bd55" 467 | integrity sha512-3b1rly9kuf3/dXsT8+ZxP0UhNLOo1CItj+3e31yUVcaph/yDsJ9RzD7JOw5o5zpBTJVQLlJAASNkUfepi9fe2w== 468 | dependencies: 469 | async "^2.6.1" 470 | commander "^2.18.0" 471 | email-addresses "^3.0.1" 472 | filenamify-url "^1.0.0" 473 | find-cache-dir "^3.3.1" 474 | fs-extra "^8.1.0" 475 | globby "^6.1.0" 476 | 477 | glob@^7.0.3: 478 | version "7.1.6" 479 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 480 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 481 | dependencies: 482 | fs.realpath "^1.0.0" 483 | inflight "^1.0.4" 484 | inherits "2" 485 | minimatch "^3.0.4" 486 | once "^1.3.0" 487 | path-is-absolute "^1.0.0" 488 | 489 | globals@^11.1.0: 490 | version "11.12.0" 491 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 492 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 493 | 494 | globby@^6.1.0: 495 | version "6.1.0" 496 | resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" 497 | integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= 498 | dependencies: 499 | array-union "^1.0.1" 500 | glob "^7.0.3" 501 | object-assign "^4.0.1" 502 | pify "^2.0.0" 503 | pinkie-promise "^2.0.0" 504 | 505 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 506 | version "4.2.6" 507 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 508 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 509 | 510 | has-flag@^3.0.0: 511 | version "3.0.0" 512 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 513 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 514 | 515 | has@^1.0.3: 516 | version "1.0.3" 517 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 518 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 519 | dependencies: 520 | function-bind "^1.1.1" 521 | 522 | humanize-url@^1.0.0: 523 | version "1.0.1" 524 | resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff" 525 | integrity sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8= 526 | dependencies: 527 | normalize-url "^1.0.0" 528 | strip-url-auth "^1.0.0" 529 | 530 | inflight@^1.0.4: 531 | version "1.0.6" 532 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 533 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 534 | dependencies: 535 | once "^1.3.0" 536 | wrappy "1" 537 | 538 | inherits@2: 539 | version "2.0.4" 540 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 541 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 542 | 543 | ionicons@^5.5.1: 544 | version "5.5.1" 545 | resolved "https://registry.yarnpkg.com/ionicons/-/ionicons-5.5.1.tgz#c337b2a0871c18910dea5c72384b0f0a393abf15" 546 | integrity sha512-1auVisfaXmkmxINer8Q3kJGHP1vSxk86hf7By95eJ+Av9+oBcNuAEBfSe3jaMaGRVxVw8U/2j23MFq7R3c0HPg== 547 | dependencies: 548 | "@stencil/core" "^2.5.0" 549 | 550 | is-core-module@^2.2.0: 551 | version "2.2.0" 552 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" 553 | integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== 554 | dependencies: 555 | has "^1.0.3" 556 | 557 | is-plain-obj@^1.0.0: 558 | version "1.1.0" 559 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" 560 | integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= 561 | 562 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 563 | version "4.0.0" 564 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 565 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 566 | 567 | jsesc@^2.5.1: 568 | version "2.5.2" 569 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 570 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 571 | 572 | json5@^2.1.2: 573 | version "2.2.0" 574 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" 575 | integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== 576 | dependencies: 577 | minimist "^1.2.5" 578 | 579 | jsonfile@^4.0.0: 580 | version "4.0.0" 581 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 582 | integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= 583 | optionalDependencies: 584 | graceful-fs "^4.1.6" 585 | 586 | jssha@^3.2.0: 587 | version "3.2.0" 588 | resolved "https://registry.yarnpkg.com/jssha/-/jssha-3.2.0.tgz#88ec50b866dd1411deaddbe6b3e3692e4c710f16" 589 | integrity sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q== 590 | 591 | locate-path@^5.0.0: 592 | version "5.0.0" 593 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 594 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 595 | dependencies: 596 | p-locate "^4.1.0" 597 | 598 | lodash@^4.17.14: 599 | version "4.17.21" 600 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 601 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 602 | 603 | loose-envify@^1.1.0: 604 | version "1.4.0" 605 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 606 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 607 | dependencies: 608 | js-tokens "^3.0.0 || ^4.0.0" 609 | 610 | make-dir@^3.0.2: 611 | version "3.1.0" 612 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 613 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 614 | dependencies: 615 | semver "^6.0.0" 616 | 617 | minimatch@^3.0.4: 618 | version "3.0.4" 619 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 620 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 621 | dependencies: 622 | brace-expansion "^1.1.7" 623 | 624 | minimist@^1.2.5: 625 | version "1.2.5" 626 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 627 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 628 | 629 | ms@2.1.2: 630 | version "2.1.2" 631 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 632 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 633 | 634 | nanoid@^3.1.22: 635 | version "3.1.22" 636 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" 637 | integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== 638 | 639 | node-releases@^1.1.71: 640 | version "1.1.71" 641 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" 642 | integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== 643 | 644 | normalize-url@^1.0.0: 645 | version "1.9.1" 646 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" 647 | integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= 648 | dependencies: 649 | object-assign "^4.0.1" 650 | prepend-http "^1.0.0" 651 | query-string "^4.1.0" 652 | sort-keys "^1.0.0" 653 | 654 | object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: 655 | version "4.1.1" 656 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 657 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 658 | 659 | once@^1.3.0: 660 | version "1.4.0" 661 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 662 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 663 | dependencies: 664 | wrappy "1" 665 | 666 | p-limit@^2.2.0: 667 | version "2.3.0" 668 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 669 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 670 | dependencies: 671 | p-try "^2.0.0" 672 | 673 | p-locate@^4.1.0: 674 | version "4.1.0" 675 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 676 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 677 | dependencies: 678 | p-limit "^2.2.0" 679 | 680 | p-try@^2.0.0: 681 | version "2.2.0" 682 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 683 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 684 | 685 | path-exists@^4.0.0: 686 | version "4.0.0" 687 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 688 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 689 | 690 | path-is-absolute@^1.0.0: 691 | version "1.0.1" 692 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 693 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 694 | 695 | path-parse@^1.0.6: 696 | version "1.0.6" 697 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 698 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 699 | 700 | pify@^2.0.0: 701 | version "2.3.0" 702 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 703 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 704 | 705 | pinkie-promise@^2.0.0: 706 | version "2.0.1" 707 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 708 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= 709 | dependencies: 710 | pinkie "^2.0.0" 711 | 712 | pinkie@^2.0.0: 713 | version "2.0.4" 714 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 715 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= 716 | 717 | pkg-dir@^4.1.0: 718 | version "4.2.0" 719 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 720 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 721 | dependencies: 722 | find-up "^4.0.0" 723 | 724 | postcss@^8.2.1: 725 | version "8.2.12" 726 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.12.tgz#81248a1a87e0f575cc594a99a08207fd1c4addc4" 727 | integrity sha512-BJnGT5+0q2tzvs6oQfnY2NpEJ7rIXNfBnZtQOKCIsweeWXBXeDd5k31UgTdS3d/c02ouspufn37mTaHWkJyzMQ== 728 | dependencies: 729 | colorette "^1.2.2" 730 | nanoid "^3.1.22" 731 | source-map "^0.6.1" 732 | 733 | prepend-http@^1.0.0: 734 | version "1.0.4" 735 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 736 | integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= 737 | 738 | prettier@^2.2.1: 739 | version "2.2.1" 740 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" 741 | integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== 742 | 743 | query-string@^4.1.0: 744 | version "4.3.4" 745 | resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" 746 | integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= 747 | dependencies: 748 | object-assign "^4.1.0" 749 | strict-uri-encode "^1.0.0" 750 | 751 | react-dom@^17.0.0: 752 | version "17.0.2" 753 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" 754 | integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== 755 | dependencies: 756 | loose-envify "^1.1.0" 757 | object-assign "^4.1.1" 758 | scheduler "^0.20.2" 759 | 760 | react-icons@^4.2.0: 761 | version "4.2.0" 762 | resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.2.0.tgz#6dda80c8a8f338ff96a1851424d63083282630d0" 763 | integrity sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ== 764 | 765 | react-refresh@^0.9.0: 766 | version "0.9.0" 767 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" 768 | integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== 769 | 770 | react@^17.0.0: 771 | version "17.0.2" 772 | resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" 773 | integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== 774 | dependencies: 775 | loose-envify "^1.1.0" 776 | object-assign "^4.1.1" 777 | 778 | resolve@^1.19.0: 779 | version "1.20.0" 780 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 781 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 782 | dependencies: 783 | is-core-module "^2.2.0" 784 | path-parse "^1.0.6" 785 | 786 | rollup@^2.38.5: 787 | version "2.45.2" 788 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.45.2.tgz#8fb85917c9f35605720e92328f3ccbfba6f78b48" 789 | integrity sha512-kRRU7wXzFHUzBIv0GfoFFIN3m9oteY4uAsKllIpQDId5cfnkWF2J130l+27dzDju0E6MScKiV0ZM5Bw8m4blYQ== 790 | optionalDependencies: 791 | fsevents "~2.3.1" 792 | 793 | safe-buffer@~5.1.1: 794 | version "5.1.2" 795 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 796 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 797 | 798 | scheduler@^0.20.2: 799 | version "0.20.2" 800 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" 801 | integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== 802 | dependencies: 803 | loose-envify "^1.1.0" 804 | object-assign "^4.1.1" 805 | 806 | semver@^6.0.0, semver@^6.3.0: 807 | version "6.3.0" 808 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 809 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 810 | 811 | sort-keys@^1.0.0: 812 | version "1.1.2" 813 | resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" 814 | integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= 815 | dependencies: 816 | is-plain-obj "^1.0.0" 817 | 818 | source-map@^0.5.0: 819 | version "0.5.7" 820 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 821 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 822 | 823 | source-map@^0.6.1: 824 | version "0.6.1" 825 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 826 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 827 | 828 | strict-uri-encode@^1.0.0: 829 | version "1.1.0" 830 | resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" 831 | integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= 832 | 833 | strip-outer@^1.0.0: 834 | version "1.0.1" 835 | resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" 836 | integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== 837 | dependencies: 838 | escape-string-regexp "^1.0.2" 839 | 840 | strip-url-auth@^1.0.0: 841 | version "1.0.1" 842 | resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" 843 | integrity sha1-IrD6OkE4WzO+PzMVUbu4N/oM164= 844 | 845 | supports-color@^5.3.0: 846 | version "5.5.0" 847 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 848 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 849 | dependencies: 850 | has-flag "^3.0.0" 851 | 852 | to-fast-properties@^2.0.0: 853 | version "2.0.0" 854 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 855 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 856 | 857 | trim-repeated@^1.0.0: 858 | version "1.0.0" 859 | resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" 860 | integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= 861 | dependencies: 862 | escape-string-regexp "^1.0.2" 863 | 864 | typescript@^4.1.2: 865 | version "4.2.4" 866 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961" 867 | integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg== 868 | 869 | universalify@^0.1.0: 870 | version "0.1.2" 871 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 872 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 873 | 874 | vite@^2.1.5: 875 | version "2.2.1" 876 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.2.1.tgz#90c481f69371f32867d86a6a623bb064b876ad3d" 877 | integrity sha512-KIqK90EoJJpuqE86Y9DSkZjFNGgsyZX/4I1xENIitLRd3hgRtOlIGCJYrNnBD9/eqipz0OroAiIj9/R1JcOdFA== 878 | dependencies: 879 | esbuild "^0.9.3" 880 | postcss "^8.2.1" 881 | resolve "^1.19.0" 882 | rollup "^2.38.5" 883 | optionalDependencies: 884 | fsevents "~2.3.1" 885 | 886 | wrappy@1: 887 | version "1.0.2" 888 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 889 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 890 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@types/debug': ^4.1.7 5 | '@types/react': ^17.0.0 6 | '@types/react-dom': ^17.0.0 7 | '@vitejs/plugin-react-refresh': ^1.3.1 8 | gh-pages: ^3.1.0 9 | ionicons: ^5.5.1 10 | jssha: ^3.2.0 11 | obs-websocket-js: ^5.0.1 12 | prettier: ^2.2.1 13 | react: ^17.0.0 14 | react-dom: ^17.0.0 15 | react-icons: ^4.2.0 16 | type-fest: ^2.19.0 17 | typescript: ^4.1.2 18 | vite: ^2.1.5 19 | 20 | dependencies: 21 | ionicons: 5.5.4 22 | jssha: 3.2.0 23 | obs-websocket-js: 5.0.1 24 | react: 17.0.2 25 | react-dom: 17.0.2_react@17.0.2 26 | react-icons: 4.3.1_react@17.0.2 27 | 28 | devDependencies: 29 | '@types/debug': 4.1.7 30 | '@types/react': 17.0.44 31 | '@types/react-dom': 17.0.16 32 | '@vitejs/plugin-react-refresh': 1.3.6 33 | gh-pages: 3.2.3 34 | prettier: 2.6.2 35 | type-fest: 2.19.0 36 | typescript: 4.6.4 37 | vite: 2.9.6 38 | 39 | packages: 40 | 41 | /@ampproject/remapping/2.2.0: 42 | resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} 43 | engines: {node: '>=6.0.0'} 44 | dependencies: 45 | '@jridgewell/gen-mapping': 0.1.1 46 | '@jridgewell/trace-mapping': 0.3.9 47 | dev: true 48 | 49 | /@babel/code-frame/7.16.7: 50 | resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} 51 | engines: {node: '>=6.9.0'} 52 | dependencies: 53 | '@babel/highlight': 7.17.9 54 | dev: true 55 | 56 | /@babel/compat-data/7.17.10: 57 | resolution: {integrity: sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==} 58 | engines: {node: '>=6.9.0'} 59 | dev: true 60 | 61 | /@babel/core/7.17.10: 62 | resolution: {integrity: sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==} 63 | engines: {node: '>=6.9.0'} 64 | dependencies: 65 | '@ampproject/remapping': 2.2.0 66 | '@babel/code-frame': 7.16.7 67 | '@babel/generator': 7.17.10 68 | '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.10 69 | '@babel/helper-module-transforms': 7.17.7 70 | '@babel/helpers': 7.17.9 71 | '@babel/parser': 7.17.10 72 | '@babel/template': 7.16.7 73 | '@babel/traverse': 7.17.10 74 | '@babel/types': 7.17.10 75 | convert-source-map: 1.8.0 76 | debug: 4.3.4 77 | gensync: 1.0.0-beta.2 78 | json5: 2.2.1 79 | semver: 6.3.0 80 | transitivePeerDependencies: 81 | - supports-color 82 | dev: true 83 | 84 | /@babel/generator/7.17.10: 85 | resolution: {integrity: sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==} 86 | engines: {node: '>=6.9.0'} 87 | dependencies: 88 | '@babel/types': 7.17.10 89 | '@jridgewell/gen-mapping': 0.1.1 90 | jsesc: 2.5.2 91 | dev: true 92 | 93 | /@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.10: 94 | resolution: {integrity: sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==} 95 | engines: {node: '>=6.9.0'} 96 | peerDependencies: 97 | '@babel/core': ^7.0.0 98 | dependencies: 99 | '@babel/compat-data': 7.17.10 100 | '@babel/core': 7.17.10 101 | '@babel/helper-validator-option': 7.16.7 102 | browserslist: 4.20.3 103 | semver: 6.3.0 104 | dev: true 105 | 106 | /@babel/helper-environment-visitor/7.16.7: 107 | resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} 108 | engines: {node: '>=6.9.0'} 109 | dependencies: 110 | '@babel/types': 7.17.10 111 | dev: true 112 | 113 | /@babel/helper-function-name/7.17.9: 114 | resolution: {integrity: sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==} 115 | engines: {node: '>=6.9.0'} 116 | dependencies: 117 | '@babel/template': 7.16.7 118 | '@babel/types': 7.17.10 119 | dev: true 120 | 121 | /@babel/helper-hoist-variables/7.16.7: 122 | resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} 123 | engines: {node: '>=6.9.0'} 124 | dependencies: 125 | '@babel/types': 7.17.10 126 | dev: true 127 | 128 | /@babel/helper-module-imports/7.16.7: 129 | resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} 130 | engines: {node: '>=6.9.0'} 131 | dependencies: 132 | '@babel/types': 7.17.10 133 | dev: true 134 | 135 | /@babel/helper-module-transforms/7.17.7: 136 | resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==} 137 | engines: {node: '>=6.9.0'} 138 | dependencies: 139 | '@babel/helper-environment-visitor': 7.16.7 140 | '@babel/helper-module-imports': 7.16.7 141 | '@babel/helper-simple-access': 7.17.7 142 | '@babel/helper-split-export-declaration': 7.16.7 143 | '@babel/helper-validator-identifier': 7.16.7 144 | '@babel/template': 7.16.7 145 | '@babel/traverse': 7.17.10 146 | '@babel/types': 7.17.10 147 | transitivePeerDependencies: 148 | - supports-color 149 | dev: true 150 | 151 | /@babel/helper-plugin-utils/7.16.7: 152 | resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} 153 | engines: {node: '>=6.9.0'} 154 | dev: true 155 | 156 | /@babel/helper-simple-access/7.17.7: 157 | resolution: {integrity: sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==} 158 | engines: {node: '>=6.9.0'} 159 | dependencies: 160 | '@babel/types': 7.17.10 161 | dev: true 162 | 163 | /@babel/helper-split-export-declaration/7.16.7: 164 | resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} 165 | engines: {node: '>=6.9.0'} 166 | dependencies: 167 | '@babel/types': 7.17.10 168 | dev: true 169 | 170 | /@babel/helper-validator-identifier/7.16.7: 171 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} 172 | engines: {node: '>=6.9.0'} 173 | dev: true 174 | 175 | /@babel/helper-validator-option/7.16.7: 176 | resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} 177 | engines: {node: '>=6.9.0'} 178 | dev: true 179 | 180 | /@babel/helpers/7.17.9: 181 | resolution: {integrity: sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==} 182 | engines: {node: '>=6.9.0'} 183 | dependencies: 184 | '@babel/template': 7.16.7 185 | '@babel/traverse': 7.17.10 186 | '@babel/types': 7.17.10 187 | transitivePeerDependencies: 188 | - supports-color 189 | dev: true 190 | 191 | /@babel/highlight/7.17.9: 192 | resolution: {integrity: sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==} 193 | engines: {node: '>=6.9.0'} 194 | dependencies: 195 | '@babel/helper-validator-identifier': 7.16.7 196 | chalk: 2.4.2 197 | js-tokens: 4.0.0 198 | dev: true 199 | 200 | /@babel/parser/7.17.10: 201 | resolution: {integrity: sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==} 202 | engines: {node: '>=6.0.0'} 203 | hasBin: true 204 | dependencies: 205 | '@babel/types': 7.17.10 206 | dev: true 207 | 208 | /@babel/plugin-transform-react-jsx-self/7.16.7_@babel+core@7.17.10: 209 | resolution: {integrity: sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==} 210 | engines: {node: '>=6.9.0'} 211 | peerDependencies: 212 | '@babel/core': ^7.0.0-0 213 | dependencies: 214 | '@babel/core': 7.17.10 215 | '@babel/helper-plugin-utils': 7.16.7 216 | dev: true 217 | 218 | /@babel/plugin-transform-react-jsx-source/7.16.7_@babel+core@7.17.10: 219 | resolution: {integrity: sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==} 220 | engines: {node: '>=6.9.0'} 221 | peerDependencies: 222 | '@babel/core': ^7.0.0-0 223 | dependencies: 224 | '@babel/core': 7.17.10 225 | '@babel/helper-plugin-utils': 7.16.7 226 | dev: true 227 | 228 | /@babel/template/7.16.7: 229 | resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} 230 | engines: {node: '>=6.9.0'} 231 | dependencies: 232 | '@babel/code-frame': 7.16.7 233 | '@babel/parser': 7.17.10 234 | '@babel/types': 7.17.10 235 | dev: true 236 | 237 | /@babel/traverse/7.17.10: 238 | resolution: {integrity: sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==} 239 | engines: {node: '>=6.9.0'} 240 | dependencies: 241 | '@babel/code-frame': 7.16.7 242 | '@babel/generator': 7.17.10 243 | '@babel/helper-environment-visitor': 7.16.7 244 | '@babel/helper-function-name': 7.17.9 245 | '@babel/helper-hoist-variables': 7.16.7 246 | '@babel/helper-split-export-declaration': 7.16.7 247 | '@babel/parser': 7.17.10 248 | '@babel/types': 7.17.10 249 | debug: 4.3.4 250 | globals: 11.12.0 251 | transitivePeerDependencies: 252 | - supports-color 253 | dev: true 254 | 255 | /@babel/types/7.17.10: 256 | resolution: {integrity: sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==} 257 | engines: {node: '>=6.9.0'} 258 | dependencies: 259 | '@babel/helper-validator-identifier': 7.16.7 260 | to-fast-properties: 2.0.0 261 | dev: true 262 | 263 | /@jridgewell/gen-mapping/0.1.1: 264 | resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} 265 | engines: {node: '>=6.0.0'} 266 | dependencies: 267 | '@jridgewell/set-array': 1.1.0 268 | '@jridgewell/sourcemap-codec': 1.4.11 269 | dev: true 270 | 271 | /@jridgewell/resolve-uri/3.0.6: 272 | resolution: {integrity: sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==} 273 | engines: {node: '>=6.0.0'} 274 | dev: true 275 | 276 | /@jridgewell/set-array/1.1.0: 277 | resolution: {integrity: sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg==} 278 | engines: {node: '>=6.0.0'} 279 | dev: true 280 | 281 | /@jridgewell/sourcemap-codec/1.4.11: 282 | resolution: {integrity: sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==} 283 | dev: true 284 | 285 | /@jridgewell/trace-mapping/0.3.9: 286 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 287 | dependencies: 288 | '@jridgewell/resolve-uri': 3.0.6 289 | '@jridgewell/sourcemap-codec': 1.4.11 290 | dev: true 291 | 292 | /@msgpack/msgpack/2.8.0: 293 | resolution: {integrity: sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==} 294 | engines: {node: '>= 10'} 295 | dev: false 296 | 297 | /@rollup/pluginutils/4.2.1: 298 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 299 | engines: {node: '>= 8.0.0'} 300 | dependencies: 301 | estree-walker: 2.0.2 302 | picomatch: 2.3.1 303 | dev: true 304 | 305 | /@stencil/core/2.10.0: 306 | resolution: {integrity: sha512-15rWMTPQ/sp0lSV82HVCXkIya3QLN+uBl7pqK4JnTrp4HiLrzLmNbWjbvgCs55gw0lULbCIGbRIEsFz+Pe/Q+A==} 307 | engines: {node: '>=12.10.0', npm: '>=6.0.0'} 308 | hasBin: true 309 | dev: false 310 | 311 | /@types/debug/4.1.7: 312 | resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} 313 | dependencies: 314 | '@types/ms': 0.7.31 315 | dev: true 316 | 317 | /@types/ms/0.7.31: 318 | resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} 319 | dev: true 320 | 321 | /@types/prop-types/15.7.5: 322 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 323 | dev: true 324 | 325 | /@types/react-dom/17.0.16: 326 | resolution: {integrity: sha512-DWcXf8EbMrO/gWnQU7Z88Ws/p16qxGpPyjTKTpmBSFKeE+HveVubqGO1CVK7FrwlWD5MuOcvh8gtd0/XO38NdQ==} 327 | dependencies: 328 | '@types/react': 17.0.44 329 | dev: true 330 | 331 | /@types/react/17.0.44: 332 | resolution: {integrity: sha512-Ye0nlw09GeMp2Suh8qoOv0odfgCoowfM/9MG6WeRD60Gq9wS90bdkdRtYbRkNhXOpG4H+YXGvj4wOWhAC0LJ1g==} 333 | dependencies: 334 | '@types/prop-types': 15.7.5 335 | '@types/scheduler': 0.16.2 336 | csstype: 3.0.11 337 | dev: true 338 | 339 | /@types/scheduler/0.16.2: 340 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} 341 | dev: true 342 | 343 | /@vitejs/plugin-react-refresh/1.3.6: 344 | resolution: {integrity: sha512-iNR/UqhUOmFFxiezt0em9CgmiJBdWR+5jGxB2FihaoJfqGt76kiwaKoVOJVU5NYcDWMdN06LbyN2VIGIoYdsEA==} 345 | engines: {node: '>=12.0.0'} 346 | deprecated: This package has been deprecated in favor of @vitejs/plugin-react 347 | dependencies: 348 | '@babel/core': 7.17.10 349 | '@babel/plugin-transform-react-jsx-self': 7.16.7_@babel+core@7.17.10 350 | '@babel/plugin-transform-react-jsx-source': 7.16.7_@babel+core@7.17.10 351 | '@rollup/pluginutils': 4.2.1 352 | react-refresh: 0.10.0 353 | transitivePeerDependencies: 354 | - supports-color 355 | dev: true 356 | 357 | /ansi-styles/3.2.1: 358 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 359 | engines: {node: '>=4'} 360 | dependencies: 361 | color-convert: 1.9.3 362 | dev: true 363 | 364 | /array-union/1.0.2: 365 | resolution: {integrity: sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=} 366 | engines: {node: '>=0.10.0'} 367 | dependencies: 368 | array-uniq: 1.0.3 369 | dev: true 370 | 371 | /array-uniq/1.0.3: 372 | resolution: {integrity: sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=} 373 | engines: {node: '>=0.10.0'} 374 | dev: true 375 | 376 | /async/2.6.4: 377 | resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} 378 | dependencies: 379 | lodash: 4.17.21 380 | dev: true 381 | 382 | /balanced-match/1.0.2: 383 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 384 | dev: true 385 | 386 | /brace-expansion/1.1.11: 387 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 388 | dependencies: 389 | balanced-match: 1.0.2 390 | concat-map: 0.0.1 391 | dev: true 392 | 393 | /browserslist/4.20.3: 394 | resolution: {integrity: sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==} 395 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 396 | hasBin: true 397 | dependencies: 398 | caniuse-lite: 1.0.30001335 399 | electron-to-chromium: 1.4.129 400 | escalade: 3.1.1 401 | node-releases: 2.0.4 402 | picocolors: 1.0.0 403 | dev: true 404 | 405 | /caniuse-lite/1.0.30001335: 406 | resolution: {integrity: sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w==} 407 | dev: true 408 | 409 | /chalk/2.4.2: 410 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 411 | engines: {node: '>=4'} 412 | dependencies: 413 | ansi-styles: 3.2.1 414 | escape-string-regexp: 1.0.5 415 | supports-color: 5.5.0 416 | dev: true 417 | 418 | /color-convert/1.9.3: 419 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 420 | dependencies: 421 | color-name: 1.1.3 422 | dev: true 423 | 424 | /color-name/1.1.3: 425 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} 426 | dev: true 427 | 428 | /commander/2.20.3: 429 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 430 | dev: true 431 | 432 | /commondir/1.0.1: 433 | resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=} 434 | dev: true 435 | 436 | /concat-map/0.0.1: 437 | resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} 438 | dev: true 439 | 440 | /convert-source-map/1.8.0: 441 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} 442 | dependencies: 443 | safe-buffer: 5.1.2 444 | dev: true 445 | 446 | /crypto-js/4.1.1: 447 | resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} 448 | dev: false 449 | 450 | /csstype/3.0.11: 451 | resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==} 452 | dev: true 453 | 454 | /debug/4.3.4: 455 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 456 | engines: {node: '>=6.0'} 457 | peerDependencies: 458 | supports-color: '*' 459 | peerDependenciesMeta: 460 | supports-color: 461 | optional: true 462 | dependencies: 463 | ms: 2.1.2 464 | 465 | /electron-to-chromium/1.4.129: 466 | resolution: {integrity: sha512-GgtN6bsDtHdtXJtlMYZWGB/uOyjZWjmRDumXTas7dGBaB9zUyCjzHet1DY2KhyHN8R0GLbzZWqm4efeddqqyRQ==} 467 | dev: true 468 | 469 | /email-addresses/3.1.0: 470 | resolution: {integrity: sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==} 471 | dev: true 472 | 473 | /esbuild-android-64/0.14.38: 474 | resolution: {integrity: sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==} 475 | engines: {node: '>=12'} 476 | cpu: [x64] 477 | os: [android] 478 | requiresBuild: true 479 | dev: true 480 | optional: true 481 | 482 | /esbuild-android-arm64/0.14.38: 483 | resolution: {integrity: sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==} 484 | engines: {node: '>=12'} 485 | cpu: [arm64] 486 | os: [android] 487 | requiresBuild: true 488 | dev: true 489 | optional: true 490 | 491 | /esbuild-darwin-64/0.14.38: 492 | resolution: {integrity: sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==} 493 | engines: {node: '>=12'} 494 | cpu: [x64] 495 | os: [darwin] 496 | requiresBuild: true 497 | dev: true 498 | optional: true 499 | 500 | /esbuild-darwin-arm64/0.14.38: 501 | resolution: {integrity: sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==} 502 | engines: {node: '>=12'} 503 | cpu: [arm64] 504 | os: [darwin] 505 | requiresBuild: true 506 | dev: true 507 | optional: true 508 | 509 | /esbuild-freebsd-64/0.14.38: 510 | resolution: {integrity: sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==} 511 | engines: {node: '>=12'} 512 | cpu: [x64] 513 | os: [freebsd] 514 | requiresBuild: true 515 | dev: true 516 | optional: true 517 | 518 | /esbuild-freebsd-arm64/0.14.38: 519 | resolution: {integrity: sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==} 520 | engines: {node: '>=12'} 521 | cpu: [arm64] 522 | os: [freebsd] 523 | requiresBuild: true 524 | dev: true 525 | optional: true 526 | 527 | /esbuild-linux-32/0.14.38: 528 | resolution: {integrity: sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==} 529 | engines: {node: '>=12'} 530 | cpu: [ia32] 531 | os: [linux] 532 | requiresBuild: true 533 | dev: true 534 | optional: true 535 | 536 | /esbuild-linux-64/0.14.38: 537 | resolution: {integrity: sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==} 538 | engines: {node: '>=12'} 539 | cpu: [x64] 540 | os: [linux] 541 | requiresBuild: true 542 | dev: true 543 | optional: true 544 | 545 | /esbuild-linux-arm/0.14.38: 546 | resolution: {integrity: sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==} 547 | engines: {node: '>=12'} 548 | cpu: [arm] 549 | os: [linux] 550 | requiresBuild: true 551 | dev: true 552 | optional: true 553 | 554 | /esbuild-linux-arm64/0.14.38: 555 | resolution: {integrity: sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==} 556 | engines: {node: '>=12'} 557 | cpu: [arm64] 558 | os: [linux] 559 | requiresBuild: true 560 | dev: true 561 | optional: true 562 | 563 | /esbuild-linux-mips64le/0.14.38: 564 | resolution: {integrity: sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==} 565 | engines: {node: '>=12'} 566 | cpu: [mips64el] 567 | os: [linux] 568 | requiresBuild: true 569 | dev: true 570 | optional: true 571 | 572 | /esbuild-linux-ppc64le/0.14.38: 573 | resolution: {integrity: sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==} 574 | engines: {node: '>=12'} 575 | cpu: [ppc64] 576 | os: [linux] 577 | requiresBuild: true 578 | dev: true 579 | optional: true 580 | 581 | /esbuild-linux-riscv64/0.14.38: 582 | resolution: {integrity: sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==} 583 | engines: {node: '>=12'} 584 | cpu: [riscv64] 585 | os: [linux] 586 | requiresBuild: true 587 | dev: true 588 | optional: true 589 | 590 | /esbuild-linux-s390x/0.14.38: 591 | resolution: {integrity: sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==} 592 | engines: {node: '>=12'} 593 | cpu: [s390x] 594 | os: [linux] 595 | requiresBuild: true 596 | dev: true 597 | optional: true 598 | 599 | /esbuild-netbsd-64/0.14.38: 600 | resolution: {integrity: sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==} 601 | engines: {node: '>=12'} 602 | cpu: [x64] 603 | os: [netbsd] 604 | requiresBuild: true 605 | dev: true 606 | optional: true 607 | 608 | /esbuild-openbsd-64/0.14.38: 609 | resolution: {integrity: sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==} 610 | engines: {node: '>=12'} 611 | cpu: [x64] 612 | os: [openbsd] 613 | requiresBuild: true 614 | dev: true 615 | optional: true 616 | 617 | /esbuild-sunos-64/0.14.38: 618 | resolution: {integrity: sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==} 619 | engines: {node: '>=12'} 620 | cpu: [x64] 621 | os: [sunos] 622 | requiresBuild: true 623 | dev: true 624 | optional: true 625 | 626 | /esbuild-windows-32/0.14.38: 627 | resolution: {integrity: sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==} 628 | engines: {node: '>=12'} 629 | cpu: [ia32] 630 | os: [win32] 631 | requiresBuild: true 632 | dev: true 633 | optional: true 634 | 635 | /esbuild-windows-64/0.14.38: 636 | resolution: {integrity: sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==} 637 | engines: {node: '>=12'} 638 | cpu: [x64] 639 | os: [win32] 640 | requiresBuild: true 641 | dev: true 642 | optional: true 643 | 644 | /esbuild-windows-arm64/0.14.38: 645 | resolution: {integrity: sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==} 646 | engines: {node: '>=12'} 647 | cpu: [arm64] 648 | os: [win32] 649 | requiresBuild: true 650 | dev: true 651 | optional: true 652 | 653 | /esbuild/0.14.38: 654 | resolution: {integrity: sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==} 655 | engines: {node: '>=12'} 656 | hasBin: true 657 | requiresBuild: true 658 | optionalDependencies: 659 | esbuild-android-64: 0.14.38 660 | esbuild-android-arm64: 0.14.38 661 | esbuild-darwin-64: 0.14.38 662 | esbuild-darwin-arm64: 0.14.38 663 | esbuild-freebsd-64: 0.14.38 664 | esbuild-freebsd-arm64: 0.14.38 665 | esbuild-linux-32: 0.14.38 666 | esbuild-linux-64: 0.14.38 667 | esbuild-linux-arm: 0.14.38 668 | esbuild-linux-arm64: 0.14.38 669 | esbuild-linux-mips64le: 0.14.38 670 | esbuild-linux-ppc64le: 0.14.38 671 | esbuild-linux-riscv64: 0.14.38 672 | esbuild-linux-s390x: 0.14.38 673 | esbuild-netbsd-64: 0.14.38 674 | esbuild-openbsd-64: 0.14.38 675 | esbuild-sunos-64: 0.14.38 676 | esbuild-windows-32: 0.14.38 677 | esbuild-windows-64: 0.14.38 678 | esbuild-windows-arm64: 0.14.38 679 | dev: true 680 | 681 | /escalade/3.1.1: 682 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 683 | engines: {node: '>=6'} 684 | dev: true 685 | 686 | /escape-string-regexp/1.0.5: 687 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} 688 | engines: {node: '>=0.8.0'} 689 | dev: true 690 | 691 | /estree-walker/2.0.2: 692 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 693 | dev: true 694 | 695 | /eventemitter3/4.0.7: 696 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} 697 | dev: false 698 | 699 | /filename-reserved-regex/2.0.0: 700 | resolution: {integrity: sha1-q/c9+rc10EVECr/qLZHzieu/oik=} 701 | engines: {node: '>=4'} 702 | dev: true 703 | 704 | /filenamify/4.3.0: 705 | resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} 706 | engines: {node: '>=8'} 707 | dependencies: 708 | filename-reserved-regex: 2.0.0 709 | strip-outer: 1.0.1 710 | trim-repeated: 1.0.0 711 | dev: true 712 | 713 | /find-cache-dir/3.3.2: 714 | resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} 715 | engines: {node: '>=8'} 716 | dependencies: 717 | commondir: 1.0.1 718 | make-dir: 3.1.0 719 | pkg-dir: 4.2.0 720 | dev: true 721 | 722 | /find-up/4.1.0: 723 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 724 | engines: {node: '>=8'} 725 | dependencies: 726 | locate-path: 5.0.0 727 | path-exists: 4.0.0 728 | dev: true 729 | 730 | /fs-extra/8.1.0: 731 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 732 | engines: {node: '>=6 <7 || >=8'} 733 | dependencies: 734 | graceful-fs: 4.2.10 735 | jsonfile: 4.0.0 736 | universalify: 0.1.2 737 | dev: true 738 | 739 | /fs.realpath/1.0.0: 740 | resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} 741 | dev: true 742 | 743 | /fsevents/2.3.2: 744 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 745 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 746 | os: [darwin] 747 | requiresBuild: true 748 | dev: true 749 | optional: true 750 | 751 | /function-bind/1.1.1: 752 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 753 | dev: true 754 | 755 | /gensync/1.0.0-beta.2: 756 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 757 | engines: {node: '>=6.9.0'} 758 | dev: true 759 | 760 | /gh-pages/3.2.3: 761 | resolution: {integrity: sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg==} 762 | engines: {node: '>=10'} 763 | hasBin: true 764 | dependencies: 765 | async: 2.6.4 766 | commander: 2.20.3 767 | email-addresses: 3.1.0 768 | filenamify: 4.3.0 769 | find-cache-dir: 3.3.2 770 | fs-extra: 8.1.0 771 | globby: 6.1.0 772 | dev: true 773 | 774 | /glob/7.2.0: 775 | resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} 776 | dependencies: 777 | fs.realpath: 1.0.0 778 | inflight: 1.0.6 779 | inherits: 2.0.4 780 | minimatch: 3.1.2 781 | once: 1.4.0 782 | path-is-absolute: 1.0.1 783 | dev: true 784 | 785 | /globals/11.12.0: 786 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 787 | engines: {node: '>=4'} 788 | dev: true 789 | 790 | /globby/6.1.0: 791 | resolution: {integrity: sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=} 792 | engines: {node: '>=0.10.0'} 793 | dependencies: 794 | array-union: 1.0.2 795 | glob: 7.2.0 796 | object-assign: 4.1.1 797 | pify: 2.3.0 798 | pinkie-promise: 2.0.1 799 | dev: true 800 | 801 | /graceful-fs/4.2.10: 802 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 803 | dev: true 804 | 805 | /has-flag/3.0.0: 806 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} 807 | engines: {node: '>=4'} 808 | dev: true 809 | 810 | /has/1.0.3: 811 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 812 | engines: {node: '>= 0.4.0'} 813 | dependencies: 814 | function-bind: 1.1.1 815 | dev: true 816 | 817 | /inflight/1.0.6: 818 | resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} 819 | dependencies: 820 | once: 1.4.0 821 | wrappy: 1.0.2 822 | dev: true 823 | 824 | /inherits/2.0.4: 825 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 826 | dev: true 827 | 828 | /ionicons/5.5.4: 829 | resolution: {integrity: sha512-3ph8X9my3inhabWEZ7N0XRA0MnnNQ1v9a602mLNgWsIXnxE9G5BybIZ/pws/OZZ/hoNlvSjk801N03yL9/FNgQ==} 830 | dependencies: 831 | '@stencil/core': 2.10.0 832 | dev: false 833 | 834 | /is-core-module/2.9.0: 835 | resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} 836 | dependencies: 837 | has: 1.0.3 838 | dev: true 839 | 840 | /isomorphic-ws/4.0.1_ws@8.8.1: 841 | resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} 842 | peerDependencies: 843 | ws: '*' 844 | dependencies: 845 | ws: 8.8.1 846 | dev: false 847 | 848 | /js-tokens/4.0.0: 849 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 850 | 851 | /jsesc/2.5.2: 852 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 853 | engines: {node: '>=4'} 854 | hasBin: true 855 | dev: true 856 | 857 | /json5/2.2.1: 858 | resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} 859 | engines: {node: '>=6'} 860 | hasBin: true 861 | dev: true 862 | 863 | /jsonfile/4.0.0: 864 | resolution: {integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=} 865 | optionalDependencies: 866 | graceful-fs: 4.2.10 867 | dev: true 868 | 869 | /jssha/3.2.0: 870 | resolution: {integrity: sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q==} 871 | dev: false 872 | 873 | /locate-path/5.0.0: 874 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 875 | engines: {node: '>=8'} 876 | dependencies: 877 | p-locate: 4.1.0 878 | dev: true 879 | 880 | /lodash/4.17.21: 881 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 882 | dev: true 883 | 884 | /loose-envify/1.4.0: 885 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 886 | hasBin: true 887 | dependencies: 888 | js-tokens: 4.0.0 889 | dev: false 890 | 891 | /make-dir/3.1.0: 892 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 893 | engines: {node: '>=8'} 894 | dependencies: 895 | semver: 6.3.0 896 | dev: true 897 | 898 | /minimatch/3.1.2: 899 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 900 | dependencies: 901 | brace-expansion: 1.1.11 902 | dev: true 903 | 904 | /ms/2.1.2: 905 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 906 | 907 | /nanoid/3.3.3: 908 | resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} 909 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 910 | hasBin: true 911 | dev: true 912 | 913 | /node-releases/2.0.4: 914 | resolution: {integrity: sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==} 915 | dev: true 916 | 917 | /object-assign/4.1.1: 918 | resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} 919 | engines: {node: '>=0.10.0'} 920 | 921 | /obs-websocket-js/5.0.1: 922 | resolution: {integrity: sha512-3oWN1g/gA2A2g9OxubLPKAqBKhAoNGYnF3QIYp6fZ2kfE4Az1PqCnd5zwgRsh5j49uTWyfuX199HkRSsaJE3mw==} 923 | engines: {node: '>12.0'} 924 | dependencies: 925 | '@msgpack/msgpack': 2.8.0 926 | crypto-js: 4.1.1 927 | debug: 4.3.4 928 | eventemitter3: 4.0.7 929 | isomorphic-ws: 4.0.1_ws@8.8.1 930 | type-fest: 2.19.0 931 | ws: 8.8.1 932 | transitivePeerDependencies: 933 | - bufferutil 934 | - supports-color 935 | - utf-8-validate 936 | dev: false 937 | 938 | /once/1.4.0: 939 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} 940 | dependencies: 941 | wrappy: 1.0.2 942 | dev: true 943 | 944 | /p-limit/2.3.0: 945 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 946 | engines: {node: '>=6'} 947 | dependencies: 948 | p-try: 2.2.0 949 | dev: true 950 | 951 | /p-locate/4.1.0: 952 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 953 | engines: {node: '>=8'} 954 | dependencies: 955 | p-limit: 2.3.0 956 | dev: true 957 | 958 | /p-try/2.2.0: 959 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 960 | engines: {node: '>=6'} 961 | dev: true 962 | 963 | /path-exists/4.0.0: 964 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 965 | engines: {node: '>=8'} 966 | dev: true 967 | 968 | /path-is-absolute/1.0.1: 969 | resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} 970 | engines: {node: '>=0.10.0'} 971 | dev: true 972 | 973 | /path-parse/1.0.7: 974 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 975 | dev: true 976 | 977 | /picocolors/1.0.0: 978 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 979 | dev: true 980 | 981 | /picomatch/2.3.1: 982 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 983 | engines: {node: '>=8.6'} 984 | dev: true 985 | 986 | /pify/2.3.0: 987 | resolution: {integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=} 988 | engines: {node: '>=0.10.0'} 989 | dev: true 990 | 991 | /pinkie-promise/2.0.1: 992 | resolution: {integrity: sha1-ITXW36ejWMBprJsXh3YogihFD/o=} 993 | engines: {node: '>=0.10.0'} 994 | dependencies: 995 | pinkie: 2.0.4 996 | dev: true 997 | 998 | /pinkie/2.0.4: 999 | resolution: {integrity: sha1-clVrgM+g1IqXToDnckjoDtT3+HA=} 1000 | engines: {node: '>=0.10.0'} 1001 | dev: true 1002 | 1003 | /pkg-dir/4.2.0: 1004 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 1005 | engines: {node: '>=8'} 1006 | dependencies: 1007 | find-up: 4.1.0 1008 | dev: true 1009 | 1010 | /postcss/8.4.13: 1011 | resolution: {integrity: sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==} 1012 | engines: {node: ^10 || ^12 || >=14} 1013 | dependencies: 1014 | nanoid: 3.3.3 1015 | picocolors: 1.0.0 1016 | source-map-js: 1.0.2 1017 | dev: true 1018 | 1019 | /prettier/2.6.2: 1020 | resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==} 1021 | engines: {node: '>=10.13.0'} 1022 | hasBin: true 1023 | dev: true 1024 | 1025 | /react-dom/17.0.2_react@17.0.2: 1026 | resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} 1027 | peerDependencies: 1028 | react: 17.0.2 1029 | dependencies: 1030 | loose-envify: 1.4.0 1031 | object-assign: 4.1.1 1032 | react: 17.0.2 1033 | scheduler: 0.20.2 1034 | dev: false 1035 | 1036 | /react-icons/4.3.1_react@17.0.2: 1037 | resolution: {integrity: sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ==} 1038 | peerDependencies: 1039 | react: '*' 1040 | dependencies: 1041 | react: 17.0.2 1042 | dev: false 1043 | 1044 | /react-refresh/0.10.0: 1045 | resolution: {integrity: sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ==} 1046 | engines: {node: '>=0.10.0'} 1047 | dev: true 1048 | 1049 | /react/17.0.2: 1050 | resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} 1051 | engines: {node: '>=0.10.0'} 1052 | dependencies: 1053 | loose-envify: 1.4.0 1054 | object-assign: 4.1.1 1055 | dev: false 1056 | 1057 | /resolve/1.22.0: 1058 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 1059 | hasBin: true 1060 | dependencies: 1061 | is-core-module: 2.9.0 1062 | path-parse: 1.0.7 1063 | supports-preserve-symlinks-flag: 1.0.0 1064 | dev: true 1065 | 1066 | /rollup/2.71.1: 1067 | resolution: {integrity: sha512-lMZk3XfUBGjrrZQpvPSoXcZSfKcJ2Bgn+Z0L1MoW2V8Wh7BVM+LOBJTPo16yul2MwL59cXedzW1ruq3rCjSRgw==} 1068 | engines: {node: '>=10.0.0'} 1069 | hasBin: true 1070 | optionalDependencies: 1071 | fsevents: 2.3.2 1072 | dev: true 1073 | 1074 | /safe-buffer/5.1.2: 1075 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1076 | dev: true 1077 | 1078 | /scheduler/0.20.2: 1079 | resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} 1080 | dependencies: 1081 | loose-envify: 1.4.0 1082 | object-assign: 4.1.1 1083 | dev: false 1084 | 1085 | /semver/6.3.0: 1086 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 1087 | hasBin: true 1088 | dev: true 1089 | 1090 | /source-map-js/1.0.2: 1091 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1092 | engines: {node: '>=0.10.0'} 1093 | dev: true 1094 | 1095 | /strip-outer/1.0.1: 1096 | resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} 1097 | engines: {node: '>=0.10.0'} 1098 | dependencies: 1099 | escape-string-regexp: 1.0.5 1100 | dev: true 1101 | 1102 | /supports-color/5.5.0: 1103 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1104 | engines: {node: '>=4'} 1105 | dependencies: 1106 | has-flag: 3.0.0 1107 | dev: true 1108 | 1109 | /supports-preserve-symlinks-flag/1.0.0: 1110 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1111 | engines: {node: '>= 0.4'} 1112 | dev: true 1113 | 1114 | /to-fast-properties/2.0.0: 1115 | resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} 1116 | engines: {node: '>=4'} 1117 | dev: true 1118 | 1119 | /trim-repeated/1.0.0: 1120 | resolution: {integrity: sha1-42RqLqTokTEr9+rObPsFOAvAHCE=} 1121 | engines: {node: '>=0.10.0'} 1122 | dependencies: 1123 | escape-string-regexp: 1.0.5 1124 | dev: true 1125 | 1126 | /type-fest/2.19.0: 1127 | resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} 1128 | engines: {node: '>=12.20'} 1129 | 1130 | /typescript/4.6.4: 1131 | resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==} 1132 | engines: {node: '>=4.2.0'} 1133 | hasBin: true 1134 | dev: true 1135 | 1136 | /universalify/0.1.2: 1137 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 1138 | engines: {node: '>= 4.0.0'} 1139 | dev: true 1140 | 1141 | /vite/2.9.6: 1142 | resolution: {integrity: sha512-3IffdrByHW95Yjv0a13TQOQfJs7L5dVlSPuTt432XLbRMriWbThqJN2k/IS6kXn5WY4xBLhK9XoaWay1B8VzUw==} 1143 | engines: {node: '>=12.2.0'} 1144 | hasBin: true 1145 | peerDependencies: 1146 | less: '*' 1147 | sass: '*' 1148 | stylus: '*' 1149 | peerDependenciesMeta: 1150 | less: 1151 | optional: true 1152 | sass: 1153 | optional: true 1154 | stylus: 1155 | optional: true 1156 | dependencies: 1157 | esbuild: 0.14.38 1158 | postcss: 8.4.13 1159 | resolve: 1.22.0 1160 | rollup: 2.71.1 1161 | optionalDependencies: 1162 | fsevents: 2.3.2 1163 | dev: true 1164 | 1165 | /wrappy/1.0.2: 1166 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} 1167 | dev: true 1168 | 1169 | /ws/8.8.1: 1170 | resolution: {integrity: sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==} 1171 | engines: {node: '>=10.0.0'} 1172 | peerDependencies: 1173 | bufferutil: ^4.0.1 1174 | utf-8-validate: ^5.0.2 1175 | peerDependenciesMeta: 1176 | bufferutil: 1177 | optional: true 1178 | utf-8-validate: 1179 | optional: true 1180 | dev: false 1181 | --------------------------------------------------------------------------------