diff --git a/index.html b/index.html
index 555faec..13e2eac 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,7 @@
-
Coh3 Stats Desktop App (Alpha)
+ Coh3 Stats Desktop App
diff --git a/package.json b/package.json
index bc103ee..31b7e3c 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "coh3-stats-desktop-app",
"private": true,
- "version": "0.0.8",
+ "version": "0.0.9",
"type": "module",
"scripts": {
"dev": "vite",
@@ -14,6 +14,7 @@
"@emotion/react": "^11.10.6",
"@mantine/core": "^6.0.0",
"@mantine/hooks": "^6.0.0",
+ "@tabler/icons-react": "^2.7.0",
"@tauri-apps/api": "^1.2.0",
"axios": "^1.3.4",
"coh-stats-components": "github:cohstats/coh-stats-components#0.0.7",
diff --git a/public/instructions/navigateToPath.png b/public/instructions/navigateToPath.png
new file mode 100644
index 0000000..1dbdd06
Binary files /dev/null and b/public/instructions/navigateToPath.png differ
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index ffe48fa..9b198f5 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -287,7 +287,7 @@ dependencies = [
[[package]]
name = "coh3-stats-desktop-app"
-version = "0.0.8"
+version = "0.0.9"
dependencies = [
"nom",
"notify",
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index 9f4c29b..62104b2 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "coh3-stats-desktop-app"
-version = "0.0.8"
+version = "0.0.9"
description = "A Tauri App"
authors = ["you"]
license = ""
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index 391d36e..fd8ed97 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -7,7 +7,7 @@
},
"package": {
"productName": "Coh3 Stats Desktop App",
- "version": "0.0.8"
+ "version": "0.0.9"
},
"tauri": {
"allowlist": {
@@ -16,6 +16,16 @@
"all": true,
"request": true,
"scope": ["https://coh3-api.reliclink.com/*"]
+ },
+ "fs": {
+ "writeFile": true,
+ "scope": ["$APPDATA/*"]
+ },
+ "path": {
+ "all": false
+ },
+ "clipboard": {
+ "writeText": true
}
},
"bundle": {
diff --git a/src/Game.tsx b/src/Game.tsx
index 5d5653c..a3758a3 100644
--- a/src/Game.tsx
+++ b/src/Game.tsx
@@ -4,7 +4,6 @@ import { PlayerCard } from "./components/PlayerCard"
export const Game: React.FC = () => {
const gameData = useGameData()
- console.log("gamedata", gameData)
return (
<>
{gameData.logFileFound ? (
@@ -53,7 +52,12 @@ export const Game: React.FC = () => {
)}
>
) : (
- <>Could not find Log File>
+
+
+
+ Waiting for logfile
+
+
)}
>
)
diff --git a/src/Settings.tsx b/src/Settings.tsx
index a4233e1..b90f1f2 100644
--- a/src/Settings.tsx
+++ b/src/Settings.tsx
@@ -1,12 +1,98 @@
import { useGameData } from "./game-data-provider/GameDataProvider"
import { ColorSchemeToggle } from "coh-stats-components"
-import { Box } from "@mantine/core"
+import {
+ Box,
+ Group,
+ Stack,
+ Divider,
+ Input,
+ ActionIcon,
+ Text,
+ List,
+ Image,
+} from "@mantine/core"
+import { appDataDir } from "@tauri-apps/api/path"
+import { writeText } from "@tauri-apps/api/clipboard"
+import { useEffect, useState } from "react"
+import { IconCopy } from "@tabler/icons-react"
export const Settings: React.FC = () => {
+ const [appDataPath, setAppDataPath] = useState("")
+ useEffect(() => {
+ const getAppDataPath = async () => {
+ const path = await appDataDir()
+ setAppDataPath(path)
+ }
+ if (appDataPath === "") {
+ getAppDataPath()
+ }
+ }, [appDataPath])
+
return (
<>
- Color Theme:
+
+
+ Color Theme:
+
+
+
+
+
+
+
+ OBS Streamer Overlay instructions:
+
+
+
+ In OBS Sources section click on "Add Source" and
+ select Browser
+
+
+ In the Browser source settings tick "Local File"
+
+
+ Copy this path: {" "}
+
+
+ {
+ writeText(appDataPath)
+ }}
+ >
+
+
+
+
+
+ In the Local File section click on "Browse"
+
+
+ An explorer window opens. Paste the copied path
+ into the path field shown in the image below:
+
+
+
+ Select the file "streamerOverlay.html" and click
+ on open
+
+
+ Set the Width to 1920 and the Height to 1080
+
+
+ Click ok. All Done! The overlay will display
+ player ranks only when loading or ingame!
+
+
+
+
>
)
diff --git a/src/game-data-provider/gameClosedObject b/src/game-data-provider/gameClosedObject
deleted file mode 100644
index 8342b99..0000000
--- a/src/game-data-provider/gameClosedObject
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "duration": 0,
- "game_state": "Closed",
- "game_type": "Custom",
- "left": {
- "players": [],
- "side": "Mixed"
- },
- "map": "",
- "right": {
- "players": [],
- "side": "Mixed"
- },
- "timestamp": "",
- "win_condition": ""
-}
\ No newline at end of file
diff --git a/src/game-data-provider/gameStateObject b/src/game-data-provider/gameStateObject
deleted file mode 100644
index 275dcd4..0000000
--- a/src/game-data-provider/gameStateObject
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- "duration": 1192,
- "game_state": "Menu",
- "game_type": "Classic",
- "left": {
- "players": [
- {
- "ai": false,
- "faction": "aef",
- "name": "John Wickedsick",
- "position": 6,
- "relic_id": "2184131"
- },
- {
- "ai": false,
- "faction": "soviet",
- "name": "Bleb Feesh",
- "position": 4,
- "relic_id": "1991789"
- },
- {
- "ai": false,
- "faction": "british",
- "name": "Vodyani Fox",
- "position": 2,
- "relic_id": "1642302"
- },
- {
- "ai": false,
- "faction": "aef",
- "name": "Shadow Link",
- "position": 0,
- "relic_id": "2090822"
- }
- ],
- "side": "Allies"
- },
- "map": "8p_general_mud",
- "right": {
- "players": [
- {
- "ai": false,
- "faction": "german",
- "name": "Obnoxious Turd",
- "position": 7,
- "relic_id": "3922"
- },
- {
- "ai": false,
- "faction": "german",
- "name": "DasPlumber",
- "position": 5,
- "relic_id": "2603041"
- },
- {
- "ai": false,
- "faction": "west_german",
- "name": "Johnny Ammo",
- "position": 3,
- "relic_id": "28047"
- },
- {
- "ai": false,
- "faction": "west_german",
- "name": "Valentijn",
- "position": 1,
- "relic_id": "5724168"
- }
- ],
- "side": "Axis"
- },
- "timestamp": "01:40:28.10",
- "win_condition": "victory_point"
-}
diff --git a/src/game-data-provider/useFullGameData.tsx b/src/game-data-provider/useFullGameData.tsx
index e397268..99aab65 100644
--- a/src/game-data-provider/useFullGameData.tsx
+++ b/src/game-data-provider/useFullGameData.tsx
@@ -4,10 +4,8 @@ import {
FullGameData,
FullPlayerData,
GameState,
- GameType,
RawGameData,
RawTeamData,
- TeamSide,
} from "./GameData"
import { useRawGameData } from "./useRawGameData"
import { fetch } from "@tauri-apps/api/http"
@@ -18,6 +16,7 @@ import {
logFileRaceTypeToRaceType,
} from "coh3-data-types-library"
import { MantineColor } from "@mantine/core"
+import { renderStreamerHTML } from "../streamer-overlay/renderStreamerOverlay"
const PLAYER_COLOR_OBJECT: { left: MantineColor[]; right: MantineColor[] } = {
left: ["blue", "blue", "blue", "blue"],
@@ -33,6 +32,7 @@ export const useFullGameData = () => {
reloadLogFile,
} = useRawGameData()
const lastGameUniqueKeyRef = useRef("")
+ const lastGameStateRef = useRef()
const [gameData, setGameData] = useState()
const generateUniqueGameKey = useCallback((rawGameData: RawGameData) => {
@@ -106,11 +106,8 @@ export const useFullGameData = () => {
member.level
refinedPlayerData[refinedPlayerIndex].xp = member.xp
}
- console.log(gameMode)
- console.log(response.faction)
const leaderboardID =
leaderboardsIDAsObject[gameMode][response.faction]
- console.log(leaderboardID)
const leaderboard = data.leaderboardStats.find(
(leaderboard) =>
leaderboard.leaderboard_id === leaderboardID
@@ -151,7 +148,7 @@ export const useFullGameData = () => {
refineSide(rawGameData.left, true),
refineSide(rawGameData.right, false),
])
- setGameData({
+ const newGameData: FullGameData = {
uniqueID: generateUniqueGameKey(rawGameData),
state: rawGameData.game_state,
type: rawGameData.game_type,
@@ -167,21 +164,31 @@ export const useFullGameData = () => {
side: rawGameData.right.side,
players: rightRefined,
},
- })
- console.log("done")
+ }
+ renderStreamerHTML(newGameData)
+ setGameData(newGameData)
} catch (e: any) {
console.error(e)
}
}
- if (
- logFileFound &&
- rawGameData &&
- lastGameUniqueKeyRef.current !== generateUniqueGameKey(rawGameData)
- ) {
- console.log("Refine log file data")
- console.log(rawGameData)
- refineLogFileData(rawGameData)
- lastGameUniqueKeyRef.current = generateUniqueGameKey(rawGameData)
+ // when raw data from log file changes check if its a new game with the generated unique key and refine data external api data
+ if (logFileFound && rawGameData) {
+ if (
+ lastGameUniqueKeyRef.current !==
+ generateUniqueGameKey(rawGameData)
+ ) {
+ refineLogFileData(rawGameData)
+ lastGameUniqueKeyRef.current =
+ generateUniqueGameKey(rawGameData)
+ } else if (lastGameStateRef.current !== rawGameData.game_state) {
+ if (gameData) {
+ lastGameStateRef.current = rawGameData.game_state
+ const newGameData = gameData
+ newGameData.state = rawGameData.game_state
+ renderStreamerHTML(newGameData)
+ setGameData(newGameData)
+ }
+ }
}
}, [logFilePath, rawGameData])
diff --git a/src/game-data-provider/useRawGameData.tsx b/src/game-data-provider/useRawGameData.tsx
index 74f8443..ee46ad3 100644
--- a/src/game-data-provider/useRawGameData.tsx
+++ b/src/game-data-provider/useRawGameData.tsx
@@ -14,7 +14,6 @@ export const useRawGameData = () => {
setRawGameData(data)
}
const interval = useInterval(() => {
- console.log("Check log file")
if (logFilePath !== undefined) {
getLogFileData(logFilePath)
}
diff --git a/src/streamer-overlay/HTML.tsx b/src/streamer-overlay/HTML.tsx
new file mode 100644
index 0000000..c53edf3
--- /dev/null
+++ b/src/streamer-overlay/HTML.tsx
@@ -0,0 +1,54 @@
+import React from "react"
+
+export interface HTMLProps {
+ html: string
+}
+
+export const HTML: React.FC = ({ html }) => {
+ return (
+
+
+
+
+
+
+
+
+
+ Coh3 Stats Desktop App Overlay
+
+
+
+
+
+
+ )
+}
+
+/*
+ background: url(https://i.ytimg.com/vi/NVqOvsHxqFc/maxresdefault.jpg) no-repeat center center fixed;
+ -webkit-background-size: cover;
+ -moz-background-size: cover;
+ -o-background-size: cover;
+ background-size: cover;
+*/
diff --git a/src/streamer-overlay/OverlayApp.tsx b/src/streamer-overlay/OverlayApp.tsx
new file mode 100644
index 0000000..5829868
--- /dev/null
+++ b/src/streamer-overlay/OverlayApp.tsx
@@ -0,0 +1,60 @@
+import { MantineProvider } from "@mantine/styles"
+import React from "react"
+import { FullGameData } from "../game-data-provider/GameData"
+import { PlayerEntry } from "./PlayerEntry"
+
+export interface OverlayAppProps {
+ gameData: FullGameData
+}
+
+export const OverlayApp: React.FC = ({ gameData }) => {
+ return (
+ <>
+ {gameData.state === "Loading" || gameData.state === "InGame" ? (
+
+
+ {gameData.left.players.map((player, index) => (
+
+ ))}
+
+
+ {gameData.right.players.map((player, index) => (
+
+ ))}
+
+
+ ) : null}
+ >
+ )
+}
diff --git a/src/streamer-overlay/PlayerEntry.tsx b/src/streamer-overlay/PlayerEntry.tsx
new file mode 100644
index 0000000..1637dfb
--- /dev/null
+++ b/src/streamer-overlay/PlayerEntry.tsx
@@ -0,0 +1,64 @@
+import React from "react"
+import { FullPlayerData } from "../game-data-provider/GameData"
+
+export interface PlayerEntryProps {
+ playerData: FullPlayerData
+}
+
+export const PlayerEntry: React.FC = ({ playerData }) => {
+ return (
+
+
+
+ {playerData.rank === undefined || playerData.rank === -1
+ ? "-"
+ : "#" + playerData.rank}
+ {" "}
+
+ {playerData.rating === undefined || playerData.rating === -1
+ ? "-"
+ : playerData.rating}
+ {" "}
+
+ {playerData.name}
+
+
+ )
+}
diff --git a/src/streamer-overlay/renderStreamerOverlay.tsx b/src/streamer-overlay/renderStreamerOverlay.tsx
new file mode 100644
index 0000000..9e899ba
--- /dev/null
+++ b/src/streamer-overlay/renderStreamerOverlay.tsx
@@ -0,0 +1,14 @@
+import { FullGameData } from "../game-data-provider/GameData"
+import { BaseDirectory, writeTextFile } from "@tauri-apps/api/fs"
+import { renderToStaticMarkup, renderToString } from "react-dom/server"
+import { OverlayApp } from "./OverlayApp"
+import { HTML } from "./HTML"
+
+export const renderStreamerHTML = async (gameData: FullGameData) => {
+ const content = renderToString( )
+ const html = renderToStaticMarkup( )
+ console.log("HTML", HTML)
+ await writeTextFile("streamerOverlay.html", `\n${html}`, {
+ dir: BaseDirectory.AppData,
+ })
+}
diff --git a/yarn.lock b/yarn.lock
index da71a07..7e58239 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -278,6 +278,16 @@
"@emotion/utils" "^1.2.0"
csstype "^3.0.2"
+"@emotion/server@^11.10.0":
+ version "11.10.0"
+ resolved "https://registry.yarnpkg.com/@emotion/server/-/server-11.10.0.tgz#3edc075b672c75426f682d56aadc6404fb1f6648"
+ integrity sha512-MTvJ21JPo9aS02GdjFW4nhdwOi2tNNpMmAM/YED0pkxzjDNi5WbiTwXqaCnvLc2Lr8NFtjhT0az1vTJyLIHYcw==
+ dependencies:
+ "@emotion/utils" "^1.2.0"
+ html-tokenize "^2.0.0"
+ multipipe "^1.0.2"
+ through "^2.3.8"
+
"@emotion/sheet@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c"
@@ -498,6 +508,14 @@
resolved "https://registry.yarnpkg.com/@mantine/hooks/-/hooks-6.0.0.tgz#08b67946e0b45f67181efa9e37df68f92a8ee6d1"
integrity sha512-boszkajLaA4qvd/ebDhqZBbMuUXlvJv8EM0jTaXz09IaGPachBKG5WKpXEcwWh2qmrUQL6pyhIbLMgPnvwS0QQ==
+"@mantine/ssr@^6.0.0":
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/@mantine/ssr/-/ssr-6.0.0.tgz#ceda528faf205083c53adc6533a15a0578f85a03"
+ integrity sha512-/kGRSDWw6YZ23AwsZsLR5O7nQgaWPldc9U1G0NGvHWVB6dbkX8Jb08ByQAvem1Fjq7kxnuConuU5lUKMCiRAHA==
+ dependencies:
+ "@mantine/styles" "6.0.0"
+ html-react-parser "1.4.12"
+
"@mantine/styles@6.0.0":
version "6.0.0"
resolved "https://registry.yarnpkg.com/@mantine/styles/-/styles-6.0.0.tgz#71b0b7d9c1885070543206b754cac82cbe763fda"
@@ -606,6 +624,19 @@
resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.0.5.tgz#d5c65626add4c3c185a89aa5bd38b1e42daec075"
integrity sha512-my0Mycd+jruq/1lQuO5LBB6WTlL/e8DTCYWp44DfMTDcXz8DcTlgF0ISaLsGewt+ctHN+yA8xMq3q/N7uWJPug==
+"@tabler/icons-react@^2.7.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@tabler/icons-react/-/icons-react-2.7.0.tgz#365e69175dd7432d57ae228ded9f69613649ef27"
+ integrity sha512-WV2ZwMUuZN9QcCX4RPg9+G+ycUgoItzOWVCCQYVWbYKV581fH8szM2KVaQHQhMbttL4JYtOgf4ColJIDwsIgdw==
+ dependencies:
+ "@tabler/icons" "2.7.0"
+ prop-types "^15.7.2"
+
+"@tabler/icons@2.7.0", "@tabler/icons@^2.7.0":
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/@tabler/icons/-/icons-2.7.0.tgz#565439df8dcbcedd6f75e555c513b3500f12239b"
+ integrity sha512-mSjUKhwN5fJHI9yITqFn9GXGnsJ4gBAyQDWyP4Ev5fk6hD78G7u6cHEF1KARr5FOOdiIKSZWCzNzUzyLhiNPrg==
+
"@tabler/icons@^1.117.0":
version "1.117.0"
resolved "https://registry.yarnpkg.com/@tabler/icons/-/icons-1.117.0.tgz#2ffafca94f868940cf84a839e284c243e095c45a"
@@ -765,6 +796,11 @@ browserslist@^4.21.3:
node-releases "^2.0.6"
update-browserslist-db "^1.0.9"
+buffer-from@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-0.1.2.tgz#15f4b9bcef012044df31142c14333caf6e0260d0"
+ integrity sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==
+
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
@@ -823,6 +859,11 @@ convert-source-map@^1.5.0, convert-source-map@^1.7.0:
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
+core-util-is@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+ integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
cosmiconfig@^7.0.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
@@ -861,11 +902,58 @@ detect-node-es@^1.1.0:
resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493"
integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==
+dom-serializer@^1.0.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
+ integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
+ dependencies:
+ domelementtype "^2.0.1"
+ domhandler "^4.2.0"
+ entities "^2.0.0"
+
+domelementtype@^2.0.1, domelementtype@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
+ integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+
+domhandler@4.3.1, domhandler@^4.2.0, domhandler@^4.2.2:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
+ integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
+ dependencies:
+ domelementtype "^2.2.0"
+
+domutils@^2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
+ integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==
+ dependencies:
+ dom-serializer "^1.0.1"
+ domelementtype "^2.2.0"
+ domhandler "^4.2.0"
+
+duplexer2@^0.1.2:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
+ integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==
+ dependencies:
+ readable-stream "^2.0.2"
+
electron-to-chromium@^1.4.251:
version "1.4.284"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592"
integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==
+entities@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
+ integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+
+entities@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4"
+ integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==
+
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@@ -979,6 +1067,45 @@ hoist-non-react-statics@^3.3.1:
dependencies:
react-is "^16.7.0"
+html-dom-parser@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/html-dom-parser/-/html-dom-parser-1.2.0.tgz#8f689b835982ffbf245eda99730e92b8462c111e"
+ integrity sha512-2HIpFMvvffsXHFUFjso0M9LqM+1Lm22BF+Df2ba+7QHJXjk63pWChEnI6YG27eaWqUdfnh5/Vy+OXrNTtepRsg==
+ dependencies:
+ domhandler "4.3.1"
+ htmlparser2 "7.2.0"
+
+html-react-parser@1.4.12:
+ version "1.4.12"
+ resolved "https://registry.yarnpkg.com/html-react-parser/-/html-react-parser-1.4.12.tgz#5d4336e3853a75e4ac678c9815c15c58581bb30e"
+ integrity sha512-nqYQzr4uXh67G9ejAG7djupTHmQvSTgjY83zbXLRfKHJ0F06751jXx6WKSFARDdXxCngo2/7H4Rwtfeowql4gQ==
+ dependencies:
+ domhandler "4.3.1"
+ html-dom-parser "1.2.0"
+ react-property "2.0.0"
+ style-to-js "1.1.0"
+
+html-tokenize@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/html-tokenize/-/html-tokenize-2.0.1.tgz#c3b2ea6e2837d4f8c06693393e9d2a12c960be5f"
+ integrity sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==
+ dependencies:
+ buffer-from "~0.1.1"
+ inherits "~2.0.1"
+ minimist "~1.2.5"
+ readable-stream "~1.0.27-1"
+ through2 "~0.4.1"
+
+htmlparser2@7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5"
+ integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==
+ dependencies:
+ domelementtype "^2.0.1"
+ domhandler "^4.2.2"
+ domutils "^2.8.0"
+ entities "^3.0.1"
+
import-fresh@^3.2.1:
version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
@@ -987,6 +1114,16 @@ import-fresh@^3.2.1:
parent-module "^1.0.0"
resolve-from "^4.0.0"
+inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inline-style-parser@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
+ integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
+
invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
@@ -1006,6 +1143,16 @@ is-core-module@^2.9.0:
dependencies:
has "^1.0.3"
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
+
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -1031,7 +1178,7 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
-loose-envify@^1.0.0, loose-envify@^1.1.0:
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -1057,11 +1204,24 @@ mime-types@^2.1.12:
dependencies:
mime-db "1.52.0"
+minimist@~1.2.5:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+multipipe@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-1.0.2.tgz#cc13efd833c9cda99f224f868461b8e1a3fd939d"
+ integrity sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ==
+ dependencies:
+ duplexer2 "^0.1.2"
+ object-assign "^4.1.0"
+
nanoid@^3.3.4:
version "3.3.4"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
@@ -1072,6 +1232,16 @@ node-releases@^2.0.6:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
+object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-keys@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
+ integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==
+
parent-module@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
@@ -1118,6 +1288,20 @@ prettier@^2.8.1:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc"
integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+prop-types@^15.7.2:
+ version "15.8.1"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+ integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.13.1"
+
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
@@ -1131,11 +1315,16 @@ react-dom@^18.2.0:
loose-envify "^1.1.0"
scheduler "^0.23.0"
-react-is@^16.7.0:
+react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+react-property@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/react-property/-/react-property-2.0.0.tgz#2156ba9d85fa4741faf1918b38efc1eae3c6a136"
+ integrity sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==
+
react-refresh@^0.14.0:
version "0.14.0"
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e"
@@ -1200,6 +1389,29 @@ react@^18.2.0:
dependencies:
loose-envify "^1.1.0"
+readable-stream@^2.0.2:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
+ integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@~1.0.17, readable-stream@~1.0.27-1:
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
regenerator-runtime@^0.13.11:
version "0.13.11"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
@@ -1226,6 +1438,11 @@ rollup@^3.7.0:
optionalDependencies:
fsevents "~2.3.2"
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
scheduler@^0.23.0:
version "0.23.0"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
@@ -1248,6 +1465,32 @@ source-map@^0.5.7:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+style-to-js@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.0.tgz#631cbb20fce204019b3aa1fcb5b69d951ceac4ac"
+ integrity sha512-1OqefPDxGrlMwcbfpsTVRyzwdhr4W0uxYQzeA2F1CBc8WG04udg2+ybRnvh3XYL4TdHQrCahLtax2jc8xaE6rA==
+ dependencies:
+ style-to-object "0.3.0"
+
+style-to-object@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46"
+ integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==
+ dependencies:
+ inline-style-parser "0.1.1"
+
stylis@4.1.3:
version "4.1.3"
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7"
@@ -1276,6 +1519,19 @@ tabbable@^6.0.1:
dependencies:
"@tauri-apps/api" "^1.2.0"
+through2@~0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b"
+ integrity sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==
+ dependencies:
+ readable-stream "~1.0.17"
+ xtend "~2.1.1"
+
+through@^2.3.8:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
+
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
@@ -1336,6 +1592,11 @@ use-sidecar@^1.1.2:
detect-node-es "^1.1.0"
tslib "^2.0.0"
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
vite@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/vite/-/vite-4.0.1.tgz#e0a54d818c28ae47fd27bcac6a4a952c6a658502"
@@ -1348,6 +1609,13 @@ vite@^4.0.0:
optionalDependencies:
fsevents "~2.3.2"
+xtend@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
+ integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==
+ dependencies:
+ object-keys "~0.4.0"
+
yaml@^1.10.0:
version "1.10.2"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"