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 + + + <Loader mr="md" /> + 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"