├── 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 | 
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 |
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 |
--------------------------------------------------------------------------------